IBDataSet i Kodla Yönetmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

IBDataSet i Kodla Yönetmek

Mesaj gönderen haydarxxx »

Herkeze.Selam

IBDataSet in SelectSQL,Dataseteditör ve GeneratorField bölümlerini proje yaparken nasıl el ile dolduruyoruz ya bunu kodla nasıl yapabiliriz.Yani bir butonun click olayı ile şu işlemleri

Kod: Tümünü seç

IBDataSet1.Active:=false;
Ibdataset1.Database.Name:='C:\Randevu\Data\DATA.FDB';
Ibdataset1.Database.Connected:=true;
Ibdataset1.Database.AllowStreamedConnected:=true;
IBTransaction1.Active:=true;




IBDataSet1.SelectSQL.Strings('select * from DATA');

bu bölüm IBDataSet Dataseteditör işlemleri......

IBDataSet1.GeneratorField.Generator:='ID';
IBDataSet1.GeneratorField.Field:='ID';
IBDataSet1.GeneratorField.ApplyEvent.post:=true;
IBDataSet1.Active:=true;   gibi............
IBDataSet e de elle yaptığımız işlem otomatik olarak şu sırayı takip etsin kodla

1-Giriş yapıldığında Commant tex editore select * from DATA şeklinde giriş yapmak

Kod: Tümünü seç

IBDataSet1.SelectSQL.Strings('select * from DATA')
şeklinde denedim ama olmadı

2-IBDataSet GeneratorField bömlümünden

Kod: Tümünü seç

IBDataSet1.GeneratorField.Generator:='ID';
IBDataSet1.GeneratorField.Field:='ID';
IBDataSet1.GeneratorField.ApplyEvent.post:=true;  // bu ApplyEvent e post olarak seçili hale getirebilmek
3-1.işlem girişini yaptıktan sonra Dataseteditör rün açılıp yukardaki (IBDataSet1.SelectSQL.Strings('select * from DATA')) e göre Get TableFields,Dataset defaults,Select Priemierkey,Genarator Sql bölümlerini çalıştıracak

4-IBDataSet.activite:=True;

Kısacası IBDataSet e elle yaptığımız işlemi bir butona tıklayarak yapmak istiyorum.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: IBDataSet i Kodla Yönetmek

Mesaj gönderen haydarxxx »

Bir yol yöntem yok mudur arkadaşlar bu konuda
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: IBDataSet i Kodla Yönetmek

Mesaj gönderen Lost Soul »

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;
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: IBDataSet i Kodla Yönetmek

Mesaj gönderen haydarxxx »

cevap için teşekkür ederim hocam.cevap biraz geç gelince farklı bir şekilde çözüm bulmuştum sorunuma ama yinede deneyeceğim.Çok sağolasın :bravo:
Cevapla