ExecSQL AdoDataset karsilgi?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

ExecSQL AdoDataset karsilgi?

Mesaj gönderen Glen »

Selam arkadaslar.

AdoQuery'deki ExecSQL 'i bulamadim AdoDatastete.. Buna benzer execute vs. komutlarini da aradim ancak bisey bulamadim sanirim gözden kaciriyorum...

Active := True ve
Open;

Kodlari "Command text does not result" vs. gibi şeyler diyor o yuzden ExecSQL lazim sanirim bana..

Karsiligi ne acaba?

Bir de asagidaki kodu incelerseniz.. AdoDataset1 ve AdoDataset2 farkli tablolara baglanan transactionlar.. AdoDataset1 'i veya 2 yi COMMIT, ROLLBACK edince, öbürü de otomatikman COMMIT veya ROLLBACK oluyor. Halbuki beim istedigim sadece birini commit edip öbürünün işi bitnce Commit veya Rollback etmek.. Bir yanlisim mi var acaba?

Kod: Tümünü seç

procedure TForm1.Button6Click(Sender: TObject);
begin
adodataset1.Active := False;
adodataset1.CommandText := 'ROLLBACK TRANSACTION';
adodataset1.active := true;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
adodataset2.Active := False;
adodataset2.CommandText := 'COMMIT TRANSACTION';
adodataset2.active := true;
end;
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7604
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Selam,

Sonuç döndürmeyen sql cümleleri için AdoCommand componentini kullanmalısın.

Kolay gelsin.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

mussimsek yazdı:Selam,

Sonuç döndürmeyen sql cümleleri için AdoCommand componentini kullanmalısın.

Kolay gelsin.
Selam mustafa bey,

Commit etmek tamam sonuc dondurmuyor ancak, Transaction baslatip SELECT ile seciyorum veritabanindan kisi tablo üstünde degisilklik yapiyor sonra COMMIT ediyorum yani istedigimi AdoCommand ile yapamam.. AdoQuery kullanin diyeceksiniz ancak onda da bir takim hatalar var o yuden Dataset kullaniyorum..

Tesekkürler
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

merhaba,

AdoConnection'ın begintrans ve committrans metodlarını deniyebilirsiniz.Ayrıca Eğer bütün datasetleriniz bu connection'a bağlıysa zaten programınız çalıştığında veritabanında sadece bir oturum açılacaktır.Ve aynı connectiona bağlı herhangi bir datasetten yada adoqury den bir sql ile bir transection başlattığınızda bu connectiona bağlı tüm datasetler bu durumdan etkilenecektir.

kısacası ister adoconnectiona bağlı adoqury den sql ile bir transaction başlatmış olun, ister connectionun ilgili metodlarını kullanın bu connectiona bağlı tüm Tdataset haleflerinde bir transaction başlatmış olursunuz.

kolay gelsin.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

ylmz yazdı:merhaba,

AdoConnection'ın begintrans ve committrans metodlarını deniyebilirsiniz.Ayrıca Eğer bütün datasetleriniz bu connection'a bağlıysa zaten programınız çalıştığında veritabanında sadece bir oturum açılacaktır.Ve aynı connectiona bağlı herhangi bir datasetten yada adoqury den bir sql ile bir transection başlattığınızda bu connectiona bağlı tüm datasetler bu durumdan etkilenecektir.

kısacası ister adoconnectiona bağlı adoqury den sql ile bir transaction başlatmış olun, ister connectionun ilgili metodlarını kullanın bu connectiona bağlı tüm Tdataset haleflerinde bir transaction başlatmış olursunuz.

kolay gelsin.
Aklimdaki soru isaretlerini bir bakima silmis oldunuz cunku ben bunu bir turlu cozemiyordum..
Peki nasil bir yontem izlemem gerekir yani bana farkli transactionlar lazim.
Sonuc olarak programin bir kisminda baska bir transaction, baska bir kisminda baska bir transaction kullanmam gerekicek. Bir islem bitmeden digeri biterse ve de commit ederse öbür iş yarıda kalacak...

Çözümü nedir acaba bunun?
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

