Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage Formulieren! (https://www.delphipraxis.net/20654-sql-abfrage-formulieren.html)

celinaw 21. Apr 2004 03:51


SQL Abfrage Formulieren!
 
Hi

Folgende SQL Abfrage möchte ich ändern:
SQL-Code:
qrMain.SQL.Text:='SELECT * FROM `table_ordertracking` WHERE `Customer_Number` like '''+edKNR.Text+''' ORDER BY `Order_Number`;';

Im Edit-KNR wird eine Kundennummer eingegeben. Hier muss aber immer die gesamte Nummer (6-stellen) eingegeben werden, damit estwa gefunden wird. Wie kann ich das ändern?
Ich möchte das zum Beispiel bei der eingabe von nur drei stellen z.b(650), alle Datensätze angezeigt werden die mit 650 beginnen.

Das muss doch irgendwie mit % gehen?

Gruß Celina

Robert_G 21. Apr 2004 05:41

Re: SQL Abfrage Formulieren!
 
Das sollte so funktionieren:
SQL-Code:
SELECT *
FROM Table_OrderTracking
WHERE Customer_Number like :i_edKNR
ORDER BY Order_Number
in Delphi...
Delphi-Quellcode:
With qrMain Do
Begin
  SQL.Text :=
    'SELECT *' + #10 +
    'FROM Table_OrderTracking' + #10 +
    'WHERE Customer_Number like :i_KNR' + #10 +
    'ORDER BY Order_Number';
  // Parsen des Statements um Query Parameter zu finden...
  Prepared := True;
  // Werte an Query Parameter übergeben...
  Parameters.ParamByName('i_KNR').Value := edKNR.Text+'%';
  Open;
  //...
End;

celinaw 21. Apr 2004 07:31

Re: SQL Abfrage Formulieren!
 
Hi Robert

Danke... Habs so hin bekommen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   ListItem : TlistItem;
begin
  dbMain.Host:=edServer.Text; //Server
  dbMain.Login:=edLogin.Text; //Benutzername
  dbMain.Password:=edPassword.Text; //Passwort
  dbMain.Database:=edDB.Text; //Name der Datenbank
  dbMain.Connected:=True; //Verbindung herstellen
  lvAnzeige.Items.Clear;
  try
     qrMain.SQL.Text:='SELECT * FROM `table_ordertracking` WHERE `Customer_Number` like '''+edknr.Text+'''"%" and `Order_Number` like '''+edatnr.Text+'''"%" ORDER BY `Order_Number`;';
     qrMain.Open;
     qrMain.FieldByName('Order_Type').AsString;
     while not qrMain.Eof do
  begin
    ListItem := lvAnzeige.Items.Add;
    ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString;
    ListItem.SubItems.Add(qrMain.FieldByName('Customer_Number').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Order_Number').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('First_Event').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('PrePrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Print').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('BMSLogout').AsString);
    qrMain.Next;
  end;



  finally
    dbMain.Connected:=False; //Verbindung trennen
  end;
 end;
Gruß CelinaW

Robert_G 21. Apr 2004 08:55

Re: SQL Abfrage Formulieren!
 
Das ganze würde funktionieren, aaaber....

Das Füllen des LV sollte vielleicht ein wenig dynamischer gemacht werden.

Delphi-Quellcode:
  With qrMain Do
  Begin
    SQL.Text :=
      'SELECT Order_Type' + #10 +
      '     ,Customer_Number' + #10 +
      '     ,Order_Number' + #10 +
      '     ,First_Event' + #10 +
      '     ,PrePrint' + #10 +
      '     ,Print' + #10 +
      '     ,BMSLogout' + #10 +
      'FROM  table_ordertracking' + #10 +
      'WHERE Customer_Number Like :i_KNR' + #10 +
      'ORDER By Order_Number';
    // Parse Statement um Variablen zu erkennen
    Prepared := True;
    // Parameterzuweisung
    Parameters.ParamByName('i_KNR').Value := edKNR.Text + '%'; // Hier hatte ich + '%' vergessen
    lvAnzeige.Items.Clear;
    // Ausführen
    Open;
    While Not Eof Do
    Begin
      // neues ListItem
      With lvAnzeige.Items.Add Do
      Begin
        // erste Spalte als Caption
        Caption := Fields[0].asString:
        With SubItems Do
          // Spalte 2-X als Subitems
          For i := 1 To pred(FieldCount) Do
            Add(Fields[i].asString);
      End;
      Next;
    End;
  End;
Änderst du das Select-STATEMENT wird auch der LV anders gefüllt.
Wenn die Spaltennamen fest in den Code geschrieben werden, wird er schwerer wartbar. Außerdem Sorgen deine ´ für nichts mehr als erhöhtem Aufwand beim Parsing des Statements. :zwinker:

Edit:
1 Fehlerchen ausgemerzt

celinaw 21. Apr 2004 09:00

Re: SQL Abfrage Formulieren!
 
Mhhhh... :gruebel:

Du hast wohl recht :oops:

Ich sollte das nocheinmal überarbeiten. :thuimb:

Danke für den TIP!

Gruß CelinaW

celinaw 21. Apr 2004 09:14

Re: SQL Abfrage Formulieren!
 
Mhhh....... bekomme immer die Fehlermeldung Undefenierter Bezeichner "Prepared" , "Parameters".

Ich binn noch nicht so fit in Delphi. Woran kann das liegen?

Gruß CelinaW

Robert_G 21. Apr 2004 09:22

Re: SQL Abfrage Formulieren!
 
Dann tippe doch einfach mal qrMain und dann einen .
In der Liste der Eigenschaften und Methoden wird doch sicher etwas dabei sein, dass ähnlich geschrieben wird.

Falls es dann immer noch nicht geht, kannst du ja noch schreiben welche Kompos du für den DB-Zugriff verwendest.

celinaw 21. Apr 2004 17:27

Re: SQL Abfrage Formulieren!
 
Mhhh..... :gruebel:

Bekomme ich nicht ans laufen. Benutze die ZeosDB Komponeten in der Version 5.4!

Gruß CelinaW

MarkusB 21. Apr 2004 20:48

Re: SQL Abfrage Formulieren!
 
Hi CelinaW!

Wie ist das Feld "Customer_Number" in Deiner Datenbank definiert?

Viele Güße
Markus
:gruebel:

celinaw 21. Apr 2004 23:46

Re: SQL Abfrage Formulieren!
 
Hi

Das Feld ist in der SQl DB als varchar(10). Hier steht die Kunden Nummer drin!

Gruß CelinaW


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 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