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Ü-timer kullanmadan saat kontrolü mümkünmü? sadikacar60 3 130 10-09-2019, Saat: 22:19
Son Yorum: sadettinpolat
  [ÇÖZÜLDÜ] cxgrid hücre formatı wiseman 2 68 10-09-2019, Saat: 13:53
Son Yorum: wiseman
  [ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata theSinan 9 236 28-08-2019, Saat: 10:05
Son Yorum: adelphiforumz
  ÇÖZÜLDÜ-daha önce çalışan kod hata veriyor firebird sadikacar60 5 194 25-08-2019, Saat: 21:07
Son Yorum: mcuyan
  ÇÖZÜLDÜ - Veritabanındaki saat alanını düzenleme wiseman 10 377 24-07-2019, Saat: 21:41
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi