Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Çözüldü-sql kodu dengesiz çalışıyor
#1
arkadaşlar aşagıdaki kod çalışmıyor kodu satırın birinde durdurdugumda tekrar çalıştırdıgımda problemsiz çalışıyor. çalışmaya devam ediyor.
ama kodu durdurma yapmazsam çalışmıyor.

tabloda 11 bin kayıt var   bu konuda bir öneriniz var mı acaba 

saygılarımla

procedure dbTBL_KASA_UPDATE_yap(bid,kolon,data:string);
var
s:string;
begin
s:='UPDATE TBL_KASA set '+kolon+'='''+data+''' where BID='+bid;
DMsettings.IBQuery1.Close;
DMsettings.IBQuery1.SQL.Clear;
DMsettings.IBQuery1.SQL.Add(s);
DMsettings.IBQuery1.ExecSQL;
DMsettings.IBTransaction1.CommitRetaining;
ShowMessage('Ok');
end;

DMsettings.IBTransaction1.Active:=false;
DMsettings.IBTransaction1.Active:=false;
DMsettings.IBDatabase1.DatabaseName:=_RecPcFolderYol+'system\DB\ACRKNTDB.FDB';
DMsettings.IBDatabase1.Connected:=true;
DMsettings.IBTransaction1.Active:=True;

DMsettings.IBQuery1.Active:=True;




s:='UPDATE TBL_KASA set '+kolon+'='''+data+''' where BID='+bid;
DMsettings.IBQuery1.Close;
DMsettings.IBQuery1.SQL.Clear;
DMsettings.IBQuery1.SQL.Add(s);
DMsettings.IBQuery1.ExecSQL;
DMsettings.IBTransaction1.CommitRetaining;
//ShowMessage('Ok');
tüm bağlantıları kod içinde tekrar yaptırdım.
sanırım bir yerde bağlantıyı koparıyoruz.
yukardaki şekilde çalışıyor

merak ettiğim bir şey var datamodule create de tabloya bağlanıp sürekli bağlı kalmak mı doğru yoksa bir bağlantı procedure oluşturup
her işlemden önce bağlanmak mı daha doğru

saygılarımla
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
iyne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#2
Fikir vermesi açısından 
datamodul içerisine  fonksiyon yazıyorum ihtiyaç duyunca bağlanıyorum işin bitince aşağıdaki gibi bağlantıları kapatıyorum.
 
if assigned(data_form.siparis_sorgu)      then FreeAndNil(data_form.siparis_sorgu);
if assigned(data_form.siparis_kaynak)     then FreeAndNil(data_form.siparis_kaynak);
programın çalışması değil yazım kurallarına uyulması gerektiğini
aşağıdaki bilgilerin tamamı bu formdan öğrendim ve uygulamaya çalıştım 
 function Tdata_form.siparis_oku(komut:AnsiString;yaz:boolean): Boolean;
  var mesaj:string;
 begin
     if not assigned(siparis_sorgu)  then siparis_sorgu  := TADOQuery.Create(nil); // siparis oku işlemleri sorgu yoksa oluştur.
     if not assigned(siparis_kaynak) then siparis_kaynak := TDataSource.Create(nil);// siparis oku işlemleri kaynak yoksa oluştur.
     try
         siparis_sorgu.Connection := Sunucu_baglan;
         if siparis_sorgu.Active then siparis_sorgu.Close; //  siparis oku işlemler sorgusu aktif ise kapat.
         siparis_sorgu.SQL.Clear;
         // memo1.Text := komut;
         //  memo1.Lines.SaveToFile('c:\sql.txt'); son çalışan komutu incelemek için ekledim.
         siparis_sorgu.sql.Add(komut);
         siparis_sorgu.Prepared := true;
         if (yaz) then siparis_sorgu.ExecSQL else siparis_sorgu.open;
         result:=true; // doğru çalıştı
         siparis_kaynak.DataSet := siparis_sorgu;
         siparis_kaynak.Enabled := true;
                    except  on E: Exception do
                     begin
                      if assigned(siparis_sorgu) then siparis_sorgu.Free;
                      if assigned(siparis_kaynak) then siparis_kaynak.Free;
                      mesaj:='Siparis Sorgu okuma başarısız. Hata mesajı : '+e.Message;
                      Application.MessageBox(PWideChar(mesaj), 'Hata', MB_OK + MB_ICONERROR);
                      result:=false; // hata oluştu
                      exit;
                      end;
     end;
 end;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#3
hocam bu satıra gerek var mı bilmiyorum..
// DMsettings.IBTransaction1.CommitRetaining;
ayrıca bir de execute ile denermisiniz.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#4
procedure dbTBL_KASA_UPDATE_yap(bid,kolon,data:string);
var
s:string;
begin
ResepsiyonDBbaglan;

s:='UPDATE TBL_KASA set '+kolon+'='''+data+''' where BID='+bid;
DMsettings.IBQuery1.Close;
DMsettings.IBQuery1.SQL.Clear;
DMsettings.IBQuery1.SQL.Add(s);
DMsettings.IBQuery1.ExecSQL;
DMsettings.IBTransaction1.CommitRetaining;
//ShowMessage('Ok');
end;
kod yukardaki şekilde stabil çalışıyor execute yaptıgımda hata veriyor 
CommitRetaining  kodunu koymadığım zaman üst üste güncelleme yapmak istediğim zaman yapmıyor 1 kere yapıyor başka güncellem yapmıyor. bu şekilde yapınca sorun olmuyor çok teknik detayını bilmiyorum forumlardan böyle çözüm bulmuştum saygılarımla
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
iyne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#5
Hocam şu satırıda şöyle yazmanızı tavsiye edeceğim.

s:='UPDATE TBL_KASA set '+kolon+QuotedStr('=') '+data+' where BID='+bid;

Çünki '=' kısmı yanlış yazmışsınız..
// Bilgi paylaştıkça çoğalır.. 

Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ÇÖZÜLDÜ-daha önce çalışan kod hata veriyor firebird sadikacar60 4 67 2 saat önce
Son Yorum: sadikacar60
  ÇÖZÜLDÜ - Veritabanındaki saat alanını düzenleme wiseman 10 268 24-07-2019, Saat: 21:41
Son Yorum: mcuyan
  Çözüldü. Fastreport ta çalışma anında dataset atama cinarbil 2 183 11-07-2019, Saat: 17:55
Son Yorum: cinarbil
  [ÇÖZÜLDÜ] WebDav ile Bulut Sunucuya Dosya Yükleme theSinan 4 451 08-07-2019, Saat: 15:42
Son Yorum: r3n4m3
  Çözüldü - FastReport Pivot ve Group birlikte kullanılabilirmi ? adelphiforumz 5 353 05-07-2019, Saat: 14:20
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi