AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbank Abfragen

Ein Thema von Gehstock · begonnen am 9. Mai 2007 · letzter Beitrag vom 9. Mai 2007
Antwort Antwort
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#1

Datenbank Abfragen

  Alt 9. Mai 2007, 16:55
Datenbank: ADO • Zugriff über: ADO
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
Marcel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 17:04
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.
Andreas
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 17:15
damit passiert gar nichts mehr
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
Marcel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 17:19
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.
Andreas
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 17:22
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
Marcel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 17:28
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;
Andreas
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 17:32
Taco=0?


Ausgabe im anhang
Miniaturansicht angehängter Grafiken
unbenannt1_152.jpg  
Marcel
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 17:35
Ups mein Fehler in der Test Procedure hatte ich das Vergessen

taco:=strtoint(edit1.Text[01]+edit1.Text[02]+edit1.Text[03]+edit1.Text[04]+edit1.Text[05]+edit1.Text[06]);
Marcel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 18:06
Zitat von Gehstock:
Ups mein Fehler in der Test Procedure hatte ich das Vergessen
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));
Andreas
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#10

Re: Datenbank Abfragen

  Alt 9. Mai 2007, 21:34
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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