Selam...
@mrmarman yazdı:- Komik gelecek ama sorunun parametre ile ilgisi olmayabilir. Ne zaman parametre hatası alsam sonucunda artık ilk baktığım şey Connection tanımını yapıp yapmadığımdır.
- Neden komik geldiğini anladın umarım. Parametre ile Connection'un -
direkt- ne alakası var ? İşte bu komik.
@bobasturk yazdı:Alan zaten vt de tarih/saat olarak ayarlı bu type yi belirtmenin şartı veya faydası nedir acaba? öğrenmek adına açıklarsanız ezbere gitmemiş oluruz.
- Aslında ezbere bir durum var ortada. Benim söylediğim de %100 doğru demiyorum. Kuşkulu durum şu, DataType versek de vermesek de genellikle çalışıyor. Her zaman değil ama bazen hata alınıyor.
-
Parametre ile Connection'un -direkt- ne alakası var ? dedik aynı şekilde Tip Uyuşmazlığı hatasında da hatanın kaynağı bulunması imkansız gibi bazı durumlar söz konusu var. Bu nedenle
datatype olayının üzerine ısrarla basma ihtiyacı duydum.
SQL ile aramda kişisel problemim var diyelim istersen buna...
- Etik olarak bakarsam her zaman istenen tip hangisi ise o tipe dönüşüm önceden yapılmalı diyorum. Aslında yaptığımız da bundan ibaret.
- Kendiliğinde otomatik yapılsa bile bunun otomatize edilemediği durumlar olabilir, mesajımın sonudaki örnekte buna değinicem.
- Aşağıdaki vereceğim iki örnek de çalışacaktır. Anlamak adına faydalı olacak. Parametreye birinde
String tipinde değer atıycam diğerinde
Date tipinde.
Kod: Tümünü seç
SQL.Text := 'SELECT * FROM Tablo WHERE Tarih = :d1';
Parameters.ParamByName('d1').Value := '10.09.2006';
Active := True;
Kod: Tümünü seç
SQL.Text := 'SELECT * FROM Tablo WHERE Tarih = :d1';
Parameters.ParamByName('d1').Value := StrTodate('10.09.2006');
Active := True;
- Veritabanı derleyicisi alanın
Date tipinde olduğunu biliyor ve bizden
parametrenin de karşılaştırma adına
date tipinde gelmesini bekliyor.
- Şimdi bunu irdeleyelim. Nasıl oluyor da parametre atamasını hem
Text olarak verince çalışıyor hem de
Date verince ? Parametre Value değeri
Variant da ondan.
- Ama bu beni tatmin etmiyor çünkü
Variant tipi bukalemun gibi her kılığa giren bir tiptir.
-
HATA yoksa neden buna gerek duyudun ? ve
hata nerede ortaya çıkacak o zaman ? sorularını duyar gibiyim... Kullanıcı girişlerinde, system tarafından belirlenmiş tarih formatı dışında bir girişle karşılaşıldığında olabilir veya tahmin edemediğim başka yerlerde.
- Bu satırları yinelememdeki amacımı kısaca özetlersem, her zaman hata almazsınız. Ama bir gün bir yerde
SQL çalışırken atadığınız parametrede
tip uyuşmazlığı hatası alırsanız bu yazdıklarımı hatırlayınız ve
DataType tanımınını ekleyiniz. Hatanız bertaraf edilmiş olacaktır.
