Hüseyin hocam öncelikle yazılarınızı takip ediyorum ve duacıyım..
Şimdi ben daha önce accees kullanarak bir kaç tane program yazdım. En son uğraşım bir stok programı idi tam bitme aşamasında iken cari hareketlerde bir test yapayım dedim, 80 bin kayıtta baktım bayağı bir bekleme var bıraktım programı. Bu arada bu forumda firebird kafama da takılmıyor değildi hani ve sizlerin yazılarına güvenerek başladım yazmaya tabi daha test aşmasına gelemedim aradaki farkı görmek için (muhakkak farklıdır).... Burada söylemeden geçemeyeceğim, bu uygulama için accees i kullanmayı anlayamadım. Aydınlatırsanız sevinirim....
Neyse , ben accees uygulamalarında ilişki pek kullanmam, kontrol elimde olsun diye delphi tarafında yapıyorum.
Tablolarımız cari,nakit_islem,fatura,ceksenet olsun,
cari ->
id - o/s
yetkili - metin(50)
nakit_islem
id - o/s
cari_id - s (sayısal)
Aynı şekilde de fatura ve çeksenet ve bankalar içinde aynı şekilde cari_id adında cari tablonun kayıt numarasını alacak sayısal bir alan tanımlayalım...
cari tableye kayıt yaparken zaten biliyorsunuz id otomatik olarak artacaktır.
Aynı şekilde nakit_islem,fatura,ceksenet tablelerine de kayıt yaparken bu otomatik noyu ilgili tablenin cari_id alanına kayıt edeceğiz.
gelelim sorguya;
cari listeden bir kayıt seçelim, bu cariye ait faturaları listeleyelim.
Kod: Tümünü seç
Application.CreateForm(TForm2, Form2);
Form2.ADOQuery1.close;
Form2.ADOQuery1.SQL.Clear;
Form2.ADOQuery1.SQL.Add('select * from fatura');
Form2.ADOQuery1.SQL.Add('Where cari_id= ' + IntToStr(DBGrid1.DataSource.DataSet.FieldByName('id').AsInteger);
Form2.ADOQuery1.Prepared:=True;
Form2.ADOQuery1.Open;
Form2.ShowModal;
Bu şekilde Form2 de Cari ye ait fatura listesi listelenecektir.
diğerleri de aynı şekilde.
İkili sorgulamaları mustafa hocam birinci sayfada bahsetmişti zaten...
Yine bu cariye kayıt ederken de ben genelde dbedit değilde standart bileşenler yani Edit.Text leri kullanıyorum...
Mesela Yeni fatura kaydı yapalım bu cari ye mesela...
Form3 adında bir formumuz olsun...
Burada ;
fatura tablesine ait id için
İşlem kodu :Edit1.Text //(otomatik sayı) Readonly=True
Fatura No :Edit2.Text vs.vs.
cari_id alan için ise visible özelliği false olan Edit5.Text olsun....
Kayıt yaparken;
(DataModulemiz ve burada bir ADOTablemiz olsun(fatura));
Kod: Tümünü seç
if Edit5.Text<>'' then
begin
DataModule.ADOTable1.Open;
DataModule.ADOTable1.Insert;
DataModule.ADOTable1.FieldByName('cari_id').AsInteger:=StrToInt(Edit5.Text);
DataModule.ADOTable1.FieldByName('fatura_no').AsInteger:=StrToIntDef(Edit2.Text,0);//istiyorsanız bu alan içinde kontrol koyabilirsiniz.Boş geçmemesi için
DataModule.ADOTable1.FieldByName('adres').AsString:=Memo1.Text;
DataModule.ADOTable1.Post;
DataModule.ADOTable1.Close;//Tablemizi kapattık
//Editleri boşaltalım
Edit1.Text:=''; //veya tek tek yazma yerine Editler için ben procedure tanımlıyorum
// private nin olduğu yere mesela procedure alantemiz();
//daha sonrada {$R *.dfm} nin altına
Procedure TForm1.alantemiz();
begin
Edit1.Text:='';
Edit2.Text:=''; vs. vs.
end;
//procedure yi kullanmak için ise sadece
alantemiz; // yazmak yeterli olacaktır. Aynı işi kayıt ederken de verileri editlere doldururken de tanımlayarak fazla kod yazmaktan kurtulmuş oluyorum.
Kolay gelsin....Saygılar ( Benim düşüncem çok kayıtta başınız ağrır gibi)