' işareti sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- techmaster
- Üye
- Mesajlar: 52
- Kayıt: 08 Ağu 2003 03:24
- Konum: Adana
- techmaster
- Üye
- Mesajlar: 52
- Kayıt: 08 Ağu 2003 03:24
- Konum: Adana
- techmaster
- Üye
- Mesajlar: 52
- Kayıt: 08 Ağu 2003 03:24
- Konum: Adana
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...
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...
a.s
* Yukarıda ilk başta görülen '+' işaretinin birisi eksik...
**
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..
Yukarıdaki gibi parametre olayında Edit1' e Ugur''' gibi bir veri girilse bile program tırnak hatası vermeyecektir..
iyi günler...
Kod: Tümünü seç
insert into....... values ('''+edit1.text''',......);
**
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;
iyi günler...
- techmaster
- Üye
- Mesajlar: 52
- Kayıt: 08 Ağu 2003 03:24
- Konum: Adana
Kod: Tümünü seç
insert into....... values ('''+edit1.text''',......);
parametre kullandım ama yine aynı hatayı verdi...bir türlü halledemedim şu sorunu...
Ne hatası veriyor onu da yazman gerekir
Şöyle bir format kullanman lazım...

Şö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;
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
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.
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)
------------------------
"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)
- techmaster
- Üye
- Mesajlar: 52
- Kayıt: 08 Ağu 2003 03:24
- Konum: Adana
hocam hatayı siz söylemişltiniz bi iki msj önceUğ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;
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...