ADOQuery ile SQL sorgulama problemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cenkkoray
Üye
Mesajlar: 10
Kayıt: 02 Oca 2008 01:14

ADOQuery ile SQL sorgulama problemi

Mesaj gönderen cenkkoray »

arkadaşlar daha önce paradox veritabanı kullandığım programda veriler sürekli kaybolduğu ve veritabanı bozulduğu için AdoConnection kullanarak verilerimi access dosyasına kaydettirdim.. Fakat AdoQuery kullanarak yaptığım sorgular çalışmıyor özetle şöyle anlatayım ;

Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.add('select * from personel ');
Adoquery1.Open;


dediğim zaman sorun yok kod çalışıyor fakat WHERE komutunu kullandığım zaman bir ton hata veriyor örneğin ;

Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.add('select * from personel where id=200');
Adoquery1.Open;


Dediğim zaman [microsoft][ODBC microsoft access driver] Data Type mismatch in criteria expression hatası alıyorum.

Haa Tırnak içine alayım diyorum id="200" yazıyorum bu seferde [microsoft][ODBC microsoft access driver] too few parameters. Expected 1 hatası alıyorum.. String alan için sorgulama yaptırıyorum aynı hataları gene alıyorum.. normal query kullandığım zaman bu hatalar yoktu AdoConnection kullandığım için bu hatalar cıkmaya basladı.. Where komutundan sonra neden bu hataları verir ??

Eski veritabanında ;

Query1.sql.add('select * from personel WHERE (DTarih between ' +#39+ FormatDateTime('dd/mm/yyyy',DateTimePicker3.Date)+#39+' and '+#39+FormatDateTime('dd/mm/yyyy',DateTimePicker4.Date)+#39+') '); tarzında bir sorgulamam var ve çalışıyor. Ama adoquery de malum calısmıyor kafayı yemek üzereyim lütfen yardımcı olun
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

merhaba

bir beladan kurtulup diğerine taşıdınız yani.

size tavsiyem program lokal çalışıyor ise Firebird embedded server kullanmanız.


sorunuza gelince id alanı vs alanların tiplerine göre durum değişeceğinden alan tiplerinide vermelisiniz.

yalnız ilk hata zaten veri tipi uyuşmalığı gibi kokuyor.

ayrıca standart sqlde string ifadeler tek tırnak içine alınır benim bildiğim.

Kod: Tümünü seç

select * from abc where adi='sjfhsdkjfhs'
select * from abc where id='200'  // id tipi string varchar felansa
select * from abc where id=200 //id integer ise

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
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Bu tarz hatalar alıyorsanız, SQL'i önce veritabanının kendi yönetim aracında yazıp, sonra Delphi'ye taşıyın.

Access'te 200 id'li personeli seçen bir sql yazıp, çalıştığından emin olduktan ve sonuçları gördükten sonra kodu Delphi'ye aynen alın.

Kolay gelsin.
princeoftides
Üye
Mesajlar: 47
Kayıt: 17 Ara 2004 12:14

Mesaj gönderen princeoftides »

Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.add('select * from personel where id='+#39+'200'+#39);
Adoquery1.Open;

şeklinde queryinizi düzenleyin çalışacaktır.
cenkkoray
Üye
Mesajlar: 10
Kayıt: 02 Oca 2008 01:14

Mesaj gönderen cenkkoray »

Ya Arkadaşlar teşekkür ederim sağolun ama olmadı yine çıldırmamak elde değil hepinizin dediği gibi yaptım yine olmadı. Hatta arkadaşın dediği gibi önce Access i açıp kendi içinde SQL sorgusu yaptım çalıştığını gördükten sonra SQL sorgusunu tuttum kopyaladım

Adoquery1.SQL.add('SELECT Personel.Id FROM Personel WHERE (((Personel.Id)="222"));'); bu kod To few parametrers ile başlayan hatayı veriyor yani çıldırıcam Acaba kullandığım nesneler mi yanlış..
Adoconnection ve Adoquery kullandım adoconnectiondan ODBC de yarattığım veritabanı path ini seçtim dediğim gibi tek select kullandığım zaman sorgu çalışıyor ama araya where girdiği zaman çalışmıyor paradoxtan kurtulduk başıma bela oldu bir ton veri kaybettim veritabanım bozuldu şimdi başıma böyle bir bela çıktı.. ne kullanayım firebird mi kullanayaım nasıl yapayım kafayı yemek üzereyim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

kim ne düşünür bilemem ama bence access gercek bir vt değil.

gercekten fb öneriyorum ben size
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
cenkkoray
Üye
Mesajlar: 10
Kayıt: 02 Oca 2008 01:14

Mesaj gönderen cenkkoray »

haklısın tabi firebird her zaman için access den daha iyidir tamam da firebird daha önce hiç kullanmadım. delphi ile nasıl bağlantı yapılır bilmiyorum ayrıca quickreport raporlama aracını kullanıyorum. raporlamada problem yaratırmı emin değilim ... aslında bu ado olayını çözssem süper olurdu çünkü çok fazla da vaktim yok açıkcası..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

AdoConnection kullanmayla birşey değişmez. Kodunu ve çıkan hatayı Ctrl+C ile kopyalayarak buraya gönderebilir misin? Ekranda hata varken Ctrl+C tuşlarına basarsan, hatayı aynen panoya kopyalar.

Kolay gelsin.
cenkkoray
Üye
Mesajlar: 10
Kayıt: 02 Oca 2008 01:14

Mesaj gönderen cenkkoray »

arkadaşlar sorunu çözdüm kod şu şekilde olacak

Adoquery1.Close;
Adoquery1.SQL.Clear;
adoquery1.SQL.Add('SELECT * FROM Personel WHERE ID =:Degiskenismi');
adoquery1.Parameters.parambyname('degiskenismi').Value:='200';
Adoquery1.Open;


adoquery nin propertiesinden paramaters özelligine gelip yeni bir parameters ekleyip ismini "degiskenismi" verdikten sonra sorun çözüldü

teşekkür edeirm yardımı dokunan herkese
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

sorunu çözmene sevindim ancak bende adoconnection ile ilk sorduğun tarz onlarca sorgu sorunsuz calışıyor.

diğer yollada olmalıydı yani.
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
Cevapla