sorun

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

hocam bence ne yapmak istediğini lafla anlat biz sana yöntem önerelim. En güzeli böyle.

Kolay gelsin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@eonaran

- Bu kadar yardımcı olmaya çalışan delphi dostunu zor bulursunuz, bu fırsatı şimdi bence en iyi şekilde değerlendirin. :)
Resim
Resim ....Resim
eonaran
Üye
Mesajlar: 8
Kayıt: 14 Oca 2004 09:54

Mesaj gönderen eonaran »

sorunu Fahrettin beyin anlattığı şekilde hallettim..
bu dostları zor bulacağımı anladım:)
hepinize şukranlarımı sunarım.
hayatınıza ait 3 dakikayı bana ayırdığınız için de teşekkür ederim
mulus
Üye
Mesajlar: 67
Kayıt: 30 May 2005 10:42
Konum: Bursa
İletişim:

Mesaj gönderen mulus »

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 ..

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}
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...:
Resim
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.....:
Resim
Gördüğünüz gibi sql cümlesinin sonundaki tırnak işaretleri ve parantez kaybolmuş... :shock: dolayısı ile verdiği hata.... :
Resim
:?

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..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Bir de Parametre ile dener misin ? Söylediğin şekilde garip bir durum...
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}
// 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...
Resim
Resim ....Resim
mulus
Üye
Mesajlar: 67
Kayıt: 30 May 2005 10:42
Konum: Bursa
İletişim:

Mesaj gönderen mulus »

Type mismatch in expression hatası verdi... tırnak ile ilgili bir hatamıdır acaba
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

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 //

Kod: Tümünü seç

            Query1.ParamByName('Param3').Value := dosyalistesi.Items.Item[i].SubItems[0].Caption;
sonundaki Caption eksik kalmış ondandır...
Resim
Resim ....Resim
mulus
Üye
Mesajlar: 67
Kayıt: 30 May 2005 10:42
Konum: Bursa
İletişim:

Mesaj gönderen mulus »

subitems ile ilgili caption özelliği yok ki zaten gerek yok direk string deger döndürüyor yani orası ile ilgili bir sorun yok.. Asstring olarak değiştirdim ama yine aynı hatayı veriyor... Hepsi string degerler..
snofru
Üye
Mesajlar: 204
Kayıt: 19 Ağu 2004 02:57
Konum: /local/usr/src
İletişim:

Mesaj gönderen snofru »

@mulus

- @mrmcop'un dediği şekilde yaptın ve yine hata mı aldın? RecordID alanının String olduğundan şüpheliyim, onu belirtmek istedim sadece...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- 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ı...
Resim
Resim ....Resim
mulus
Üye
Mesajlar: 67
Kayıt: 30 May 2005 10:42
Konum: Bursa
İletişim:

Mesaj gönderen mulus »

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.. :wink: 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.
Cevapla