merhaba,
Glen yazdı:Sonuc olarak programin bir kisminda baska bir transaction, baska bir kisminda baska bir transaction kullanmam gerekicek.
aslında soruyla birlikte cevabıda yazmışsınız.
Glen yazdı:Sonuc olarak programin bir kisminda baska bir CONNECTION, baska bir kisminda baska bir CONNECTION kullanmam gerekicek.
Aslında şöyle bir yöntemde deneyebilirsiniz (Tabii programınızın yapısı uygunsa) Transaction işlemi sadece INSERT,UPDATE ve DELETE işlemlerinde gerekli olduğuna göre, eğer tüm kayıt işlemlerini tek seferde yapabiliyorsam, yani transaction ı başlattıktan sonra kullanıcıdan herhangi bir giriş istemiyorsam tam da bu işlemler sırasında transactionu başlatır, işlemlerimi yapar ve transaction ı bitiririm.Yok eğer transaction ı başlatıp ve kullanıcıdan halen bir giriş bekliyorsanız o zaman farklı connection lar kullanmalısınız.

Kolay gelsin.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

ylmz yazdı:merhaba,
Glen yazdı:Sonuc olarak programin bir kisminda baska bir transaction, baska bir kisminda baska bir transaction kullanmam gerekicek.
aslında soruyla birlikte cevabıda yazmışsınız.
Glen yazdı:Sonuc olarak programin bir kisminda baska bir CONNECTION, baska bir kisminda baska bir CONNECTION kullanmam gerekicek.
Aslında şöyle bir yöntemde deneyebilirsiniz (Tabii programınızın yapısı uygunsa) Transaction işlemi sadece INSERT,UPDATE ve DELETE işlemlerinde gerekli olduğuna göre, eğer tüm kayıt işlemlerini tek seferde yapabiliyorsam, yani transaction ı başlattıktan sonra kullanıcıdan herhangi bir giriş istemiyorsam tam da bu işlemler sırasında transactionu başlatır, işlemlerimi yapar ve transaction ı bitiririm.Yok eğer transaction ı başlatıp ve kullanıcıdan halen bir giriş bekliyorsanız o zaman farklı connection lar kullanmalısınız.

Kolay gelsin.
Ylmz bey öncelikle gercekten tesekkür ederim ilgilendiginiz icin...

Connectioni evet dü$ündüm ancak connectionda sanirim bir kac dezantaj var..

1) Lisans problemi, Her connection MSSQL'in lisansini yiyor sanirim.
2) Performans, Her baglanti kurulmaya calisildiginda sanirim bir performans sorunu oluşacak..

Aklima bir yöntem geldi, ki herkes bunu tavsiye ediyor, ltBatchOptimistic modunda kullanmak AdoQuery'i.. Ancak CxGrid, daha onceki konularda da sordugum uzere hatalar veriyor. Aslinda sorumu bir bakima degistirecegim sanirim :) CxGrid alternatifi bir grid biliyor musunuz yani içinde databasele baglantili + databaseden bagimsiz kolonlar (string grid) şeklinde kullanabilecegim? Ve tabiki alanlarin içine Combobox, checkbox, buttonedit vs. ekilyebilecegim bir Grid?
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Re: ExecSQL AdoDataset karsilgi?

Mesaj gönderen tuanna »

Glen yazdı:Selam arkadaslar.

AdoQuery'deki ExecSQL 'i bulamadim AdoDatastete.. Buna benzer execute vs. komutlarini da aradim ancak bisey bulamadim sanirim gözden kaciriyorum...

Active := True ve
Open;

Kodlari "Command text does not result" vs. gibi şeyler diyor o yuzden ExecSQL lazim sanirim bana..

Karsiligi ne acaba?

Bir de asagidaki kodu incelerseniz.. AdoDataset1 ve AdoDataset2 farkli tablolara baglanan transactionlar.. AdoDataset1 'i veya 2 yi COMMIT, ROLLBACK edince, öbürü de otomatikman COMMIT veya ROLLBACK oluyor. Halbuki beim istedigim sadece birini commit edip öbürünün işi bitnce Commit veya Rollback etmek.. Bir yanlisim mi var acaba?

Kod: Tümünü seç

procedure TForm1.Button6Click(Sender: TObject);
begin
adodataset1.Active := False;
adodataset1.CommandText := 'ROLLBACK TRANSACTION';
adodataset1.active := true;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
adodataset2.Active := False;
adodataset2.CommandText := 'COMMIT TRANSACTION';
adodataset2.active := true;
end;

Kod: Tümünü seç


var
sqlsoru:TADOQuery;
begin
sqlsoru:=TADOQuery.Create(self);
sqlsoru.sql.add('UPDATE tabloadi SET guncellenecekalan =guncellenecekdeger WHERE sart=deger');
sqlsoru.ExecSQL
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Re: ExecSQL AdoDataset karsilgi?

Mesaj gönderen tuanna »

Glen yazdı:Selam arkadaslar.

AdoQuery'deki ExecSQL 'i bulamadim AdoDatastete.. Buna benzer execute vs. komutlarini da aradim ancak bisey bulamadim sanirim gözden kaciriyorum...

Active := True ve
Open;

Kodlari "Command text does not result" vs. gibi şeyler diyor o yuzden ExecSQL lazim sanirim bana..

Karsiligi ne acaba?

Bir de asagidaki kodu incelerseniz.. AdoDataset1 ve AdoDataset2 farkli tablolara baglanan transactionlar.. AdoDataset1 'i veya 2 yi COMMIT, ROLLBACK edince, öbürü de otomatikman COMMIT veya ROLLBACK oluyor. Halbuki beim istedigim sadece birini commit edip öbürünün işi bitnce Commit veya Rollback etmek.. Bir yanlisim mi var acaba?

Kod: Tümünü seç

procedure TForm1.Button6Click(Sender: TObject);
begin
adodataset1.Active := False;
adodataset1.CommandText := 'ROLLBACK TRANSACTION';
adodataset1.active := true;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
adodataset2.Active := False;
adodataset2.CommandText := 'COMMIT TRANSACTION';
adodataset2.active := true;
end;

Kod: Tümünü seç


Ben aşağıdaki gibi kullanabiliyorum... aslında tablo guncellemeleride öle yapıyorum toplu kayıt silme işlemlerini felan....

var
sqlsoru:TADOQuery;
begin
sqlsoru:=TADOQuery.Create(self);
sqlsoru.sql.add('UPDATE tabloadi SET guncellenecekalan =guncellenecekdeger WHERE sart=deger');
sqlsoru.ExecSQL
Siz hayal edin...Biz yapalım TuannaSoft...
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

merhaba,

cxgrid sizin söylediklerinizi yapıyor zaten.Demosundaki unbound ile ilgili programları inceleyin.Combobox, checkbox vs. hepsini yapabiliyorsunuz.

Kolay gelsin.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

ylmz yazdı:merhaba,

cxgrid sizin söylediklerinizi yapıyor zaten.Demosundaki unbound ile ilgili programları inceleyin.Combobox, checkbox vs. hepsini yapabiliyorsunuz.

Kolay gelsin.
Evet yapabiliyor.. yapmasina da :) Unbound kullanabilmek icin KeyField alaninin secilmesi gerekiyor ve BatchOptimistic Moddayken Identity olan primary key alan sonradan geldigi icin, UpdateBatch olmadan da primary keyler belirlenmedigi icin Focus problemi yasaniyor. Yani sorun cikariyor ama lookup combobox'i kodla evire cevre buttonEdite cevirebildim sorun cikarmiyor yani $uan...

Bir resim yükliyip yapidan bahsetmek istiyorum ve kuramiyorum mantigini yardimci olabilirmisiniz.. Resmi yarin yükliycem şuan kendi bilgisayarimda degilim... (Konu dışına taşmadı yine bu transactionlarla alakalı yani yapı öyle olmalı sanırım.. )
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

http://www.glenfx.com/personel.jpg

Arkadaslar yukaidaki resme bakabilir misiniz...
Editlerdeki bilgiler PERSONEL tablosuna,
Alttaki griddeki bilgiler ise personele bagli sertiifkalar, yani PERSONEL_SERTIFIKA tablosuna kaydediliyor.

Sorun şu, aradaki baglanti PERSONELREFNO ile yapiliyor, ve bu yeni bir kayit oldugu icin ortada henüz bir PERSONELREFNO'su yok, (PRIMARYKEY alanim Identity şeklinde yani MSSQL otomatikman artiriyor..)

Nasil bir yontem izlemeliyim bunu yapmak icin Transaction mi kullanmak daha mantikli yoksa, En son kaydete basildiginda once Personeli kaydedip refnosunu almak, sonra da tum PersonelRefno'lari kayittan sonra mi update etmek..

Nasil bir mantik kullanmaliyim. Transaction mi? Yoksa baska bir sey mi
Cevapla