Transaction kullanımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
hatice_sevim
Üye
Mesajlar: 50
Kayıt: 17 Haz 2003 09:00
Konum: İstanbul

Transaction kullanımı

Mesaj gönderen hatice_sevim »

Merhaba Arkadaşlar;

Her evrak kaydı için yeni kayıt numarasını bir table da tutup buradan bir arttırarak almak istiyorum. Bunu sağlıklı bir şekilde yapabilmek içinde Aşağıdaki transaction kodunu kitaptan aldım ve uyguladım....
(db database name' mim; db. dan sonra database in diğer seçeneklerini getiriyor burada problem yok yani)

Kod: Tümünü seç

try
      if not(db.IsSQLBased) then
        db.TransIsolation := tiDirtyRead; // database yerel veritabanını  tiDirtyRead moduna ayarla

      db.startTransaction; // Transaction işlemini başlat

      tbl_num.SetKey;
      tbl_num.FieldByName('mudurluk_no').Asinteger := pbl_mudurluk_no;
      tbl_num.FieldByName('yil').Asinteger := my_year;
      tbl_num.FieldByName('evrak_seri').Asstring := 'A';

      if not tbl_num.GotoKey then
      begin
        application.MessageBox('Müdürlük numarası bulunamadı','kayıt yok',48+0);
      end;
      tbl_num.edit;
      numara := tbl_num.FieldByName('son_numara').Asinteger;
      inc(numara); // := numara + 1;
      edt_kno.Text := inttostr(numara);
      tbl_num.FieldByName('son_numara').Asinteger := numara;
      tbl_num.FieldByName('kullanma_tarihi').Asinteger := my_date;

      tbl_gelen.FieldByName('kayit_no').Asinteger := numara; // strtoint(edt_kno.Text);

      tbl_num.applyrange;
      tbl_gelen.applyrange;

      str_99 := 'Gelen Evrak '+ inttostr(numara) +' NO ile GİRİŞ yapıldı...';
      showmessage(str_99);
//      printer_yaz();  // printer dan kaşe bastırma

      db.Commit;  // table a yazdırma

   except
      db.rollback;
      showmessage('Hata oluştuğu için kayıt alınmadı..');
   end; // try except
ama maalesef çalışmadı derlerken transaction komutlarının hiç birini tanımıyor... Başına eklemem gereken uses falan mı var acaba. Oracle database im var

Çok Teşekkürler
Hatice SEVİM / BEDAŞ
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

session nesnesini ekledin mi?
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Ben SQL Server ile kullanıyorum sorun çıkartmıyor. Eklemen gereken unit yok. Ama db, TDatabase'in Name i, DatabaseName i değil.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

uses da DB, DBTables unitları var mı? her nekadar otomatik olarak ekliyorsa da kontrol etmekte fayda var.
hatice_sevim
Üye
Mesajlar: 50
Kayıt: 17 Haz 2003 09:00
Konum: İstanbul

Mesaj gönderen hatice_sevim »

Evet Naile Hanım ;
db, TDataBase 'in name i.
Hatırlarsanız database in şifresini gömmeyi sormuştum ve Siz, TDataBase' in name ' ne db ve DatabaseName=db_baglan demiştiniz. Ben de onu denedim TDatabase=db, DatabaseName=db_baglan dedim
(DatabaseName olarak kullandığım database in ismini verdim ama olmadı.)
TDatabase in AliasName= alis_bedas verdim bunun password ve user'ınıda programda yazarak database bağlanmayı başarmıştım.

Dolayısıyla benim DatabaseName' de db_baglan var. db_baglan 'nı kullanmak istediğimde (yani db_baglan. dan sonra (Ctrl+spacebar ile ) hata veriyor. zaten kitaptada database1.startTransaction şeklinde

Recep Bey sizin session nesnesini baktım ama nasıl kullanacağımı bilmediğim için bir şey yapamadım. DB,DBTables unitlerim var.

Çok Teşekkürler
Hatice SEVİM / BEDAŞ
hatice_sevim
Üye
Mesajlar: 50
Kayıt: 17 Haz 2003 09:00
Konum: İstanbul

Mesaj gönderen hatice_sevim »

Recep Bey söylediğiniz DB;DBTables ları uses ta kontrol edince aklıma TDatabase in name db ile DB karışıyor olabilir mi diye düşündüm ve database ana form da bağlandığım için TDatabase in name ini data_base olarak değiştirirken burada rollback ve commit kullanabildiğimi gördüm. Yani ben ana form da database e bağlanıyorum ve burada iken transaction kullanabildim.
Ama 2. unit te transaction kullanmak istiyorum. ana unit, 2. unit in uses satırında var ve database deki table query leri zaten kullanabiliyorum
ama transaction nı kullanamıyorum maalesef.

Umaraım anlaşılmıştır. Biraz karıştı ama

Çok Teşekkürler
Hatice SEVİM / BEDAŞ
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Anlayabildiğim kadarıyla Database nesnen bir formda sen başka bir formda yapmak istiyorsun. Bunun için, bunu yapacağın unit ine Tdatabase in olduğu formun uniti ekle (yani uses unit1 gibi)
Çağırırkende TDatabase'in bulunduğu formun adıyla çağırmalısın Tdatabase nesneni, yani;

Form1.DB.startTransaction;

gibi..

Kolay gelsin
hatice_sevim
Üye
Mesajlar: 50
Kayıt: 17 Haz 2003 09:00
Konum: İstanbul

Mesaj gönderen hatice_sevim »

Çok teşekürler arkadaşlar;

Naile hanım sizin söylediğiniz gibi form1.DB.strartTransaction şeklinde çalıştırmayı başardım...

Çok teşekkürler
Kendinize iyi bakın
Hatice SEVİM / BEDAŞ
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Tavsiye: İyi bir programcı Database, Table, Query, Session vs. nesnelerini projesine ana formdan sonra ikinci adımda DataModul formu ekleyip (genelde DataModul formunun kullanıcı ve şifreleri alabilmek için birinci sırada create edilmesi gerekiyor), kaydederken de kolaylık olması açısından Name'ına DM adını verip kaydetmeli. Böylece tüm veritabanı araçlarına,

DM.Database1.Open;
...
DM.Table1.Open;
...
DM.Query1.Prepare;
DM.Query1.Open; v.s.

şeklinde kolayca ulaşabilir.

Amaç:
İyi bir program yazmak,
En perfomanslı çalışacak şekilde dizayn etmek,
En kısa sürede yazmak,
Daha sonra revizyon gerektiğinde kodlar içinde kaybolmamak için belli standartlara uymak, ve kod içinde bol bol comment (yorum-açıklama) satırları ile yol göstermek :wink: sadece kendisine..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

amacın en güzelini yapmak olduğu konusunda Recep abiye katılıyorum. Boşu boşuna alemin kralı demiyorum yani :) Bu tip konularda ve donanım noktasında Recep abiyi tek geçerim.

Programcı daima en güzel şekilde nasıl yapabilirim sorusunu sürekli kendine sormalı. Eğer yaptığınız program içinize sinmiyorsa bilin ki bir yerlerde hata yapıyorsunuz.

İyi günler.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Peki bu, proje içinde kullandığımız bütün query,database v.b. (ne varsa hepsini) bu DataModule forma mı koymamız anlamına mı geliyor? Ozaman daha karışık olmazmı? :roll:
hatice_sevim
Üye
Mesajlar: 50
Kayıt: 17 Haz 2003 09:00
Konum: İstanbul

Mesaj gönderen hatice_sevim »

Merhabalar;

Arkadaşlar yardımlarınız ve TAVSİYE leriniz için çok teşekkürler; Allah razı olsun Hepinizden; :D

Dediklerinize aynen ben de katılıyorum. Ama yeni birşeyler öğrenirken bu olmuyor maalesef. Çünkü öğrendiğimiz bir havuz, bu havuzun içinde neler var neler yok bunu tam olarak bilmediniz (bilmediğim) için optimum çözümü bulmak mümkün değil doğal olarak veya uygulama geliştirmeden onun öyle olabileceğini düşünemiyorsunuz. Bazen yaptıklarım banada mantıklı gelmiyor bunun daha güzeli(programlamada) olmalı diye düşünüyorum. Önceden kullanmadığım için visual programlamayı tam olarak anlamış ta değilim, işte bir şeyler yaparak öğrenmeye çalışıyorum. Bunun için projemde pek iddalı değillim. Ama çok iyi olmuyor diyerek bir şeyler yapmamakta bir şey getirmiyor açıkçası.

Neyse uzatmayayım DataModul konusunda söylediklerinizi aynen uygulayacağım. Çok beğendim.

Bunları bana aktardığınız için ayrıca :D teşekkürler;
İyi çalışmalar
Hatice SEVİM / BEDAŞ
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Merhaba Naile kardeş, çok geniş ve detaylı bir proje ise ve DataModul formu karmakarış duruma geliyorsa, DM2 adında ikinci bir DataModul oluşturup, birbiri ile ilişkili olanları ayrı ayrı paylaştırabilirsin.
-----
İyi bir programcı imkânların sınırlarını zorlar :!:
:wink:
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Tamam teşekkürler.. :)
Zaten uygulaya uygulaya, uğraşarak öğreniyor insan. TAvsiyelerinizi uygulamaya kolayacağım :)
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

bildiğimden konuşmuyorum sadece işe yaramaz bir iki laf ettim o kadar. o da zaten bildiklerim öbür tarafta işe yaramadığından paylaşayım dedim:( çünkü oradaki platform çok başka! buradaki delphinin 999 uncu versiyonu bile orada işe yaramaz! zaten işletim sistemi diye de bir şey yokmuş.
Cevapla