Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query mit Primary Key (https://www.delphipraxis.net/56369-query-mit-primary-key.html)

berndberndbernd5b 4. Nov 2005 16:58

Datenbank: MS Access 2003 • Zugriff über: data Source, Data Table .....

Query mit Primary Key
 
Hallo!
Ich habe einen SQL Query gemacht, funzt auch ....

Jetzt möchte ich nur, dass ich nur den Datensatz auswählen, der am meisten übereinstimmt mit meiner

Delphi-Quellcode:
with table1 do
begin
indexname:='Primarykey';
setkey;
fieldbyname('Personalnummer').ASString:= edit1.text;
gotonearest;
edit2.text:=fieldbyname('Name').ASString;
edit3.text:=fieldbyname('Vorname').ASString;
edit4.text:=fieldbyname('Gehalt').ASString;
das klappt auch mit einer einfachen Tabelle, aber nicht mit einer Query.

da meldet der mir, dass er keinen PrimaryKey hat.

Als DBMS nutz ich Access.

Sharky 5. Nov 2005 06:33

Re: Query mit Primary Key
 
Hai berndberndbernd5b,

bei SQL (TQuery) gibt es das so nicht. Du musst Dir also eine passende SQL-Abfrage bauen. In diesem Fall könnte die so aussehen:
Delphi-Quellcode:
procedure TForm1.btn_FindClick(Sender: TObject);
begin
  with Query1 do
  begin
    SQL.Text := 'SELECT * FROM tabelle WHERER personalnummer LIKE :pnummer';
       //:pnummer ist ein Parameter
    ParamCheck := True; // Parameterverarbeitung aktivieren
    ParamByName(':pnummer').AsString := '%' + Edit1.Text + '%';
    Open; // Abfrage durchführen
    Edit2.text:=fieldbyname('Name').ASString;
    Edit3.text:=fieldbyname('Vorname').ASString;
    Edit4.text:=fieldbyname('Gehalt').ASString;
    Close;
  end;
end;
Hier bei werden alle Personalnummern gefunden in denen die Zeichenfolge aus Edit1.Text vorkommt.

berndberndbernd5b 5. Nov 2005 08:43

Re: Query mit Primary Key
 
hi

kannst du mir das mit dem Parameter installieren

Sharky 5. Nov 2005 08:47

Re: Query mit Primary Key
 
Zitat:

Zitat von berndberndbernd5b
... kannst du mir das mit dem Parameter installieren

:?: Was meinst Du mit installieren?

berndberndbernd5b 5. Nov 2005 11:00

Re: Query mit Primary Key
 
sry ich mein erklären, war was durcheinander ....

Sharky 5. Nov 2005 11:21

Re: Query mit Primary Key
 
Zitat:

Zitat von berndberndbernd5b
... war was durcheinander ....

:stupid:
Eigentlich ganz einfach. Wenn in einem SQL-Kommande etwas mit einem Doppelpunkt davor steht wird dies als Parameter interpretiert.
SQL-Code:
SELECT * FROM tabelle WHERE feld1 = :blubb
Hier ist "blubb" der Parameter. Dieser muss naürlich noch mit einem Wert gefüllt werden. Hierfür kannst Du Delphi-Referenz durchsuchenParamByName verwenden um ihn anhant seines Namens zu finden oder mit [oh]Params[nummer][/oh] um ihn anhant der Nummer (mit 0 beginnend) zu setzen.

Warum nun der ganze Aufwand?
Einer der vorteile von Parametern ist das Du dich nicht darum kümmern musst das Du etwas im richtigen Format übergibst.
Viele DBMS wollen das Strings in ' eingeschlossen sind wenn sie in dem Query stehen.
Also so:
SQL-Code:
SELECT * FROM tabelle WHERE feld1 = 'meow'
Jetzt kannst Du entweder so etwas machen:
Delphi-Quellcode:
begin
  with query do
  begin
    SQL.Text := 'SELECT * FROM tabelle WHERE feld1 = ' + QuotedStr('meow');
  end;
end;
oder
Delphi-Quellcode:
const
  sqltext := 'SELECT * FROM tabelle WHERE feld1 = %s';
begin
  with query do
  begin
    SQL.Text := Format (sqltext,[QuotedStr('meow')];
  end;
end;
oder aber Du arbeitest mit Parametern und überlässt es dem "Treiber" die Daten richtig an die DB zu übergeben.
Delphi-Quellcode:
begin
  with query do
  begin
    SQL.Text := 'SELECT * FROM tabelle WHERE feld1 = :parameter1';
    ParamByName('parameter1').AsString := 'meow';
  end;
end;
Richtig lustig wird es wenn Du ein Datum übergeben möchtest. Dann muss das Datum, wenn Du es als String in das Query schreibst in dem Format stehen wie es von der Verwendeten DB verlangt wird. Im Zweiffelsfall kennst Du das Format aber überhaupt nicht. Die Lösung? Ja -> Parameter

Delphi-Quellcode:
begin
  with query do
  begin
    SQL.Text := 'SELECT * FROM tabelle WHERE datumsfeld = :datum';
    Params[0].AsDate := date; // Den ersten Parameter mit dem heutigen Datum füllen.
  end;
end;
Egal wie das DBMS das Datum nun erwartet. Es kommt richtig dort an.

berndberndbernd5b 5. Nov 2005 11:27

Re: Query mit Primary Key
 
jo cool


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