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