Results 1 to 4 of 4

Thread: Lazarus - SQLite sortering vraagje

  1. #1

    Question Lazarus - SQLite sortering vraagje

    In mijn (Lazarus) applicatie heb ik een dbgrid gebaseerd op een SQLite tabel en een knop waarmee ik de sortering van het dbgrid wil wijzigen.
    Als ik de eerste keer klik moet het dbgrid oplopend op Naam worden gesorteerd, klik ik nogmaals dan dient het grid aflopend op Naam te worden gesorteerd.
    Nu dacht ik dat de volgende code zou moeten werken maar in de praktijk lijkt het erop dat SQLite 3 geen DESC en ASC herkent in de ORDER BY.
    Het resultaat is in ieder geval dat het grid ongeacht klikken altijd oplopend op Naam blijft.

    Code:
      if SortNaam = 'Ascending'
      then begin
           SortNaam := 'Descending';
           Sqlite3dsAdressen.ExecSQL('SELECT * FROM Adressen ORDER BY Naam DESC');
           Sqlite3dsAdressen.RefetchData;
           dbgrid1.Refresh;
      end
      else begin
           SortNaam := 'Ascending';
           Sqlite3dsAdressen.ExecSQL('SELECT * FROM Adressen ORDER BY Naam ASC');
           Sqlite3dsAdressen.RefetchData;
           dbgrid1.Refresh;
      end;
    Als SQLLite inderdaad geen DESC en ASC accepteert hoe kanik dan de sortering van mijn dbgrid aanpassen?
    Ik heb als alternatief in SQLite ook al twee extra indexen aangemaakt (Name-Asc en Name_Desc) maar ik heb geen idee hoe ik in SQLite van index kan wisselen middels Pascal code.
    Heeft iemand ervaring met SQLite en kan die mij op weg helpen?

    Bij voorbaat dank!

    Jan

  2. #2
    Senior Member xsintill's Avatar
    Join Date
    Aug 2002
    Location
    Rotterdam
    Posts
    1,075
    Als ik even vluchtig door de documentatie kijk zie ik dat sqlite
    collate als keyword wil voor asc of desc.

    dus zoals ik het zie(ongetest):
    Code:
    SELECT * FROM Adressen ORDER BY Naam COLLATE ASC

  3. #3
    Volgens mag je COLLATE en/of DESC/ASC gebruiken, maar zoals ik de documentatie lees zijn dat twee aparte zaken.
    Volgens mij suggereert de tekst in die SQLite webpagina juist dat je zowel het een als het ander mag gebruiken bij een ORDER BY.
    Volgens mij moet je bij gebruik van COLLATE dan ook een collate-functienaam meegeven en die heb ik helemaal niet.
    Ik zal vanavond eens wat gaan testen met het toevoegen van het woord COLLATE. Benieuwd hoe en waar je dan collate-functie schrijft en opbergt.

    Programmeren blijft toch een boeiend vak

  4. #4
    Zoals ik al vermoedde heeft het toevoegen van COLLATE niet het gewenste effect (geeft een database error).
    Uiteindelijk heb ik de oplossing gevonden door de code als volgt te wijzigen:

    Code:
      if SortNaam = 'Ascending'
      then begin
           SortNaam := 'Descending';
           Sqlite3dsAdressen.SQL:= 'SELECT * FROM Adressen ORDER BY Naam DESC';
           Sqlite3dsAdressen.RefetchData;
           dbgrid1.Refresh;
      end
      else begin
           SortNaam := 'Ascending';
           Sqlite3dsAdressen.SQL:= 'SELECT * FROM Adressen ORDER BY Naam ASC';
           Sqlite3dsAdressen.RefetchData;
           dbgrid1.Refresh;
      end;
    Kortom niks 'EXECSQL' maar gewoon de SQL property vullen en dan een refetch van de data.
    Opgelost dus en weer wat wijzer geworden.


Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •