Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank Abfragen (https://www.delphipraxis.net/91770-datenbank-abfragen.html)

Gehstock 9. Mai 2007 16:55

Datenbank: ADO • Zugriff über: ADO

Datenbank Abfragen
 
Delphi-Quellcode:
procedure TFormMain.Open;
begin
        while ADOQuery1.Active do
                ADOQuery1.Close;
        ADOQuery1.SQL.Text := 'select * from TAC8';
        ADOQuery1.Open;
        While Not ADOQuery1.Eof do begin
//               ADOQuery1.FindField('Feld1'):=inttostr(Taco);
               ADOQuery1.Locate('Feld1',inttostr(taco),[LoPartialKey]);//  zeigt immer den letzten Datensatz
                hst:= ADOQuery1.FieldValues['Feld2'];
                modell:=ADOQuery1.FieldValues['Feld3'];
                zula:=ADOQuery1.FieldValues['Feld4'];
                land:=ADOQuery1.FieldValues['Feld5'];
                ADOQuery1.Next;
        end;
        memo1.Lines.add('Manufacturer :'+hst);
        memo1.Lines.add('Model :'+modell);
        memo1.Lines.add('Reg. :'+zula);
        memo1.Lines.add('Country :'+land);
end;
ich versuch damit zum beispiel Im Feld1 nach taco zu suchen gefunden wird aber ein feld mit anderen Inhalt Warum

shmia 9. Mai 2007 17:04

Re: Datenbank Abfragen
 
Weil es falsch programmiert ist.
So geht's:
Delphi-Quellcode:
procedure TFormMain.Open;
begin
     ADOQuery1.Close; // einmal schliesen reicht !
     ADOQuery1.SQL.Text := 'select * from TAC8';
     ADOQuery1.Open;
     While Not ADOQuery1.Eof do
     begin
        if ADOQuery1.FieldByName('Feld1').AsInteger = inttostr(Taco) then
        begin
           hst:= ADOQuery1.FieldValues['Feld2'];
           modell:=ADOQuery1.FieldValues['Feld3'];
           zula:=ADOQuery1.FieldValues['Feld4'];
           land:=ADOQuery1.FieldValues['Feld5'];
           memo1.Lines.add('Manufacturer :'+hst);
           memo1.Lines.add('Model :'+modell);
           memo1.Lines.add('Reg. :'+zula);
           memo1.Lines.add('Country :'+land);
           memo1.Lines.add('==============');
        end;
        ADOQuery1.Next;
     end;
end;
Hinweis: das oben ist keine gute oder schnelle Lösung; es wird nur gezeigt
wie man über alle Datensätze geht und Werte auslesen kann.

Besser ist ein Filter über eine Where-Bedingung.

Gehstock 9. Mai 2007 17:15

Re: Datenbank Abfragen
 
damit passiert gar nichts mehr
Delphi-Quellcode:
if ADOQuery1.FieldByName('Feld1').AsInteger = (Taco) then
//Taco ist schon Integer

aber angezeigt wird nichts mehr

Schnell sollte es schon sein sind 6300 Datensätze im mehreren Tabellen

shmia 9. Mai 2007 17:19

Re: Datenbank Abfragen
 
Zitat:

Zitat von Gehstock
damit passiert gar nichts mehr
aber angezeigt wird nichts mehr

Dann gibt es keinen einzigen Datensatz in der Tabelle TAC8, der im Feld1 der Wert von taco hat!!
Du musst eben drum schauen, dass in der Tabelle passende Daten enthalten sind.

Gehstock 9. Mai 2007 17:22

Re: Datenbank Abfragen
 
Taco ist zb 351708

TAC8 sieht so aus

SQL-Code:
Feld1   Feld2   Feld3   Feld4   Feld5   TAC08
351708   Sony Ericsson   K800i   British Approvals Board of Telecommunications (BABT)   Europe   01
351732   Benq-Siemens   C81   British Approvals Board of Telecommunications (BABT)   Europe   01
351776   Benq-Siemens   E71   British Approvals Board of Telecommunications (BABT)   Europe   01
352130   Samsung Electronics   SGH-X160   British Approvals Board of Telecommunications (BABT)   Europe   01
352405   Sagem   My c5-2   British Approvals Board of Telecommunications (BABT)   Europe   01
352477   Benq-Siemens   EF61   British Approvals Board of Telecommunications (BABT)   Europe   01
352849   Benq-Siemens   EL71   British Approvals Board of Telecommunications (BABT)   Europe   01
353023   Motorola   K1   British Approvals Board of Telecommunications (BABT)   Europe   01
353039   Alcatel   One Touch E259   British Approvals Board of Telecommunications (BABT)   Europe   01
353293   Motorola   F3   British Approvals Board of Telecommunications (BABT)   Europe   01
353339   Sagem   101x   British Approvals Board of Telecommunications (BABT)   Europe   01
353647   Samsung Electronics   SGH-X656   British Approvals Board of Telecommunications (BABT)   Europe   01
354716   Sony Ericsson   K800i   British Approvals Board of Telecommunications (BABT)   Europe   01
350421   Panasonic   G50   British Approvals Board of Telecommunications (BABT)   Europe   03
359241   Sagem   501Ci   British Approvals Board of Telecommunications (BABT)   Europe   04
351166   Benq-Siemens   Unknown   British Approvals Board of Telecommunications (BABT)   Europe   08
350851   Sagem   My 3078   British Approvals Board of Telecommunications (BABT)   Europe   35

ist jetzt etwas aus der formatierung aber wenn ich was angezeigt bekomme (mit meiner lösung) zeigt er immer den letzten Datensatz

shmia 9. Mai 2007 17:28

Re: Datenbank Abfragen
 
Zitat:

Zitat von Gehstock
Taco ist zb 351708

Bist du sicher ??
Delphi-Quellcode:
procedure TFormMain.Open;
begin
     ADOQuery1.Close; // einmal schliesen reicht !
     ADOQuery1.SQL.Text := 'select * from TAC8';
     ADOQuery1.Open;

     memo1.lines.Add(Format('Taco=%d', [Taco])); // *** Neu
     memo1.lines.Add(Format('Durchsuche %d Datensätze', [ADOQuery1.RecordCount])); // *** Neu
     While Not ADOQuery1.Eof do
     begin
        if ADOQuery1.FieldByName('Feld1').AsInteger = Taco then
        begin
           hst:= ADOQuery1.FieldValues['Feld2'];
           modell:=ADOQuery1.FieldValues['Feld3'];
           zula:=ADOQuery1.FieldValues['Feld4'];
           land:=ADOQuery1.FieldValues['Feld5'];
           memo1.Lines.add('Manufacturer :'+hst);
           memo1.Lines.add('Model :'+modell);
           memo1.Lines.add('Reg. :'+zula);
           memo1.Lines.add('Country :'+land);
           memo1.Lines.add('==============');
        end
        else // *** Neu
          Memo1.Lines.Add('überspringe '+ADOQuery1.FieldByName('Feld1').AsString); // *** Neu
        ADOQuery1.Next;
     end;
end;

Gehstock 9. Mai 2007 17:32

Re: Datenbank Abfragen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Taco=0?


Ausgabe im anhang

Gehstock 9. Mai 2007 17:35

Re: Datenbank Abfragen
 
Ups mein Fehler in der Test Procedure hatte ich das Vergessen

Delphi-Quellcode:
taco:=strtoint(edit1.Text[01]+edit1.Text[02]+edit1.Text[03]+edit1.Text[04]+edit1.Text[05]+edit1.Text[06]);

shmia 9. Mai 2007 18:06

Re: Datenbank Abfragen
 
Zitat:

Zitat von Gehstock
Ups mein Fehler in der Test Procedure hatte ich das Vergessen
Delphi-Quellcode:
taco:=strtoint(edit1.Text[01]+edit1.Text[02]+edit1.Text[03]+edit1.Text[04]+edit1.Text[05]+edit1.Text[06]);

Was ist das denn ?? das ist ja total umständlich.
Delphi-Quellcode:
taco:=StrToInt(edit1.Text); // warum nicht so

// und wenn du nur die ersten 6 Stellen möchtest
taco:=StrToInt(Copy(edit1.Text, 1,6));

raiguen 9. Mai 2007 21:34

Re: Datenbank Abfragen
 
shmia hat es bereits im Posting #2 gesagt: der gezeigte Weg ist nicht elegant: Warum erst die gesammte Tabelle laden und dann satzweise durchhangeln, um einen bestimmten Datensatz zu finden?
Sowas lässt sich mit einem SQL-Statement anders=besser lösen:
Delphi-Quellcode:
procedure TFormMain.Open;
begin
  if not ADOQuery1.Prepared then
    begin
      ADOQuery1.Close; // sicherheitshalber!
      ADOQuery1.SQL.Text := 'SELECT * FROM TAC8 WHERE feld1=:WERT ';
      //--für weitere Abfragen mit unterschiedlichem Parameter vorbereiten
      ADOQuery1.Prepared := True;
  end;
 
  //--Parameter setzen, vorher Query schliessen
  ADOQuery.Close;
  ADOQuery1.Params[0].Value := StrToInt(Edit1.Text);
  ADOQuery1.Open;
 
  //--hat Abfrage einen Datensatz zürückgeliefert?
  if not ADOQuery1.IsEmpty then
     begin
       hst:= ADOQuery1.FieldValues['Feld2'];
       modell:=ADOQuery1.FieldValues['Feld3'];
       zula:=ADOQuery1.FieldValues['Feld4'];
       land:=ADOQuery1.FieldValues['Feld5'];
       memo1.Lines.add('Manufacturer :'+hst);
       memo1.Lines.add('Model :'+modell);
       memo1.Lines.add('Reg. :'+zula);
       memo1.Lines.add('Country :'+land);
       memo1.Lines.add('==============');
     end
  else
    Memo1.Lines.Add('kein Datensatz für ' + Edit1.Text + ' vorhanden');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz