Thema: Delphi SQL Syntax

Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: SQL Syntax

  Alt 2. Jun 2005, 21:04
Moin,

Zitat von omata:
ich würde von dieser ADD-Geschichte abraten
(wenn überhaupt dann APPEND, weil das eine Prozedur ist)
...Bei den neueren Datenbankkomponenten (z.B. DbExpress) gibt es keine SQL-Eingenschaft (alla TStrings) mehr, ...
Zitat von Hansa:
Letzteres bedeutet aber dann eher, daß sie inkompatibel zu TDataSet sind und deshalb ausscheiden sollten. Das wäre die logische Konsequenz und nicht das Add abzuschaffen. 8) Dabei geht es lediglich darum, einen simplen String zusammenzubauen und an die DB zu schicken. Was soll denn da das Append besser machen und was verstehst du unter "Prozedur" ?
also ADD liefert einen Integer zurück (die Einfügeposition) und ist deshalb eine Funktion. APPEND liefert keinen Rückgabewert und ist deshalb eine Prozedur. Wenn man die Erweiterte Syntax in Delphi an hat kann man Funktionen so aufrufen, wie Prozeduren. Dies ist natürlich wunderschön, aber warum soll man eine Funktion benutzen, wenn es dafür eine identische Prozedur gibt, die den nicht benötigten Rückgabewert nicht hat. Ich fand nur, wenn man diese Möglichkeit der ADD-Geschichte erwähnt, warum kann man dann nicht die elegantere Lösung erwähnen.

So, und zu dem zweiten Punkt. Natürlich ist das TDataSet nicht zur TQuery kompatibel. ABER, wenn man von der BDE (TQuery) Struktur umsteigen will auf z.B. DbExpress dann ist man wesentlich schneller beim Umbau des Quellcodes als wenn man die TStrings.Add bzw TStrings.Append Struktur benutzt.

BDE-Variante:
Delphi-Quellcode:
var Query:TQuery
begin
  Query:=TQuery.create(Self);
  try
    Query.Databasename:=Database.Databasename;
    Query.Sessionname:=Database.Sessionname;
    Query.SQL.Text:=
      'SELECT *'#13 +
      'FROM tabelle'#13 +
      'WHERE a = :a'#13 +
      'ORDER BY b';

    Query.ParamByName('a').AsInteger:=1;
    Query.Open;
    while not Query.Eof do begin

      Query.Next;
    end;
    Query.Close;
  finally
    Query.free;
  end;
end;
DbExpress-Variante:
Delphi-Quellcode:
var SDS:TSimpleDataSet;
begin
  SDS:=TSimpleDataSet.create(Self);
  try
    SDS.Connection:=SQLConnection;
    SDS.DataSet.CommandText:=
      'SELECT *'#13 +
      'FROM tabelle'#13 +
      'WHERE a = :a'#13 +
      'ORDER BY b';

    SDS.DataSet.ParamByName('a').AsInteger:=1;
    SDS.Open;
    while not SDS.Eof do begin

      SDS.Next;
    end;
    SDS.Close;
  finally
    SDS.free;
  end;
end;
Ich will hier niemanden zu etwas zwingen oder super lange auf meine Meinung beharren. Nehmt meinen Vorschlag an oder nicht - mir ist das sowas von egal. Ich wollte euch nur an meiner Erfahrung teilhaben lassen. Habs nur gut gemeint.

PS: Mir ist gerade noch etwas eingefallen. Wenn man nur solche kleinen SQL-Anweisungen schreibt, kann
das durchaus so aussehen, als ob das egal wäre - der Umbau ist dann natürlich sehr einfach.
Ich schreibe aber häufiger mal SQL-Anweisungen mit >100 Zeilen und da macht dann diese
ADD-/APPEND-Geschichte keinen Spass mehr.

MfG
Thorsten
  Mit Zitat antworten Zitat