FormCreate olayında SQL komutları neden çalışmıyor?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

FormCreate olayında SQL komutları neden çalışmıyor?

Mesaj gönderen Berdem »

Sevgili Arkadaşlarım,
Yazdığım sql kodu tek butonla hatasız bir şekilde çalışıyor.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
with yeni.Query1 do
begin
Close;
Prepare;
SQL.Clear;
SQL.Add('select TARIH, ILAC_ADI,'+PageControl1.ActivePage.Name+' from eczane where ( '+PageControl1.ActivePage.Name+' is not null)');
Open;
end;
end;
Fakat bu kodu çeşitli component ve ya form haraketlerinde değişik hatalar veriyor.
Örneğin pagecontrol haraketinde page değişikliğinde DBedit table da alanı bulamadı hatası veriyor.

Kod: Tümünü seç

procedure TForm1.PageControl1Change(Sender: TObject);
begin
DBEdit1.DataField:=PageControl1.ActivePage.Name;//Bu kod tek başına olduğunda yani sorgu olmadığında çalışıyor.
{Sorgu haraketinden sonra alanı bulamadı hatası veriyor.}
Panel2.Caption:=PageControl1.ActivePage.Caption+' Servisi';
with yeni.Query1 do
begin
Close;
Prepare;
SQL.Clear;
SQL.Add('select TARIH, ILAC_ADI,'+PageControl1.ActivePage.Name+' from eczane where ( '+PageControl1.ActivePage.Name+' is not null)');
Open;
end;
end;
Burda ki hata DBEdit1:Field 'S3' not found S3 Table daki alanında mevcut?
Ayrıca Formun creative konudugunda ise adres hatası veriyor.
En içten saygılarımla... :)
En son Berdem tarafından 13 Eyl 2003 11:34 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
hicker
Üye
Mesajlar: 68
Kayıt: 01 Tem 2003 09:58
Konum: Konya

Mesaj gönderen hicker »

Kodu s1,s2,s3 ve s4 gibi 4 kolonun olduğunu varsayarak değiştiriyorum :
procedure TForm1.Button1Click(Sender: TObject);
begin
with yeni.Query1 do
begin
Close;
Prepare;
SQL.Clear;
SQL.Add('select TARIH, ILAC_ADI,s1,s2,s3,s4 from eczane where( '+PageControl1.ActivePage.Name+' is not null)');
Open;
end;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
DBEdit1.DataField:=PageControl1.ActivePage.Name;
Panel2.Caption:=PageControl1.ActivePage.Caption+' Servisi';
Button1Click(Sender);
end;

umarım işine yarar. kolay gelsin...
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Çok Teşekkür ediyorum.Sanırım biraz eksik kaldı

Mesaj gönderen Berdem »

Çok Teşekkür ediyorum. :D
Sanırım biraz eksik kaldı .Haklısınız veri tabanında dediğiniz gibi S1,S2,devam eden alanlarım mevcut.Programda dbgrid alanım var.Sadece orda tarih, ilaç adı,sadece bir servisi görmek istiyorum. 8) Problemi iki quary ve datasource bağlayarak bu sorunu kısmen çözebildim.DBgrid farklı bir table , Editlere ise farklı bir table koyarak çözdüm.Burda asıl problemi şurda yaşadım ; sorguyu Form create olayında konulduğunda yine çakışma hatası veriyor.Bunu ise table SQLstring bölümüne secerek koydum ama ihtiyacımı karşılamıyor.Ayrıca SQL String e parametre atayarak denedim , bellek noktasında hata veriyor.Data.Quary.... buranın başında hata veriyor.Acaba merak ediyorum Form create olayına SQL komutu genelde hatamı veriyor.Fakat create olayı haricindeki komutlarda çalışıyor.Hatta ButtonClick senderi bile denedim. :oops: Sebebi şu bir tarihdeki ilaçların tümünü görmek istiyorum bu tarih degişken olduğu için buraya yerleştiremiyorum.Tekrar yardımlarınızı ve fikirlerinizi bekliyorum..
Saygılarımla...
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject); 
begin 
 with yeni.Query1 do begin 
  SQL.Clear; 
  SQL.Add('select TARIH, ILAC_ADI,s1,s2,s3,s4 from eczane ');
  SQL.Add('where( '+PageControl1.ActivePage.Name+' is not null)');
  SQL.Add('AND');
  SQL.Add('TARIH BETWEEN :ILK AND :SON'); 
   Prepare;
   ParamByName('ILK').AsDateTime := IlkTarih.Date //DateTimePicker olduğunu varsayarsak
   ParamByName('SON').AsDateTime := SonTarih.Date //DateTimePicker olduğunu varsayarsak
   Open; 
 end; 
end; 
Table yapını tam anlamadım, İlaç adlarınıda bir Field'da tutarsan ve Where bölümünde tarih gibi sorguya dahil edebilirsin.
OnCreate içinse Muhtemelen Creation Order dan kaynaklanıyordur, Formun üzerinde sağ tıkla ve Creation order dan ilgili Query ni üstlere al.
Ayrıca neden OnCreate kullanıyorsun ? OnShow u kullan, OnShow Event ı form ilk show edilişte tetiklenir, minimize ettikten sonra Restore da falan tetiklenmez, buda işini görür sanırım
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla