Avatar billede tlofqu Nybegynder
09. marts 2001 - 21:39 Der er 4 kommentarer og
1 løsning

Udtrække oplysninger i Delphi fra Interbase ;)

Jeg vil gerne kunne udtrække ALLE oplysninger fra en tabel på baggrund af en værdi, der ikke er en nøgle. Når jeg bruger formen:  DatasetX.Params.ByName(\'X\').AsInteger := X; - så får jeg kun én række ud og jeg ved der skal være 3 i tabellen med værdien X.

Er der en der kender en metode ? På forhånd tak ;)
Avatar billede pellelil Nybegynder
10. marts 2001 - 09:39 #1
Jeg regner med at du med ordene \"jeg ved der skal være 3 i tabellen med værdien X\" mener at der er 3 poster (rækker) i din tabel ?. Når du skriver \"DatasetX.Params.ByName(\'X\').AsInteger := X;\" så får du ikke \"en række ud\" tværdigmod så sætter du et parameter til din SQL-forespørgsel, og efter som du ikke har skrevet hvordan den ser ud så er det svært at \"rådgive\" desangående. Det er meget mulig at du sætter et parameter du bruger sammen med \"where\" i din sql-sætning (feks. \"... where x = :x\") og så vil du kun få de poster der opfylder den betingelse. Hvis du vil have ALLE poster i din tabel så skal du ikke bruge en \"where\" i din SQL-sætning.

Nedenstående viser hvordan du læser alle posterne som din forespørgsel og summere værdien.
<SNIP>
  X := 0;
  DatasetX.Fist;
  repeat
    X := X +
  until DatasetX.EOF;
<SNIP>

Sammen effekt kan opnås direkte via SQL
<SNIP>
select sum(felt1)
from DataBaseTabel
</SNIP>

Avatar billede tlofqu Nybegynder
10. marts 2001 - 10:06 #2
Ja jeg formulerede mig vist ikke korrekt - forsøger lige igen.

I SelectSQL på datasetX har jeg skrevet:
SELECT * FROM CHECKDELE WHERE CHECKDELE.X= :X

I koden har jeg skrevet:
    DatasetX.Params.ByName(\'X\').AsInteger := X;
    DatasetX.Active := true;
    showmessage(inttostr(DatasetX.RecordCount));

      DatasetX.First;

      For i:= 1 to DatasetX.RecordCount do
      begin
        Showmessage(DatasetX.FieldByName(\'X\').asstring);
        Showmessage(DatasetX.FieldByName(\'Y\').asstring);
        DatasetX.Next;       
      end;

Det er her min recordcount siger 1 og jeg ved at der er tre rækker i tabellen hvor kolonnen X har den værdi jeg sætter i DatasetX.params.ByName ...
Håber det kan give et bedre indtryk af problemstillingen ;)
Avatar billede pellelil Nybegynder
10. marts 2001 - 10:29 #3
Det er \"meget normalt\" at man ikke kan regne med RecordCount i mange (C/S) database-miljøer. This du endelig vil vide poster der er så lad database serveren om at tælle disse \"select count(*) from checkdele where checkdele.X = :X\". I dette tilfælde har du ikke behov for at vide hvor mange poster der er. Skriv i stedet dit program om til:

<SNIP>
  // \"Parameter halløj\"
  DatasetX.First;
  if not((DatasetX.EOF) and (DatasetX.BOF)) then
  begin
    repeat
      Showmessage(DatasetX.FieldByName(\'X\').asstring);
      Showmessage(DatasetX.FieldByName(\'Y\').asstring);
      DatasetX.Next;       
    until dsetImportWeekProj.Eof;
  end;
<SNIP>

Ovenstående kode vil således \"behandle\" alle posterne i dit resultatsæt (uanset hvor mange der end måtte være). Hvis jeg har BRUG for at vide hvor mange der er så bruger jeg som sagt \"count (*)\" hvor jeg lader DB-serveren udføre arbejdet. Et IBX dataset har en methode ved navn \"FetchAll\" der henter alle posterne over på clienten. Muligvis kan du bruge RecordCount efter du har lavet et kald til FetchAll - men igen det er \"meget normalt\" at RecordCount ikke kan bruges i et C/S miljø
Avatar billede pellelil Nybegynder
10. marts 2001 - 10:32 #4
Øhhh erstat \"until dsetImportWeekProj.Eof;\" med \"until DatasetX.Eof\" - det er ikke så\'n når man er lidt hurtigt til copy-paste.
 
Avatar billede tlofqu Nybegynder
10. marts 2001 - 18:26 #5
Tak for dine kvalificered svar ;)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester