Access

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Re: ilginç

Mesaj gönderen miskin »

Bu arada soru Fanibirin den gelmis. YAni cevaplanmasi gereken soru asagida.
Ilaci aldim dikkati toparladim
fanibiri yazdı:SELECT A.*,B.*
FROM A_TABLOSU A, B_TABLOSU B
WHERE A.CARI_KOD=B.CARI_KOD

Mustafa hoca böyle yazmış.
Datasource ado connection ve Ado dataset kullanıyorum
hepside çok güzel cmd text e girip sql mustafa hocamın kile gibi yapıyorum
iki tablo var bilgi ve musteriler ortak alan muskod (müşteri kodu)
SELECT musteriler.*,bilgi.* FROM musteriler,bilgi WHERE musteriler.muskod=bilgi.muskod
diyorum active hale getirince ADODataset1:field muskod not found diyor hayret ediyorum sadece
SELECT * FROM bilgi,musteriler Dediğim zaman çalışıyor Delphi 6 nın uptadelerini yükledim umarım sorun yapmaz veya ben yanlış yapıyorum Teşekkürler...
miskin
Ve Tanri, bütün kullarini davul edecek :)
Kullanıcı avatarı
fanibiri
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 08:55
Konum: Antalya
İletişim:

Kismeler yanıtlamamış

Mesaj gönderen fanibiri »

Kismeler sorumu yanıtlamamış benim istediğim iki tablo arası ilişki kurmaktı... amaç tabiki bir tabloyu dbeditlere koymak ve bir tabloyuda dbgride... dbeditlerde bilgi değiştikçe dbeditlerdeki kişi ile ilgili ürünler dbgrid de belirsin :)
Bilenler Lütfen Bilmeyenlere Anlatsın....
menderes

Mesaj gönderen menderes »

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)
Kullanıcı avatarı
fanibiri
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 08:55
Konum: Antalya
İletişim:

master detail

Mesaj gönderen fanibiri »

datasource 1 ve data source 2 adoquery1 ve adoquery2 iki adet tablom var musteriler ve bilgi ortak alan muskod....
sitede aratma yapmadan master detail ilişkini bir arkadaşıma sordum ve bana açıklamayı yaptı meğer değişik bir stil varmış bilmediğim ama sizlerin kesin bildiği ben bilmeyenlere söylemek isterim....
adoquery1 ile datasource 1 i bağladık ve adoquerynin sql alanına
SELECT * FROM musteriler dedik
bağlantıyı aktif ettik.
Ardından Adaquery2 ile datasource2 yi bağladık ve adoquery nin Sql alanına SELECT * FROM bilgi Where bilgi.muskod = :muskod dedik ve bağlantısını aktif hale getirdik...
Bundan sonra kucuk detaya kaldık Adoquery2 nin data source kısmını Datasource1 yaptık ve birbirleri ile masterdetail ilişkisini kurduk. Arkadaşım bana requestlive ozelliğini true yapmamı söyledi ama Delphi 6.0 da malesef Reguestlive ı bulamadım ona rağmen kayıtlarımı yapabiliyorum ve bundan önce kurduğum ilişkide dbgrid e tüm ürünler gelirken bu ilişki ile sadece müşteriye ayit ürünler dbgridde beliriyor yaşasın arkadaşlık dostluk.. eksik varmı bilemiyorum varsa belirtirseniz sevinirim....
Bilenler Lütfen Bilmeyenlere Anlatsın....
Cevapla