Çalışan SQL kodunda Delphi msjet40.dll HATASI veriyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
F.Atagun
Üye
Mesajlar: 158
Kayıt: 01 Oca 2008 01:56

Çalışan SQL kodunda Delphi msjet40.dll HATASI veriyor

Mesaj gönderen F.Atagun »

Selamlar,

Aşağıdaki SQL kodumu access veritabanı sorgular bölümünden başarıyla çalıştırıyorum. Ancak bu kodu delphiden çağırdığımda msjet40.dll hatasını veriyor.

Kod: Tümünü seç

---------------------------
Debugger Exception Notification
---------------------------
Project MDIAPP.exe raised exception class EAccessViolation with message 'Access violation at address 1B041FC6 in module 'msjet40.dll'. Read of address 0000242E'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------
Forumda msjet40 ile ilgili sorulara baktım msjet40.dll dosyasınının SYSTEM32 klasöründe olması gerektiğini ve Format at düzelir seçeneği gördüm :D

msjet40.dll sürümüne microsoft sitesinden güncelleyim dedim zaten en güncel dll miş.

SQL kodundan

Kod: Tümünü seç

Sum(CariHareket.Tutar) AS Borc, First(CariHareket.Evrakno) AS Evrakno,
bölümlerini çıkartısam delphi üzerinde çalışıyor. Ama en önemli bölüm burası. Mutlaka olmalı yani.


Acaba DLL 'lerle ilgili bişi mi yapmam gerekiyor ?

Kod: Tümünü seç

SELECT CariHareket.Musterikodu, CariHareket.Tarihi, CariHareket.islemtipi, First(CariHareket.Evrakno) AS Evrakno, CariHareket.izahat, CariHareket.BorcAlacak, KrediKarti.TaksitVade, Sum(CariHareket.Tutar) AS Tutar, KrediKarti.TaksitTutari, Police1.DBrutPrim, CariHareket.ParaBirimi, Police1.Plaka, Police1.RizikoAdresi, Police1.SigortaEttiren AS Sigortalı, Police1.GrupKodu, CariHareket.OzelKod1, CariHareket.OzelKod2, KrediKarti.KKMasBanka, KrediKarti.KKMasNumara, Police1.TanzimTarihi, Police1.BaslangicTarihi, Police1.BitisTarihi, CekKarti.Sube AS CEKSUBE, CariHareket.BK, CariHareket.PN, Nakit.Aciklama AS HavaleNot, CekKarti.CekNo, CekKarti.Banka AS CEKBANKA
FROM (((CariHareket LEFT JOIN Police1 ON (CariHareket.PoliceSiraNo = Police1.SiraNo) AND (CariHareket.Musterikodu = Police1.MusteriKodu)) LEFT JOIN KrediKarti ON CariHareket.Evrakno = KrediKarti.FormNo) LEFT JOIN CekKarti ON CariHareket.Evrakno = CekKarti.BelgeNo) LEFT JOIN Nakit ON CariHareket.Evrakno = Nakit.BelgeNo
WHERE (((CariHareket.DeleteUser)="" Or (CariHareket.DeleteUser) Is Null))
GROUP BY CariHareket.Musterikodu, CariHareket.Tarihi, CariHareket.islemtipi, CariHareket.izahat, CariHareket.BorcAlacak, KrediKarti.TaksitVade, KrediKarti.TaksitTutari, Police1.DBrutPrim, CariHareket.ParaBirimi, Police1.Plaka, Police1.RizikoAdresi, Police1.SigortaEttiren, Police1.GrupKodu, CariHareket.OzelKod1, CariHareket.OzelKod2, KrediKarti.KKMasBanka, KrediKarti.KKMasNumara, Police1.TanzimTarihi, Police1.BaslangicTarihi, Police1.BitisTarihi, CekKarti.Sube, CariHareket.BK, CariHareket.PN, Nakit.Aciklama, CekKarti.CekNo, CekKarti.Banka
HAVING (((CariHareket.Musterikodu)="000123"))
ORDER BY CariHareket.Tarihi, CariHareket.ParaBirimi, KrediKarti.TaksitVade

Değerli yorumlarınızı rica ederim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

MDAC kurulumunu yeniden yaparmısın. belki bununla ilgilidir. MS sitesinde bulursun. 2.8 den günceli varmı bilmiyorum.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
F.Atagun
Üye
Mesajlar: 158
Kayıt: 01 Oca 2008 01:56

Mesaj gönderen F.Atagun »

@ikutluay Hocam teşekkür ederim. Dediklerini yaptım fakat olmadı.

Uzun bir araştırma sonucu bu hatanın sebebini buldum.
Önceki sorularımda belirtmiştim. Access database'e VB ile yazılan bir programa eklentiler yapıyoruz. Bu sebepten ötürü eski databasi kullanıyoruz.

Sorunun kaynağını belirledim ama çözüm yolunu bulamadım.
Şimdi tutarlar aşağıdaki şekilde. Sorun bu alanın metin olarak tanımlanmış olması. Veritabanında değişiklik yapamam.

Bu yüzden aşağıdaki verileri sayıya çevirip SQL kodunda toplamam ve ekstreye öyle yazdırmam gerekiyor.

DBgridde TUTAR bölümü aşağıdaki şekildedir. Virgüller sorun çıkartıyor.

Bunları sayıya çevirirsem sorun düzelecek. Ancak DBgrid üzerindeki tüm verileri aynı anda nasıl sayıya çevirebilirim ki ?

Dbgride gödermeden yapmam lazım ama nasıl ?

Kod: Tümünü seç

28,968.80
28,052.00
28,052.00
28,052.00
28,052.00
28,052.00
991.94
991.94
991.62
991.05
990.00
99.99
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

decimal separatör kullanırsan bir umit düzelir çünkü hesaplamalar için kendiside bunu float çevirmek zorundadır.

öte yandan dbgiride atmadan şu şekilde yapabilirsin...

db gride calculated field ekler tipini float yaparsın. oncalc event kodundada ilgili metni floata çevirirsin
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
F.Atagun
Üye
Mesajlar: 158
Kayıt: 01 Oca 2008 01:56

Mesaj gönderen F.Atagun »

@ikutluay Sonunda çözümü çok daha basit olarak buldum.

Kod: Tümünü seç

 sum(Format([CariHareket.Tutar],''Currency'')) as Borc  ,
SQL komutumda İlgili field'ı tanımladım. Böylece MSJETT.40 hatası kalktı ve Dbgriddede calculated field' a gerek kalmadı.

Esinlendiğim sitenin adresinin aşağıda verdim.

İlgin için Teşekkürler


Sevgi ve Saygılarımla



http://www.blueclaw-db.com/accessquerysql/

http://www.blueclaw-db.com/report_dynam ... _field.htm

http://ewbi.blogs.com/develops/ms_access/index.html
Cevapla