type mismatch hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

type mismatch hatası

Mesaj gönderen FXERKAN »

abiler ben hatırlatma yapan bir program yapmadı deniyordum. ama bir türlü olmadı.

projemde bir grid ve query var

tablomda tarih, saat ve yaplacak işler adında fieldlar var

amacım işte günü ve saati kontrol edecek eğer sistemin o anki saati ve tarihine uyan bir kayıt varsa onu gösterecek. bunun için forma bir timer koydum ve içinde sürekli arama yapmayı düşündüm ama tabloda oldukça sorunlu oldu. query içinde şu kodu yazdım

procedure TForm1.saat_kontrolTimer(Sender: TObject);
var
sqlvalue : string;
zaman : string;
begin
label1.Caption := formatdatetime('hh:mm',now);
label2.Caption := timetostr(now);

zaman := formatdatetime('hh:mm',now);
label1.Caption := zaman;
label2.Caption := timetostr(now);

sqlvalue := 'select * from data7 where ';
sqlvalue := sqlvalue + 'SAAT LIKE ' + ' ''' + zaman + '%' + ''' ';
qer.SQL.Clear;
qer.SQL.Add(sqlvalue);
qer.Open;

end;

bu da type mistach gibi bir hata veriyor. sqlvalue de bir sorun var ama ben çözemedim.

birde bu programı bu yöntemden başka bir yöntemle nasıl yapabilirim.
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

sql icinde time formatini string ile karsilastirma yapiyprsunuz sorun muhtemelen bundan kaynaklaniyor. Eger sql icinde parametre kullanirsaniz bu sorundan kurtulursunuz.

Kod: Tümünü seç

  qer.SQL.Clear;  
  qer.SQL.Add('Select * from data7');
  qer.SQL.Add('Where SAAT=:ZAMAN');
  Qer.ParamByName('ZAMAN').AsDateTime:=.......
daha onceki mesajda da dedigim gibi tabloya kaydedilen saatlerin formati ile karsilastirmak istediginizinki ayni olmasi gerekir. Bun dikkat ederseniz calismasi lazim.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Merhaba,

Fahrettin beyin yazdıklarına ek olaraktan dikkat edilmesi gereken bir konu da şu, sen DB'den iş kontrolunu dakika dakika mı yapıyorsun?

Diyelim ki saat 16:30 bir şekilde 16:31'de query'n çalışırsa, 16:30'a atama yaptığın işler gelmeyecek.

Bunun yerine <= kontrolunu yaparsın. Ayrıca mesajını verdiğin işler için de bir Field tutarsın ve üzerine işaret koyarsın. Yani gösterimi yapıldı diye bir Field koyarsın ve gösterimi yapıldı diye işaret koyarsın.

Ayrıca kayıtlar biriktikçe LIKE'in performansı daha da kötüye gidecektir.

Bunun yerine bir index tanımlayıp bahsettiğim gibi Index'in en başına bu Flag fieldını koyarsın ve sorgulamanı

Kod: Tümünü seç

  .
  .
  qrySorgu.Close ;
  qrySorgu.SQL.Text := 'SELECT * FROM ISLER_TABLOSU '+
                       'WHERE GOSTERILDI = 0 AND SAAT <= :DT_TIME ' ;
  qrySorgu.ParamByName('DT_TIME').AsDateTime := Now ;
  .
  .


gibi yapabilirsin.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Sürekli DB ye erişmektense DB deki leri memoryde tut. ve aramlarını buradan yap. Bu bir memorytable olabilir yada kendi yazdığın bir claas. Disk e yazılma silme işlemlerinde bu memory yi tekrar oluşturursun. Performans artışın olur.Diğer türlü yani her seferinde diskten query yi aç sorgula kayıt sayın arttıkça prrogramın kasılacaktır
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