FibPlus'un kendi sitesindeki yayınladığı en son example sıkıştırılmış paketinde oluşturma örneği var.
Bu örneğin Henüz inceleme şansım olmadı ancak
ben örneği görmeden önce vaktiyle yazdığım şöyle bir dataset oluşturma metodum vardı.
ib bileşenleri de hemen hemen aynı metodları kullandığı için sanırım biraz değişiklikle uyum kulanılabilir.
bu koda henüz ihtiyaç duymadım ama yazarken yaptığım baştansavma denemelerimde bir hatayla karşılaşmamıştım.
Gene de fibplusun örneğini de incelemekte fayda var.
Kod: Tümünü seç
uses
StdCtrls,DB,pFIBDatabase,Forms,Windows, Messages, SysUtils, Variants, Classes,
Controls,DateUtils,IniFiles,StrUtils,Graphics,Dialogs,Consts,Math,pFIBDataSet,
pFIBQuery; // burdaki useslearın çoğu sizin için gereksiz :)
Kod: Tümünü seç
Type
TDBDatasetSQLs = record
SelectSQL,
InsertSQL,
UpdateSQL,
DeleteSQL,
ReFreshSQL : AnsiString;
end;
Kod: Tümünü seç
class Function TDBCommonMethods.GetEmptyDataset;
Begin
Result := TpFIBDataSet.Create(nil);
Result.Database := aDb;
Result.Transaction := aDb.DefaultTransaction;
if adb.DefaultUpdateTransaction<>nil then
Result.UpdateTransaction := aDB.DefaultUpdateTransaction
else
Result.UpdateTransaction := aDB.DefaultTransaction;
End;
Kod: Tümünü seç
class Function TDBCommonMethods.GetDataset(aDB:TpFIBDatabase;SQLs:TDBDatasetSQLs)
: TpFibDataset;
Begin
Result := self.GetEmptyDataset(aDb);
Result.SelectSQL.Text := SQLs.SelectSQL;
Result.UpdateSQL.Text := SQLs.SelectSQL;
Result.DeleteSQL.Text := SQLs.SelectSQL;
Result.RefreshSQL.Text := SQLs.RefreshSQL;
End;
class Function TDBCommonMethods.GetDataset(aDB:TpFIBDatabase;TableName : String; KeyFields : array of String): TpFibDataset;
var
s,a : Tstrings;
i : Integer;
ss : TDBDatasetSQLs;
Begin
s := TstringList.Create;
a := TstringList.Create;
s.Clear;
a.Clear;
adB.GetFieldNames(TableName,s);
a.Clear;
{$REGION 'SelectSQL'}
a.Add('select');
for i := 0 to s.Count - 1 do
a.Add(
IfThen(
i<s.Count-1,
Format('%0:s=:%0:s,',[s.Strings[i]]),
Format('%0:s=:%0:s ',[s.Strings[i]])
)
);
a.Add(Format('from %s',[TableName]));
ss.SelectSQL := a.Text;
{$ENDREGION}
a.Clear;
{$REGION 'InsertSQL'}
a.Add(Format('insert into %s (',[TableName]));
for i := 0 to s.Count - 1 do
a.Add(
IfThen(
i<s.Count-1,
Format('%s,',[s.Strings[i]]),
Format('%s ',[s.Strings[i]])
)
);
a.Add(') values (');
for i := 0 to s.Count - 1 do
a.Add(
IfThen(
i<s.Count-1,
Format(':%s,',[s.Strings[i]]),
Format(':%s ',[s.Strings[i]])
)
);
a.Add(')');
ss.InsertSQL := a.Text;
{$ENDREGION}
a.Clear;
{$REGION 'UpdateSQL'}
a.Add(Format('update %s set',[TableName]));
for i := 0 to s.Count - 1 do
a.Add(
IfThen(
i<s.Count-1,
Format('%0:s=:%0:s,',[s.Strings[i]]),
Format('%0:s=:%0:s ',[s.Strings[i]])
)
);
a.Add('where');
for i := Low(KeyFields) to High(KeyFields) do
a.Add(
IfThen(
i<High(KeyFields),
Format('%0:s=:OLD_%0:s and',[KeyFields[i]]),
Format('%0:s=:OLD_%0:s',[KeyFields[i]])
)
);
ss.UpdateSQL := a.Text;
{$ENDREGION}
a.Clear;
{$REGION 'DeleteSQL'}
a.Add(Format('delete from %s',[TableName]));
a.Add('where');
for i := Low(KeyFields) to High(KeyFields) do
a.Add(
IfThen(
i<High(KeyFields),
Format('%0:s=:OLD_%0:s and',[KeyFields[i]]),
Format('%0:s=:OLD_%0:s',[KeyFields[i]])
)
);
ss.DeleteSQL := a.Text;
{$ENDREGION}
a.Clear;
{$REGION 'ReFreshSQL'}
a.Add('select');
for i := 0 to s.Count - 1 do
a.Add(
IfThen(
i<s.Count-1,
Format('%0:s=:%0:s,',[s.Strings[i]]),
Format('%0:s=:%0:s ',[s.Strings[i]])
)
);
a.Add(Format('from %s',[TableName]));
a.Add('where');
for i := Low(KeyFields) to High(KeyFields) do
a.Add(
IfThen(
i<High(KeyFields),
Format('%0:s=:OLD_%0:s and',[KeyFields[i]]),
Format('%0:s=:OLD_%0:s',[KeyFields[i]])
)
);
ss.ReFreshSQL := a.Text;
{$ENDREGION}
s.Free;
a.Free;
Result := Self.GetDataset(aDB,ss);
End;