Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Funktionsbibiliothek - Objekttypunabhängig machen

  Alt 11. Aug 2005, 11:50
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');
Andreas
  Mit Zitat antworten Zitat