Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL ANweisung liefert leere Datenmenge (https://www.delphipraxis.net/130098-sql-anweisung-liefert-leere-datenmenge.html)

hoika 4. Mär 2009 14:09

Re: SQL ANweisung liefert leere Datenmenge
 
Hallo,

um mal zu den Parametern zu kommen:

Delphi-Quellcode:
with Query do
begin
  SQL.Clear;
  SQL.Add('Select * From Stammdaten');
  SQL.Add('Where Name=:Name');
  ParamByName('Name').AsString:= 'Juhu';
  Open;
  try
    if QueryIsNotEmpty ...
  finally
    Close;
  end;
end;
sieht hübsch aus, keine blödes ""

und nun weiter


Delphi-Quellcode:
with Query do
begin
  SQL.Clear;
  SQL.Add('Select * From Stammdaten');
  SQL.Add('Where Datum=:TheDate');
  ParamByName('TheDate').AsDateTime:= EncodeDate(2009,3,4);
  Open;
  try
    if QueryIsNotEmpty ...
  finally
    Close;
  end;
end;
Das Datum wird auf jeden Fall korrekt übergeben,
egal wie es intern gespeichert wird.

Ein weiterer Vorteil, Prepare.

Delphi-Quellcode:
with Query do
begin
  SQL.Clear;
  SQL.Add('Select * From Stammdaten');
  SQL.Add('Where Name=:Name');
  Prepare;
  for i:= 1 to 5 do
  begin
    ParamByName('Name').AsString:= 'Juhu'+IntToStr(i);
    Open;
    try
      if QueryIsNotEmpty ...
    finally
      Close;
    end;
  end;
end;
Die Query muss nur 1 mal prepared werden (das dauert je nach Komplexität der Query etwas),
wird dann 5mal mit unterschiedlichen Parametern benutzt.
Je nach DB bringt das ne Menge Geschwindigkeit (unter Firebird bei mir + 50%)


Noch mal zu PK kenne ich nicht, Indexfeld auch nicht.
Den PK bekommt man u.U. raus (steht in den System-Tabellen)

Um Änderungen an einem Datensatz zu erkennen, deen Felder du erst zur Laufzeit kennst,
dessen DB du auch erst zur Laufzeit kennst, dessen DB-Struktur du nicht ändern kannst
-> gute Nacht. ;)

Ne, im Ernst.

Schau dir mal das NULL-Tutorial unter ibphoenix.com an,
ist nicht so einfach.

Ich würde viell. den Datensatz des PK (er muss da sein !!!)
komplett laden und mit dem alten (vorher sichern) vergleichen.




Heiko

Moony 4. Mär 2009 16:30

Re: SQL ANweisung liefert leere Datenmenge
 
Aber woher soll ich wissen welches Feld welchen Typ hat? Ich muß doch einmal alle Felder auslesen und bei jedem Feld den Typ erfragen. Nur dann kann ich doch die Parameter füllen.

Was macht die Funktion Prepare? Denn beim TADODataSet gibts diese Funktion nicht.

Bernhard Geyer 4. Mär 2009 16:37

Re: SQL ANweisung liefert leere Datenmenge
 
Zitat:

Zitat von Moony
Aber woher soll ich wissen welches Feld welchen Typ hat?

Wie willst du überhaupt wissen ob für ein Feld dessen Typ du nicht kennst ein "=" anwendbar ist? Schon mal probiert auf eine (n)text-Feld bei MS SQL Server eine "=" anzuwenden? Freu dich auf die Fehlermeldung ...

hoika 4. Mär 2009 17:22

Re: SQL ANweisung liefert leere Datenmenge
 
Hallo,

was du willst, geht einfach nicht.
Akzeptier es einfach.
Du musst schon irgendwas über die DB/Tabelle wissen.

Die Datentypen einer Tabelle stehen in den System-Tabellen
der jeweiligen Datenbank.
Es gibt aber keine einheitliche regelung.
Da macht jeder DB-Hersteller, was er will.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
Seite 4 von 4   « Erste     234   

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