DBEdit iel ilgili bir soru!!
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Kod: Tümünü seç
procedure TForm1.QUERY1_DSDataChange(Sender: TObject; Field: TField);
begin
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add('SELECT * FROM ISILTAKIPFOR2 WHERE FIRMAKOD='''+IntToStr(Query2.FieldByName('FIRKOD').AsInteger)+'''');
Query2.Open;
end;
with query1 do
begin
Close;
SQL.Clear;
SQL.Add('select ISILTAKIPFOR1.*,DIGERTABLONUNADI.* from ISILTAKIPFOR1');
SQL.Add('left join DIGERTABLONUNADI on ISILTAKIPFOR1.FIRKODU=DIGERTABLONUNADI=FIRKOD');
SQL.Add('where FIRKODU=:x');
parameters.parambyname('x').value:=edit1.text;
Open;
end;
mucar kardeşim 'x' yerine ne koyacam birde parameters kısmında hata veriyor.
begin
Close;
SQL.Clear;
SQL.Add('select ISILTAKIPFOR1.*,DIGERTABLONUNADI.* from ISILTAKIPFOR1');
SQL.Add('left join DIGERTABLONUNADI on ISILTAKIPFOR1.FIRKODU=DIGERTABLONUNADI=FIRKOD');
SQL.Add('where FIRKODU=:x');
parameters.parambyname('x').value:=edit1.text;
Open;
end;
mucar kardeşim 'x' yerine ne koyacam birde parameters kısmında hata veriyor.
Benim gönderdiğim kod iki tabloyu birleştiriyor, dbgridde bu iki tabloyu birleşmiş olarak görürsün.
Bir de hata veriyor demek yerine nerede, nasıl hata veriyor, hangi kodda onları yazarsanız yardım etmemizi kolaylaştırırsınız, aksi halde yapacak fazla bişey yok. Mesela "No SQL Statement available" hatasını forumda arattım, eksik SQL cümlesinden kaynaklandığına dair bi cevap verilmiş.
viewtopic.php?t=8793&view=next
Kod: Tümünü seç
with query1 do
begin
Close;
SQL.Clear;
SQL.Add('select ISILTAKIPFOR1.*,ISILTAKIPFOR2.* from ISILTAKIPFOR1');
SQL.Add('left join ISILTAKIPFOR2 on ISILTAKIPFOR1.FIRKODU=ISILTAKIPFOR2.FIRKOD');
SQL.Add('where FIRKODU='''+Edit1.Text+'''');
Open;
end;
viewtopic.php?t=8793&view=next
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Bu mesaj kullanılabilir bir sql deyimi yok demektir. Yani forma bir query bileşeni koyup Onun aktive özelliğini true yaptığınızda bu hata mesajını size verir. Bu yüzden sql propertisine bir table ın basit bir deyimini yazarsanız sorun çıkmaz.ozcank yazdı:'Query2:No SQL Statement available' Process stopped hatası alıyorum
Kod: Tümünü seç
select * from deneme
Kolay gelsin yardımcı olma açısından access te bir örnek yapmaya çalışalım umarım faydalı olabiliriz.
Access tarafında cari.mdb adında veritabanı oluşturalım,
İki tablemiz;
Musteri (birinci table)
id - o/s // otomatik sayı
adsoyad metin(50)
mushareket (ikinci table)id - o/s
urunkodu - metin(13)
urunadi - metin(100)
musteri_id - sayı // ilişkilendirmede kullanacağız
Şimdi gelelim delphi tarafına;delphi yi açalım
1 Adet DataModule1 açalım ve içerisinde
ADOConecction1 --> cari.mdb ye (ConnectionString le) bağlanalım
ADOTable1 -->Musteri bağlantılı
ADOTable2 -->mushareket bağlantılı
Formlarımızı oluşturalım;
Form name-->Fana olsun -- içerisinde 1 adet dbgrid ve datasource yi ADOTable1 le bağlayalım.
//Not:(implementation altındaki uses e DataModule1 ekleyelim aynı şekilde bu formdan kullanacağımız formlar içinde geçerli)
Bir adet Yeni (kayıt için) buton ekleyelim.//Biz örnek için bir adet koyduk siz düzelt sil içinde koyabilirsiniz.
Form1 açalım, project options tan Available forms olarak ayarlayalım, açılışta kalabalık yapmasın,
onclose olayınada;
action:=caFree; //kapattığımızda form yok olsun
Yine müşteri kayıtları için
Ben genelde kayıtlarda edit.text ler kullanırım;
İşlem kodu : Edit1.Text;
Müşteri Adı Soyadı: Edit2.Text;
Bir Adet de kaydet butonumuz olsun.
//Başka ekleyebilirsiniz biz örnek için iki adet koyalım.
public altına bir procedure tanımlayalım;kullandığımız editleri işimiz bitince boşaltmak için
Fana adlı formumuza dönelim ve buradan yeni adlı butonumuza tıklayalım,
Geldik Form1 e;
Burada Edit2 ye müşteri adını girdik diyelim
kaydet butonunua tıklayalım...
Kayıdımız
id si 1 adsoyad ise menderes yıldız olsun
Şimdi bu kişiye mal satalım...
Aynı şekilde Form2 açalım ve project/options dan available forms olarak ayarlayıp onclose olayına action:=caFree; yazalım....
İşlem No : Edit1.Text;
Ürün Kodu : Edit2.Text;
Ürün Adı : Edit3.Text;//visible özelliği false olan Edit4.Text (müşteri_id yazmak için)
bir de kaydet butonu koyalım.
Şimdi yine dönelim Fana formumuza;
ürün satışı diye bir buton koyalım;
Edit3.text içerisinde müşterinin id si var. Bu id ye istediğimiz kadar satış yapabiliriz. Bu iş genelde DGBrid veya başka bileşenlerle yapılıyor. Biz örnek olsun diye editleri kullanacağız.
Form2 de ise verileri girdik diyelim ve kaydet butonuna tıklayalım...
Bu şekilde manuel ilişkilendirme yi de belirtmiş olduk.
Şimdi gelelim yine Fana formumuza ve yukarıda sorulan soruya;
bir adet aldığı ürünler diye buton koyalım ve Alınan ürünlerle ilgili Form3 adında Form açalım buraya;
Müşteri id si için Edit1.Text //visible özelliği false
Müşteri Adı Soyadı :Edit2.Text;
1 adet ADOQuery1 ve DataSource,
//Alınan ürünler için
1 adet dbgrid sourcesi ADOQuery1 e bağlı,
Fana formundan aldığı ürünler diye tıklayalım,
Bu sayede seçilen müşteriye ait hareket gözükmüş olacak.
Ürün sayısını da bir label koyarak gösterelim,
Datasourcenin DataChange sine yazıyoruz.
Artık burada istediğimiz gibi bu kişiye ait hareketleri sıralayabilir ve raporlayabiliriz.
Access tarafında cari.mdb adında veritabanı oluşturalım,
İki tablemiz;
Musteri (birinci table)
id - o/s // otomatik sayı
adsoyad metin(50)
mushareket (ikinci table)id - o/s
urunkodu - metin(13)
urunadi - metin(100)
musteri_id - sayı // ilişkilendirmede kullanacağız
Şimdi gelelim delphi tarafına;delphi yi açalım
1 Adet DataModule1 açalım ve içerisinde
ADOConecction1 --> cari.mdb ye (ConnectionString le) bağlanalım
ADOTable1 -->Musteri bağlantılı
ADOTable2 -->mushareket bağlantılı
Formlarımızı oluşturalım;
Form name-->Fana olsun -- içerisinde 1 adet dbgrid ve datasource yi ADOTable1 le bağlayalım.
//Not:(implementation altındaki uses e DataModule1 ekleyelim aynı şekilde bu formdan kullanacağımız formlar içinde geçerli)
Bir adet Yeni (kayıt için) buton ekleyelim.//Biz örnek için bir adet koyduk siz düzelt sil içinde koyabilirsiniz.
Form1 açalım, project options tan Available forms olarak ayarlayalım, açılışta kalabalık yapmasın,
onclose olayınada;
action:=caFree; //kapattığımızda form yok olsun
Yine müşteri kayıtları için
Ben genelde kayıtlarda edit.text ler kullanırım;
İşlem kodu : Edit1.Text;
Müşteri Adı Soyadı: Edit2.Text;
Bir Adet de kaydet butonumuz olsun.
//Başka ekleyebilirsiniz biz örnek için iki adet koyalım.
public altına bir procedure tanımlayalım;kullandığımız editleri işimiz bitince boşaltmak için
Kod: Tümünü seç
public
{ Public declarations }
procedure atemiz();
end;
implementation
uses UnitDataModule1;
{$R *.dfm}
Procedure TForm1.atemiz();
begin
Edit1.Text:='Otomatik Sayı';//readonly=true olsun ki veri girilemesin.
Edit2.Text:='';
//Başka varsa ekleyebilirsiniz
end;
Kod: Tümünü seç
procedure TFana.yeniClick(Sender: TObject);
begin
Application.CreateForm(TForm1, Form1);
Form1.atemiz;//public olarak tanımladığımız procedure
Form1.ShowModal;
end;
Burada Edit2 ye müşteri adını girdik diyelim
kaydet butonunua tıklayalım...
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);//kaydet
begin
if Trim(Edit2.Text)<>'' then // boş geçilmemişse
begin
DataModule1.ADOTable1.Open;
DataModule1.ADOTable1.Insert;
DataModule1.ADOTable1.FieldByName('adsoyad').AsString:=Edit2.Text;
DataModule1.ADOTable1.Post;
atemiz;
//buraya Close; yazabiliriz, yani işimiz bitince form kapanması için.
end
else
begin
ShowMessage('Müşteri Adı Boş Geçilemez');
Edit2.SetFocus;
Abort;
end;
end;
id si 1 adsoyad ise menderes yıldız olsun
Şimdi bu kişiye mal satalım...
Aynı şekilde Form2 açalım ve project/options dan available forms olarak ayarlayıp onclose olayına action:=caFree; yazalım....
İşlem No : Edit1.Text;
Ürün Kodu : Edit2.Text;
Ürün Adı : Edit3.Text;//visible özelliği false olan Edit4.Text (müşteri_id yazmak için)
bir de kaydet butonu koyalım.
Şimdi yine dönelim Fana formumuza;
ürün satışı diye bir buton koyalım;
Kod: Tümünü seç
procedure TFana.satisClick(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
if DataModule1.ADOTable1.Active=True then//kayıt aktifmi
begin
Form2.Edit4.Text:=DataModule1.ADOTable1.FieldByName('id').AsString;
//Bu id yi mushareket tablesinde ki musteri_id ye kaydederken kullanacağız.
Form2.ShowModal;
end;
Form2 de ise verileri girdik diyelim ve kaydet butonuna tıklayalım...
Kod: Tümünü seç
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
if (Trim(Edit2.Text)<>'') and (Trim(Edit3.Text)<>'') then
begin
DataModule1.ADOTable2.Open;
DataModule1.ADOTable2.Insert;
DataModule1.ADOTable2.FieldByName('urunkodu').AsString:=Edit2.Text;
DataModule1.ADOTable2.FieldByName('urunadi').AsString:=Edit3.Text;
DataModule1.ADOTable2.FieldByName('musteri_id').AsInteger:=StrToInt(Edit4.Text);// Müşteri id sini almış olduk...
DataModule1.ADOTable2.Post;
Edit1.Text:='Otomatik Sayı';
Edit2.Text:='';
Edit3.Text:='';
Edit2.SetFocus;
//yukarıdaki gibi procedure tanımlayarak da (atemiz gibi) buraya bu kadar kod yazılmayabilir.
end
else
begin
ShowMessage('Eksik Bilgi Girişi');
Edit2.SetFocus;
Abort;
end;
end;
Şimdi gelelim yine Fana formumuza ve yukarıda sorulan soruya;
bir adet aldığı ürünler diye buton koyalım ve Alınan ürünlerle ilgili Form3 adında Form açalım buraya;
Müşteri id si için Edit1.Text //visible özelliği false
Müşteri Adı Soyadı :Edit2.Text;
1 adet ADOQuery1 ve DataSource,
//Alınan ürünler için
1 adet dbgrid sourcesi ADOQuery1 e bağlı,
Fana formundan aldığı ürünler diye tıklayalım,
Kod: Tümünü seç
procedure TFana.DBGrid1DblClick(Sender: TObject);
begin
Application.CreateForm(TForm3, Form3);
if DataModule1.ADOTable2.Active=True then//kayıtlar aktif mi
begin
Form3.Edit1.Text:=DataModule1.ADOTable2.FieldValues['id'];
Form3.Edit2.Text:=DataModule1.ADOTable2.FieldByName('adsoyad').AsString;
Form3.ADOQuery1.Close;
Form3.ADOQuery1.SQL.Clear;
Form3.ADOQuery1.SQL.Add('select * from mushareket');
Form3.ADOQuery1.SQL.Add('where musteri_id= ' + IntToStr(DBGrid1.DataSource.DataSet.FieldByName('id').AsInteger));
Form3.ADOQuery1.Prepared:=True;
Form3.ADOQuery1.Open;
end;
Form3.ShowModal;
end;
Ürün sayısını da bir label koyarak gösterelim,
Datasourcenin DataChange sine yazıyoruz.
Kod: Tümünü seç
procedure Teolst.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Label1.Caption:='Aktif Öğrenci Kayıt :'+IntToStr(ADOquery1.RecordCount);
end;