Du musst Unterscheiden zwischen Hilfsfunktionen, die mit TDataset klarkommen und Hilfsfunktionen, die
die Eigenschaft
SQL beeinflussen.
Hier ein Beispiel, für eine Funktion, die nur mit
TDataset arbeitet:
Delphi-Quellcode:
{**************************************************************************
* NAME: CopyDataSetRecord
* DESC: Kopiert alle gleichnamigen Felder aus Src nach Dst.
* Dst.State muss in [dsEdit,dsInsert] sein, sonst wird ne
* Exception geschmissen.
* Es findet keinerlei Prüfung auf Datentypen statt!
* PARAMS: Src,Dst: TDataSet
* RESULT: None
*************************************************************************}
procedure CopyDataSetRecord(Src,Dst: TDataSet);
var
i: Integer;
fSrc,fDst: TField;
begin
for i := 0
to Src.FieldCount-1
do
begin
fSrc := Src.Fields[i];
fDst := Dst.FindField(fSrc.FieldName);
if Assigned(fDst)
then
begin
fDst.Value := fSrc.Value;
end;
end;
end;
Wenn du mit
SQL-Anweisungen arbeiten willst, dann schreibst du deine Funktionen am Besten so, dass nur mit
TStrings gearbeitet wird.
Beispiel:
Delphi-Quellcode:
{**************************************************************************
* NAME: CleanSqlStrings
* DESC: entferne Kommentarzeilen aus TStrings
*************************************************************************}
procedure CleanSqlStrings(
SQL:TStrings);
var
s :
string;
i : Integer;
begin
Assert(Assigned(
SQL));
for i :=
SQL.Count-1
downto 0
do
begin
s := Copy(
SQL[i],1 ,2);
if (s = '
--')
or (s='
//')
then
// Kommentarzeile entfernen
SQL.Delete(i);
end;
end;
{**************************************************************************
* NAME: LoadSqlStrings
* DESC: Lade eine SQL-Datei in TStrings und entferne Kommentarzeilen
*************************************************************************}
procedure LoadSqlStrings(
SQL:TStrings;
const filename:
string);
begin
Assert(Assigned(
SQL));
// Datei laden
SQL.LoadFromFile(filename);
// Kommentarzeilen entfernen
CleanSqlStrings(
SQL);
end;
Später in der Anwendung stellt sich dann das Problem mit dem
SQL-Property nicht mehr:
LoadSqlString(IBQuery1.SQL, 'Summery.SQL');