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: 349
Kayıt: 05 Oca 2012 12:55

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

Mesaj gönderen xozcanx » 13 May 2015 07:59

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 10: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: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

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

Mesaj gönderen mrmarman » 15 May 2015 09:52

Cevapsız konulardan düşsün istedim. Emeğin için teşekkürler.
Resim Resim

Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 349
Kayıt: 05 Oca 2012 12:55

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

Mesaj gönderen xozcanx » 15 May 2015 02:29

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