18. marts 2004 - 09:38Der er
4 kommentarer og 1 løsning
Tæl poster i Access
Jeg ønsker at tælle hvor mange poster der er i min database, for at kunne sætte antallet af rækker lig med dette antal. Min kode ser således ud:
procedure TForm1.edithentClick(Sender: TObject); var i: integer; antal: integer; begin i:=0; antal:=0; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text:='SELECT COUNT(adressebogid) AS antal FROM adressebog'; showmessage(inttostr(antal));//for at kontrollere 'antal'. Stringgrid1.RowCount:=antal; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM adressebog'); ADOQuery1.Active := True; ADOquery1.First; while not adoquery1.EOF do begin StringGrid1.Cells[0,i]:=(AdoQuery1.FieldbyName('fornavn').AsString + ' ' + AdoQuery1.FieldbyName('efternavn').AsString + ',' + ' ' + AdoQuery1.FieldbyName('adresse').AsString); adoquery1.Next; inc(i); end; end;
Problemet er, at der ikke bliver indsat nogle værdier i 'antal'. Som det ses sætter jeg 'antal' lig med 0 i starten og det bliver den ved med at være efter den har talt posterne i databasen. Jeg har også prøvet at skrive:
ADOQuery1.SQL.Add('SELECT COUNT(adressebogid) AS antal FROM adressebog');
men det virker heller ikke. Sætter jeg ikke selv antal lig med 0, kommer den med en værdi på 1243534 (eller sådan noget) og der er altså kun 2 poster i databasen!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Min tabel hedder names og feltet jeg tæller er id, men ellers så er det analogt smolles kode:
var i: integer; Antal: integer; begin try ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT COUNT(id) AS Antal FROM names'); ADOQuery1.Open;
Antal := ADOQuery1.FieldByName('Antal').AsInteger; showmessage(inttostr(antal));//for at kontrollere 'antal'.
// Det er bare unødvendigt arbejde idet du har recordcount propertien // Se nedenfor
ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM names'); ADOQuery1.Open; Stringgrid1.RowCount := ADOQuery1.RecordCount;
i:=0; while not ADOQuery1.EOF do begin StringGrid1.Cells[0,i] := AdoQuery1.FieldbyName('Name').AsString; ADOQuery1.Next; inc(i); end; finally ADOQuery1.Close; end; // try
var i: integer; begin try ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM names'); ADOQuery1.Open;
Stringgrid1.RowCount := ADOQuery1.RecordCount;
i:=0; while not ADOQuery1.EOF do begin StringGrid1.Cells[0,i] := AdoQuery1.FieldbyName('Name').AsString; ADOQuery1.Next; inc(i); end; finally ADOQuery1.Close; end; // try
Tak for svaret hrc. Det virkede fint, så du får pointene.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.