![]() |
Datenbank: ADO • Zugriff über: ADO
Datenbank Abfragen
Delphi-Quellcode:
ich versuch damit zum beispiel Im Feld1 nach taco zu suchen gefunden wird aber ein feld mit anderen Inhalt Warum
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; |
Re: Datenbank Abfragen
Weil es falsch programmiert ist.
So geht's:
Delphi-Quellcode:
Hinweis: das oben ist keine gute oder schnelle Lösung; es wird nur gezeigt
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; wie man über alle Datensätze geht und Werte auslesen kann. Besser ist ein Filter über eine Where-Bedingung. |
Re: Datenbank Abfragen
damit passiert gar nichts mehr
Delphi-Quellcode:
//Taco ist schon Integer
if ADOQuery1.FieldByName('Feld1').AsInteger = (Taco) then
aber angezeigt wird nichts mehr Schnell sollte es schon sein sind 6300 Datensätze im mehreren Tabellen |
Re: Datenbank Abfragen
Zitat:
Du musst eben drum schauen, dass in der Tabelle passende Daten enthalten sind. |
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 |
Re: Datenbank Abfragen
Zitat:
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; |
Re: Datenbank Abfragen
Liste der Anhänge anzeigen (Anzahl: 1)
Taco=0?
Ausgabe im anhang |
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]);
|
Re: Datenbank Abfragen
Zitat:
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)); |
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 04:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz