' işareti sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

hayır sorun daha çözülmedi...ben yukarıda yapmak istediğim şeyi anlattım
mesela Ahmet'in kelimesini edit1den alıp vt'ye kaydedecem...

insert into....... values ('''+edit1.text''',......);

işte burda EOF in string detected hatası alıyorum...quotedstr() vt'ye yazarken kullanılamıyor heralde???
master of technology

http://www.cuemot.org
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

editten değişkene attım ordan sql.add yaptım yine hata verdi bu....bunun bi çözümü yokmudur??
master of technology

http://www.cuemot.org
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

s.a.
sorunu şimdilik şu yöntemle çözdüm...şimdi madem editten girdiğim ' işareti içeren bi kelimeyle sql hata veriyor, bende oraya iki tane ' koyarım böylece sql farketmez çaktırmadan kaydederim...
ama tabii bu geçici böyle kullanılmaz...başına bu sorundan gelen yokmu hiç..bi fonk. falan yokmudur bunu önleyici...

iyi çalışmalar...
master of technology

http://www.cuemot.org
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

a.s

Kod: Tümünü seç

insert into....... values ('''+edit1.text''',......); 
* Yukarıda ilk başta görülen '+' işaretinin birisi eksik...

**

Kod: Tümünü seç

EOF in string detected

Bu hatayı vermesinin sebebi benim bildiğim; Tırnak eksikliği ...

*** Bu olayın ise kesin çözümü parametre kullanman ve kendini buna alıştırman..
Şöyle yapabilirsin..

Kod: Tümünü seç

insert into TABLE
          ( AD,SOY)
values
        (:AD,:SOY) 

Kod: Tümünü seç

IBQuery1.ParamByname('AD').Asstring:=Edit1.Text;
IBQuery1.ParamByname('SOY').Asstring:=Edit2.Text;
Yukarıdaki gibi parametre olayında Edit1' e Ugur''' gibi bir veri girilse bile program tırnak hatası vermeyecektir..

iyi günler...
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

Kod: Tümünü seç

insert into....... values ('''+edit1.text''',......);
özür dilerim normalde yazdığım kodda + var ama buraya eksik yazmışım...

parametre kullandım ama yine aynı hatayı verdi...bir türlü halledemedim şu sorunu...
master of technology

http://www.cuemot.org
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

Ne hatası veriyor onu da yazman gerekir :?:

Şöyle bir format kullanman lazım...

Kod: Tümünü seç

with IBQuery1 do
begin
  SQL.Clear;
  SQL.Add('insert into TABLE  ( AD,SOY)  values  (:AD,:SOY) ');
  ParamByname('AD').Asstring:=Edit1.Text;
  ParamByname('SOY').Asstring:=Edit2.Text;
  Close;
  Prepare;
  ExecSQL;
end;
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Burada biraz kendinizi Delphi ve DB tarafında soyutlayın.. Şöyle düşünün, ben SQL i oluşturup db engine gönderdiğimde orada nasıl bir ifade oluyor.. Kod ve aciklama adli iki alanı olan bir tabloyu örnekleyelim..

Kod: 1234
Aciklama: Ankara'lı Turgut

Bu iki değeri ekrandan aldınız ve

sql:= 'INSERT INTO turkuculer VALUES(''' + kod.text + ''',''' + aciklama.text + ''')' ;

şeklinde yazdınız... Bakalım db tarafında nasıl görünüyor;

INSERT INTO turkuculer VALUES('1234','Ankara'lı Turgut');

Gördüğünüz gibi ikinci alanın değeri db tarafında Ankara dan sonra bitmiş oluyor ve syntax hatası alıyoruz. DB den db ye değişen bir escape syntaxı olduğu için, db özelinde bunu düzenlemek gerekiyor;

MySQL:

INSERT INTO turkuculer VALUES('1234','Ankara\'lı Turgut');

Oracle:

INSERT INTO turkuculer VALUES('1234','Ankara''lı Turgut');

gibi... Doğrudan SQL cümlesi oluşturup bunu kullanacaksanız, mutlaka string alanları bir filtreden geçirmelisiniz.

Aynı örneğin aciklamadan arama yapan versiyonuna bakalım;


sql:= 'SELECT * FROM turkuculer WHERE aciklama = ''' + aciklama.text + '''' ;

db tarafında;

SELECT * FROM turkuculer WHERE aciklama = 'Ankara'lı Turgut'

aynı sorun burada da geçerli..

Peki quotestr ne iş yapıyor.. Php de de addsslashes gibi karşılığı bulunan bu fonksiyor, tırnak ve çift tırnaklara \ karakterini ekliyor. Fakat \ bir escape karakter başlangıcı saymayan db lerde ne olacak ? Örneğin Oracle ?? Bu nedenle en başta dediğim gibi db ye özel bir tablo yapmalısınız.

Bununla birlikte alanlarına atama ve sorgu için kriter alanları sizin tarafınızdan doldurulmayan data bileşenleri kullanırsanız, ilgili bileşenler düşük seviyede sürücülere bu işi yaptırıyorlar. Bu sorunlardan kaçınmak istiyorsanız bu yöntemi de kullanabilirsiniz..

Kolay gelsin..

NOT: bu sitenin kullandığı motor da benim bu yazıda kullandığım quote ları aynı şekilde escape karakterleriyle donatarak db ye yazıyor.. DB da raw data olarak bu escape karakterler yok tabi ki. Sadece DB engine derdini düzgün anlatabilmek için yapıyor bunu. DB engine de, tamam quote karakteri koyacaksın anladım diyor ve içeri escape karakteri olmaksızın yazıyor.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

Uğur1982 yazdı:Ne hatası veriyor onu da yazman gerekir :?:

Şöyle bir format kullanman lazım...

Kod: Tümünü seç

with IBQuery1 do
begin
  SQL.Clear;
  SQL.Add('insert into TABLE  ( AD,SOY)  values  (:AD,:SOY) ');
  ParamByname('AD').Asstring:=Edit1.Text;
  ParamByname('SOY').Asstring:=Edit2.Text;
  Close;
  Prepare;
  ExecSQL;
end;
hocam hatayı siz söylemişltiniz bi iki msj önce

EOF in string detected


@doganzorlu
yani hazır fonksiyon yok biz bi fonksiyon hazırlayıp kelimeyi veritabanına kaydetmeden önce filtreliyecez o zaman...

yardımlarınız için çok teşekkürler...iyi çalışmalar...
master of technology

http://www.cuemot.org
Cevapla