sorun
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
SQL sorgularıyla ilgili benimde başım ağrımaya başladı ve hazır bu konu başlığını bulmuşken bende sormak istedim.. Forumu okudum ve Showmessage(Query.Sql.Text) ile sorunumu buldum.. Bu bilgi için Teşekkür ederim fakat sql cümlesinin bir çalışıp,bir çalışmadığı gibi ilginç bir durumla karşı karşıyayım.. Sorunun benim kodlarımdan kaynaklandığı %90.. çünkü Query i bir for döngüsüne sokup arka arkaya ExecSQL çalıştırıyorum belki bu sorun olabilir (Paradox söz konusu ise) yinede detaylı olarak sorunumu açıklamaya çalışayım...
Sorunum Şu:
bir listview içindeki verileri tek tek database dosyasına yazmak istiyorum ve ..
bu kodu tetiklediğimde listview içinde 3 ve daha fazlası item varsa sorun çıkarıyor.. yoksa bir hata vermiyor...
Showmessage ile SQL.Text Ekran görüntüleri :
ilk kayıt girişi...:

Burda bir sorun yok for döngüsü 2 kayıt giriyor...
3. kayda geldiği zaman ise Showmessage(Query1.SQL.Text) şunu gösteriyor.....:

Gördüğünüz gibi sql cümlesinin sonundaki tırnak işaretleri ve parantez kaybolmuş...
dolayısı ile verdiği hata.... :

Bana çok ilginç geldi... Bunun neden kaynaklandığı hakkında bir bilgisi olan varsa ve bizimle paylaşırsa çok memnun olurum... şimdiden ilgilenen arkadaşlara teşekkür ederim..
Sorunum Şu:
bir listview içindeki verileri tek tek database dosyasına yazmak istiyorum ve ..
Kod: Tümünü seç
for i:=0 to dosyalistesi.Items.Count-1 do begin
Query1.SQL.Clear;
Query1.SQL.Add('insert into files.db (recordid,tur,dosyayolu) VALUES ');
Query1.SQL.Add('('+#39+kayitnotext.text+#39+','+#39+dosyalistesi.Items.Item[i].Caption+#39+','+#39+dosyalistesi.Items.Item[i].SubItems[0]+#39+')');
showmessage(Query1.SQL.Text);//Forumdaki Tavsiye üzerine kontrol ediyorum..
Query1.ExecSQL;
end;{for}
Showmessage ile SQL.Text Ekran görüntüleri :
ilk kayıt girişi...:

Burda bir sorun yok for döngüsü 2 kayıt giriyor...
3. kayda geldiği zaman ise Showmessage(Query1.SQL.Text) şunu gösteriyor.....:

Gördüğünüz gibi sql cümlesinin sonundaki tırnak işaretleri ve parantez kaybolmuş...



Bana çok ilginç geldi... Bunun neden kaynaklandığı hakkında bir bilgisi olan varsa ve bizimle paylaşırsa çok memnun olurum... şimdiden ilgilenen arkadaşlara teşekkür ederim..
Bir de Parametre ile dener misin ? Söylediğin şekilde garip bir durum...
recordid, tur, dosyayolu alanları String ifade değil mi?
// Edit / Ekleme //
Şimdi farkettim... Örnek mesaj capture resimler vermişsin ya;
burada Notasyon / JPG olanda tırnak eksik iken verilen hatada MP3 olan görünüyor...
recordid, tur, dosyayolu alanları String ifade değil mi?
Kod: Tümünü seç
for i:=0 to dosyalistesi.Items.Count-1 do begin
Query1.SQL.Clear;
Query1.SQL.Add('insert into files.db (recordid, tur, dosyayolu) VALUES ');
Query1.SQL.Add('( :Param1, :Param2, :Param3 )');
Query1.ParamByName('Param1').Value := kayitnotext.text;
Query1.ParamByName('Param2').Value := dosyalistesi.Items.Item[i].Caption;
Query1.ParamByName('Param3').Value := dosyalistesi.Items.Item[i].SubItems[0];
showmessage(Query1.SQL.Text);//Forumdaki Tavsiye üzerine kontrol ediyorum..
Query1.ExecSQL;
end;{for}
Şimdi farkettim... Örnek mesaj capture resimler vermişsin ya;
burada Notasyon / JPG olanda tırnak eksik iken verilen hatada MP3 olan görünüyor...
Soruma sen değil ama hata cevap verdi.. Hepsi String değilmiş.... 
- Alan tipleri nelerdir..
.Value olan yerleri .AsString veya .AsInteger olarak alan tipi neyse ona göre değiştir... Tabii eşitliğin sağını da buna göre modifiye ederek.. StrToInt(kayitnotext.text); gibi...
// Edit //
sonundaki Caption eksik kalmış ondandır...

- Alan tipleri nelerdir..
.Value olan yerleri .AsString veya .AsInteger olarak alan tipi neyse ona göre değiştir... Tabii eşitliğin sağını da buna göre modifiye ederek.. StrToInt(kayitnotext.text); gibi...
// Edit //
Kod: Tümünü seç
Query1.ParamByName('Param3').Value := dosyalistesi.Items.Item[i].SubItems[0].Caption;
- Veritabanındaki tüm alanların String olduğunu Database Desktop'dan tekrar kontol edip teyid eder misin ? ..
- Aktardığın değerlerin String olduğu aşikar... Mesele veritabanındaki veri alanlarının tipinin de String (Alphanumeric) olması.
- Anlamanın en kolay yolu da DataBase Desktop ile veritabanını açıp Table menüsündeki Info Structure ile alan isimlerinin yanındaki Type sütununa bakman. Hepsinde da A yazmalı ve de yanlarında boyut bilgileri olmalı...
- Aktardığın değerlerin String olduğu aşikar... Mesele veritabanındaki veri alanlarının tipinin de String (Alphanumeric) olması.
- Anlamanın en kolay yolu da DataBase Desktop ile veritabanını açıp Table menüsündeki Info Structure ile alan isimlerinin yanındaki Type sütununa bakman. Hepsinde da A yazmalı ve de yanlarında boyut bilgileri olmalı...
Kusura bakmayın biraz geç oldu ama sorunu çözdüm ve buraya nasıl çözdüğümü yazayım... Sql cümlesini Trim() komutu ile sağındaki ve solundaki boşlukları alarak yazdırdım ve oldu..
sebebini bilmiyorum ama döngü tekrar ettiğinde SQL.Add komutu bi şekilde sorgunun sonunu boşluklarla dolduruyor.. Şu anda sağlıklı bi şekilde çalışıyor (gerçi uzun sü
re denemeden birşey diyemem) . Sorunumla ilgilenen tüm arkadaşlara yine candan teşekkür ederim.

re denemeden birşey diyemem) . Sorunumla ilgilenen tüm arkadaşlara yine candan teşekkür ederim.