IBDataset Generate SQL(insert,Update) oluşturma.

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

IBDataset Generate SQL(insert,Update) oluşturma.

Mesaj gönderen xozcanx »

Merhaba;
Daha önce Burada Sorduğum sorunun cevabıdır aslında.
Kısa bir açıklama!
Datamodulerle çalışmak istemediğim için çalışma anında dataset oluşturup işim bittiğinde free etme yoluna gitmeye karar vermiştim. Fakat burada update,insert SQL cümlelerini yazmak açıkçası çok zamanımı almaya başlamıştı o yüzden böyle bir Procedure olurmu derken oldu ve paylaşayım istedim.
SelectSQL cümlesinin ardından

Kod: Tümünü seç

procedure SQLOlustur(dataset:TIBDataset;Tablo,keyField:string);
var
  i:integer;
  met:array[1..75] of string; // Tablolarınızda bulunan alan sayısına göre 1..XX sayısını belirlemeyi unutmayın 
  					  //aksi takdirde 50 alan olan tabloda 1..45 yaparsanız Hata alacaksınızdır.
  mSQL,iSQL,Listee:String;
begin
  dataset.Open;
  Listee:=dataset.FieldList.CommaText;

  iSQL:=iSQL+'insert into '+Tablo+' (';
  Listee:=Trim(StringReplace(Listee,'(','',[rfReplaceAll]));
  Listee:=Trim(StringReplace(Listee,')','',[rfReplaceAll]));

  mSQL:='update '+Tablo+' set ';
  i:=1;
  if pos(',',Listee) <> 0 then
  begin
    repeat
      met[i] := copy(Listee,1,pos(',',Listee)-1);
      mSQL:=mSQL+met[i]+'=:'+met[i]+',';
      iSQL:=iSQL+met[i]+',';
      delete(Listee,1,(pos(',',Listee)));
      inc(i);
    until
    pos(',',Listee) = 0;
  end;
  mSQL:=mSQL+Listee+'=:'+Listee;
  mSQL:=mSQL+' Where '+keyField+' = :OLD_'+keyField;

  iSQL:=iSQL+Listee;
  iSQL:=iSQL+')';


  Listee:=dataset.FieldList.CommaText;

  iSQL:=iSQL+(' values (');
  i:=1;
  if pos(',',Listee) <> 0 then
  begin
    repeat
      met[i] := copy(Listee,1,pos(',',Listee)-1);
      iSQL:=iSQL+':'+met[i]+',';
      delete(Listee,1,(pos(',',Listee)));
      inc(i);
    until
    pos(',',Listee) = 0;
  end;
  iSQL:=iSQL+':'+Listee;
  iSQL:=iSQL+')';
  dataset.ModifySQL.Add(mSQL);
  dataset.InsertSQL.Add(iSQL);
end;
//Kullanımı Dataset'in SelectSQL.Text'ini girdikten sonra aşağıdaki şekilde yazmak yeterli olacaktır.

SQLOlustur(datasetadi,'TabloAdı','keyField');

İyi Çalışmalar.

Not:Giriş seviyesinde olduğum için gereksiz kodlarım olmuş olabilir bildirirseniz memnun olurum.
Düzenlenme Sebebi "met:array[1..25] of string;" olan kısım "met:array[1..75] of string;" olarak değiştirildi ve karşısına açıklama getirildi.
En son xozcanx tarafından 04 Haz 2015 11:45 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: IBDataset Generate SQL(insert,Update) oluşturma.

Mesaj gönderen mrmarman »

Cevapsız konulardan düşsün istedim. Emeğin için teşekkürler.
Resim
Resim ....Resim
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: IBDataset Generate SQL(insert,Update) oluşturma.

Mesaj gönderen xozcanx »

Sizlerde sağolun hocam.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Cevapla