Toon posts:

[Delphi] Sort AdoTable

Pagina: 1
Acties:
  • 143 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Als ik gesorteerde waarden van een adotable in een ListBox wil plaatsen en doe dat met dit stukje code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure ListFiller;
var
  LastValue, I : Integer;
begin
  Form1.ListBox1.Clear;
  With DataModule2.ADOTable1 do begin
    Last;
    LastValue := FieldByName('id').Value
    First;
    Sort := FieldByName('Naam').Value;
      for I := 0 to LastValue - 1 do begin
        Form1.ListBox1.Items.Append(FieldByName('Naam').Value);
        Next;
      End;
  End;
End;


dan krijg ik de melding dat het verkeerde typen zijn. Dat klopt ook wel want de ene is widestring en de andere in variant. Maar hoe doe ik het nou zo dat ik netjes een gesorteerde listbox krijg?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ik ken delphi verder niet maar wellicht moet je kijken naar:
1) de ADO recordset objects hebben een sort property, die maakt dat de recordset gesorteerd wordt
2) alle listboxes gebaseerd op de win32 listbox kunnen ook sorten middels een message. Wellicht heeft delphi in haar library ook een sortproperty op de listbox?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
Verwijderd schreef op 12 June 2003 @ 17:16:
Als ik gesorteerde waarden van een adotable in een ListBox wil plaatsen en doe dat met dit stukje code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure ListFiller;
var
  LastValue, I : Integer;
begin
  Form1.ListBox1.Clear;
  With DataModule2.ADOTable1 do begin
    Last;
    LastValue := FieldByName('id').Value
    First;
    Sort := FieldByName('Naam').Value;
      for I := 0 to LastValue - 1 do begin
        Form1.ListBox1.Items.Append(FieldByName('Naam').Value);
        Next;
      End;
  End;
End;


dan krijg ik de melding dat het verkeerde typen zijn. Dat klopt ook wel want de ene is widestring en de andere in variant. Maar hoe doe ik het nou zo dat ik netjes een gesorteerde listbox krijg?
Die melding kan je oplossen door FieldByName('Naam').AsString te doen ipv .Value

Als je de naam netjes gesorteerd wilt hebben op alfabet kijk naar de property Sorted van TListBox. :)

Ook doe je iets raars imo in je code. Je pakt van de laatste record de id maar kan je ook garanderen dat de ID - 1 evenveel records in zit als in de datasource. Het kan dus gebeuren dat je te vaak door de for-loop heen loopt terwijl dat niet hoeft. Gebruik dan dit:

code:
1
2
3
4
5
6
7
8
  With DataModule2.ADOTable1 do begin
    First;
      while not EOF do 
      begin
        Form1.ListBox1.Items.Append(FieldByName('Naam').Value);
        Next;
      End;
  End;


PS Ik weet dus niet wat die id doet maar volgens mi is dit iets beter :)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Een variant kan ook leeg zijn en dan kan het niet omgezet worden naar een string. Probeer het eens met AsString. En over welke regel praten we hier eigenlijk? Zoals EfBe al zegt, je kan ook een query gebruiken of het de TListView laten doen.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Jongens! Jullie worden allemaal ontzettend bedankt! :D Ik ben er uit! Wheew!