uzun sql sorgusu ile insert into ve update işlemleri...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

uzun sql sorgusu ile insert into ve update işlemleri...

Mesaj gönderen Biltes »

Arkdaşlar merhaba;

Sorunum şu bir formda query tablom var ve formda yaklaşık 30-35 alandan veritabanına aşağıdaki yöntem ile bilgi girişi yapılmak isteniyor.

Kod: Tümünü seç

var
  temp1 : AnsiString;
begin
          btable.Close;
          btable.SQL.Clear;
          temp1 := 'INSERT INTO bilgi(Seri,No,TCKimlikNo,VergiNo,Soyadi,Adi,Babaadi,Anaadi,Dogumyeri,Dogumtarihi,Medenihali,Uyruk,Dini,kangrubu,IL,Ilce,Mahalle,Koy,CiltNo,Sayfano,Ailesirano,Verildigi_Yer,Verilisnedeni,Kayitno,Verilistarihi,';
          temp1 := 'and Cinsiyeti,Durumu,Konutturu,Resim,Okuladi,Okulno,Pasaporttarihi,Pasaportno,Reisyakinligi,Siralama,Kizliksoyadi,Askcuzno,Meslegi,Okuryazar,Sahipkiraci,Daireno,Binano,Evadresi1,Evadresi2,Isadresi1,Isadresi2,';
          temp1 := 'and Evtel1,Evtel2,Istel1,Istel2,Gsm1,Gsm2,Ehliyetno,Ehliyetsinifi,Ehliyetalyer,Annekizliksoyadi,Egitimdurumu,Yabancidil,Saglikdurumu,notlar,ttarih,oiadresi1,oiadresi2)';
          temp1 := temp1 +'Values (:Seri,:No,:TCKimlikNo,:VergiNo,:Soyadi,:Adi,:Babaadi,:Anaadi,:Dogumyeri,:Dogumtarihi,:Medenihali,:Uyruk,:Dini,:kangrubu,:IL,:Ilce,:Mahalle,:Koy,:CiltNo,:SayfaNo,:Ailesirano,:VerildigiYer,:VerilisNedeni,:KayitNo,:VerilisTarihi,';
          temp1 := temp1 +'and :Cinsiyeti,:Durumu,:Konutturu,:Resim,:Okuladi,:Okulno,:Pasaporttarihi,:Pasaportno,:Reisyakinligi,:Siralama,:Kizliksoyadi,:Askcuzno,:Meslegi,:Okuryazar,:Sahipkiraci,:DaireNo,:Binano,:Evadresi1,:Evadresi2,:Isadresi1,:Isadresi2,';
          temp1 := temp1 +'and :Evtel1,:Evtel2,:Istel1,:Istel2,:Gsm1,:Gsm2,:Ehliyetno,:Ehliyetsinifi,:Ehliyetalyer,:Annekizliksoyadi,:Egitimdurumu,:Yabancidil,:Saglikdurumu,:notlar,:ttarih,:oiadresi1,:oiadresi2)';
          btable.SQL.Add(temp1);
          btable.ParamByName('Seri').AsString := dxEdit30.Text;
          btable.ParamByName('no').AsString := dxEdit31.Text;
          btable.ParamByName('TCKimlikNo').AsString := dxEdit32.Text;
          btable.ParamByName('VergiNo').AsString := dxEdit33.Text;
          btable.ParamByName('Soyadi').AsString := dxEdit34.Text;
          btable.ParamByName('Adi').AsString := dxEdit35.Text;
          btable.ParamByName('Babaadi').AsString := dxEdit36.Text;
          btable.ParamByName('Anaadi').AsString := dxEdit37.Text;
          .....
           btable.Execsql;
Fakat kaydet dediğimiz zaman resimdeki hatayı alıyorum.

Resim

Fakat kaydet dediğimiz zaman resimdeki hatayı alıyorum. Muhtemelen sql'de alanların birleştiği zaman uzun bir cümle yaptığı için oluyordur diye tahmin ediyorum ama bu şekilde kayıt etmenin ve kayıt edildikten sorna sonra bilgi değiştirmek için update yapmak için muhtemelen bir yol vardır da ben bulamadım. Bana bu konuda yardımcı olabilirseniz çok memnun olurum..

Allah cümlenizden razı olsun... Tşk Ederim...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

En güzeli bu tarz karışık SQL cümlelerini önce DB tarafında deneyip sonra Delphi'ye aktarmak.

Oluşan SQL cümlesini kontrol etmek için bir memo koy ve

Memo1.Text := btable.SQL.Text;

şeklinde oluşan sql cümlesini al ve nerde yanlış yaptığını tespit et. SQL cümlesi uzun diye sorun olmaması lazım.

Kolay gelsin.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Sql cümlelerinin Satır bazında uzun olması sorununa karşılaşmıştım.
bunun için ilgili satırları bölerek

Örnek

Kod: Tümünü seç

temp1 := 'and Cinsiyeti,Durumu,Konutturu,Resim,Okuladi,Okulno,Pasaporttarihi,Pasaportno,Reisyakinligi,Siralama,Kizliksoyadi,Askcuzno,Meslegi,'+
' Okuryazar,Sahipkiraci,Daireno,Binano,Evadresi1,Evadresi2,Isadresi1,Isadresi2,'; 
Şeklinde kullanmıştım..
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Cümlenin uzunluğu ile alakası yok, yazdığın cümlede sorun var, Evtel1 den önce and yazmışsın orada virgül olması lazım. And i sadece kısıtlarda kullanabilirsin (where, having v.b.)
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

temp1 değişkenine once ir değer atamışsınız sonra başka bir değer atamışsınız. Oysa zannedersem
temp1:=temp1+ ......
şeklinde yapmak aklınızdan geçiyordu..

Ayrica insert into komutu içinde alanar arasına 'and' koyulmaz zaten o nedenle hata veriyor...

Mustafa'nın dediği gibi neticede ortaya çıkan sql cümlesini ya showmessage ie ekrandan gosterip ya da bir memo icine atip gorurseniz olusan hatalı kodu görebilirsiniz...

Kolay gelsin...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Sevgili hocalarım hepiniz cevaplar için ayrı ayrı teşekkür ediyorum...

Şimdi mustafa hocamın dediğinden başlayayım, hocam dediğiniz kodu

Kod: Tümünü seç

          ....
          btable.SQL.Add(temp1);
          Memo1.Text := btable.SQL.Text;
          ....
şeklinde ekliyorum ama resimdeki hatayı ilk olarak aldığım için memo'da sql kodunu bu yüzden göremiyorum...

Naile hocamın dediği;
Cümlenin uzunluğu ile alakası yok, yazdığın cümlede sorun var, Evtel1 den önce and yazmışsın orada virgül olması lazım. And i sadece kısıtlarda kullanabilirsin (where, having v.b.)
şeklinde de denedim ama sonuç aynı...

Fahrettin hocam;

Kod: Tümünü seç

          temp1 := 'INSERT INTO bilgi(Seri,No,TCKimlikNo,VergiNo,Soyadi,Adi,Babaadi,Anaadi,Dogumyeri,Dogumtarihi,Medenihali,Uyruk,Dini,kangrubu,IL,Ilce,Mahalle,Koy,CiltNo,Sayfano,Ailesirano,Verildigi_Yer,Verilisnedeni,Kayitno,Verilistarihi,';
          temp1 := temp1+'Cinsiyeti,Durumu,Konutturu,Resim,Okuladi,Okulno,Pasaporttarihi,Pasaportno,Reisyakinligi,Siralama,Kizliksoyadi,Askcuzno,Meslegi,Okuryazar,Sahipkiraci,Daireno,Binano,Evadresi1,Evadresi2,Isadresi1,Isadresi2,';
          temp1 := temp1+'Evtel1,Evtel2,Istel1,Istel2,Gsm1,Gsm2,Ehliyetno,Ehliyetsinifi,Ehliyetalyer,Annekizliksoyadi,Egitimdurumu,Yabancidil,Saglikdurumu,notlar,ttarih,oiadresi1,oiadresi2)';
          temp1 := temp1 +'Values (:Seri,:No,:TCKimlikNo,:VergiNo,:Soyadi,:Adi,:Babaadi,:Anaadi,:Dogumyeri,:Dogumtarihi,:Medenihali,:Uyruk,:Dini,:kangrubu,:IL,:Ilce,:Mahalle,:Koy,:CiltNo,:SayfaNo,:Ailesirano,:VerildigiYer,:VerilisNedeni,:KayitNo,:VerilisTarihi,';
          temp1 := temp1 +':Cinsiyeti,:Durumu,:Konutturu,:Resim,:Okuladi,:Okulno,:Pasaporttarihi,:Pasaportno,:Reisyakinligi,:Siralama,:Kizliksoyadi,:Askcuzno,:Meslegi,:Okuryazar,:Sahipkiraci,:DaireNo,:Binano,:Evadresi1,:Evadresi2,:Isadresi1,:Isadresi2,';
          temp1 := temp1 +':Evtel1,:Evtel2,:Istel1,:Istel2,:Gsm1,:Gsm2,:Ehliyetno,:Ehliyetsinifi,:Ehliyetalyer,:Annekizliksoyadi,:Egitimdurumu,:Yabancidil,:Saglikdurumu,:notlar,:ttarih,:oiadresi1,:oiadresi2)';
          btable.SQL.Add(temp1);
          Memo1.Text := btable.SQl.Text;
şeklinde denedim ama sonuç aynen devam ediyor. Dediğiniz gibi sql kodunu memo'ya aktarabilsem sorunu bulabilcem belki ama maalesef onu da başaramadım. :(

İlginiz için çok tşk ederim...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Arkdaşlar yardımlarınız için çok teşekkür ederim. Aşağıdaki kodlar ile problemimi çözdüm.

Kod: Tümünü seç

          temp1 := 'INSERT INTO bilgi(Seri,Serino,TCKimlikNo,VergiNo,Soyadi,Adi,Babaadi,Anaadi,Dogumyeri,Dogumtarihi,Medenihali,Uyruk,Dini,kangrubu,IL,Ilce,Mahalle,Koy,CiltNo,Sayfano,Ailesirano,Verildigiyer,Verilisnedeni,Kayitno,Verilistarihi,';
          temp1 := temp1+'Cinsiyeti,Durumu,Konutturu,Resim,Okuladi,Okulno,Pasaporttarihi,Pasaportno,Reisyakinligi,Siralama,Kizliksoyadi,Askcuzno,Meslegi,Okuryazar,Sahipkiraci,Daireno,Binano,Evadresi1,Evadresi2,Isadresi1,Isadresi2,';
          temp1 := temp1+'Evtel1,Evtel2,Istel1,Istel2,Gsm1,Gsm2,Ehliyetno,Ehliyetsinifi,Ehliyetalyer,Annekizliksoyadi,Egitimdurumu,Yabancidil,Saglikdurumu,notlar,ttarih,oiadresi1,oiadresi2)';
          temp1 := temp1 +'Values (:Seri,:Serino,:TCKimlikNo,:VergiNo,:Soyadi,:Adi,:Babaadi,:Anaadi,:Dogumyeri,:Dogumtarihi,:Medenihali,:Uyruk,:Dini,:kangrubu,:IL,:Ilce,:Mahalle,:Koy,:CiltNo,:SayfaNo,:Ailesirano,:Verildigiyer,:VerilisNedeni,:KayitNo,:VerilisTarihi,';
          temp1 := temp1 +':Cinsiyeti,:Durumu,:Konutturu,:Resim,:Okuladi,:Okulno,:Pasaporttarihi,:Pasaportno,:Reisyakinligi,:Siralama,:Kizliksoyadi,:Askcuzno,:Meslegi,:Okuryazar,:Sahipkiraci,:DaireNo,:Binano,:Evadresi1,:Evadresi2,:Isadresi1,:Isadresi2,';
          temp1 := temp1 +':Evtel1,:Evtel2,:Istel1,:Istel2,:Gsm1,:Gsm2,:Ehliyetno,:Ehliyetsinifi,:Ehliyetalyer,:Annekizliksoyadi,:Egitimdurumu,:Yabancidil,:Saglikdurumu,:notlar,:ttarih,:oiadresi1,:oiadresi2)';
Fahrettin hocamın dediği gibi temp1 := temp1+... olarak yaptım .
Ayrıca "no" olarak tanımladığım alandan dolayı kaynaklanıyordu. SQL'in kendi içerisinde no diye bir alanının olmasından ötürü bendeki alan ile ilgili de hata verdi ve bunu serino olarak düzeltince sorun kalmadı...

Yardımlar için çok saolun... ;)
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
MakPRO
Üye
Mesajlar: 251
Kayıt: 31 Eki 2003 05:21
Konum: Antalya
İletişim:

Re: uzun sql sorgusu ile insert into ve update işlemleri...

Mesaj gönderen MakPRO »

Biltes yazdı:

Kod: Tümünü seç

          temp1 := 'INSERT INTO bilgi(Seri,No,TCKimlikNo,VergiNo,Soyadi,Adi,Babaadi,Anaadi,Dogumyeri,Dogumtarihi,Medenihali,Uyruk,Dini,kangrubu,IL,Ilce,Mahalle,Koy,CiltNo,Sayfano,Ailesirano,Verildigi_Yer,Verilisnedeni,Kayitno,Verilistarihi,';

// burada temp1 e yeni bir bilgi atadağıniçin bir önceki atadığın bilgi kaybolur buraya temp1 := temp1 + SQL cümleciği olarak girmen gerekli . eğer sql komutunda hata yoksa hata sebebin budur       

    temp1 := 'and Cinsiyeti,Durumu,Konutturu,Resim,Okuladi,Okulno,Pasaporttarihi,Pasaportno,Reisyakinligi,Siralama,Kizliksoyadi,Askcuzno,Meslegi,Okuryazar,Sahipkiraci,Daireno,Binano,Evadresi1,Evadresi2,Isadresi1,Isadresi2,';

// burada temp1 e yeni bir bilgi atadağıniçin bir önceki atadığın bilgi kaybolur buraya temp1 := temp1 + SQL cümleciği olarak girmen gerekli . eğer sql komutunda hata yoksa hata sebebin budur 

          temp1 := 'and Evtel1,Evtel2,Istel1,Istel2,Gsm1,Gsm2,Ehliyetno,Ehliyetsinifi,Ehliyetalyer,Annekizliksoyadi,Egitimdurumu,Yabancidil,Saglikdurumu,notlar,ttarih,oiadresi1,oiadresi2)';

          temp1 := temp1 +'Values (:Seri,:No,:TCKimlikNo,:VergiNo,:Soyadi,:Adi,:Babaadi,:Anaadi,:Dogumyeri,:Dogumtarihi,:Medenihali,:Uyruk,:Dini,:kangrubu,:IL,:Ilce,:Mahalle,:Koy,:CiltNo,:SayfaNo,:Ailesirano,:VerildigiYer,:VerilisNedeni,:KayitNo,:VerilisTarihi,';
          temp1 := temp1 +'and :Cinsiyeti,:Durumu,:Konutturu,:Resim,:Okuladi,:Okulno,:Pasaporttarihi,:Pasaportno,:Reisyakinligi,:Siralama,:Kizliksoyadi,:Askcuzno,:Meslegi,:Okuryazar,:Sahipkiraci,:DaireNo,:Binano,:Evadresi1,:Evadresi2,:Isadresi1,:Isadresi2,';
          temp1 := temp1 +'and :Evtel1,:Evtel2,:Istel1,:Istel2,:Gsm1,:Gsm2,:Ehliyetno,:Ehliyetsinifi,:Ehliyetalyer,:Annekizliksoyadi,:Egitimdurumu,:Yabancidil,:Saglikdurumu,:notlar,:ttarih,:oiadresi1,:oiadresi2)';
          btable.SQL.Add(temp1);
          btable.ParamByName('Seri').AsString := dxEdit30.Text;
          btable.ParamByName('no').AsString := dxEdit31.Text;
          btable.ParamByName('TCKimlikNo').AsString := dxEdit32.Text;
          btable.ParamByName('VergiNo').AsString := dxEdit33.Text;
          btable.ParamByName('Soyadi').AsString := dxEdit34.Text;
          btable.ParamByName('Adi').AsString := dxEdit35.Text;
          btable.ParamByName('Babaadi').AsString := dxEdit36.Text;
          btable.ParamByName('Anaadi').AsString := dxEdit37.Text;
          .....
           btable.Execsql;
Fakat kaydet dediğimiz zaman resimdeki hatayı alıyorum.

Resim

Fakat kaydet dediğimiz zaman resimdeki hatayı alıyorum. Muhtemelen sql'de alanların birleştiği zaman uzun bir cümle yaptığı için oluyordur diye tahmin ediyorum ama bu şekilde kayıt etmenin ve kayıt edildikten sorna sonra bilgi değiştirmek için update yapmak için muhtemelen bir yol vardır da ben bulamadım. Bana bu konuda yardımcı olabilirseniz çok memnun olurum..

Allah cümlenizden razı olsun... Tşk Ederim...
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Hocam bu soru için yeni bir başlık açmam gerekiyor mu tam olarak bilmiyorum ama bu konunun devamı olduğu için buraya yazdım...

Sorum şu radiogroup nesnesinde seçili olan alanın ismini veritabanına nasıl kaydederim..
Radiogroup nesnesinin bir items'i ERKEK bir items'i KADIN olsun bunlardan hangisi seçili ise veri tabanına onu nasıl yazarım.
ERKEK
yada
KADIN
gibi ...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

RadioGroup.ItemIndex ini kullanabilirsin. İlk seçenek seçili ise 0, ikinci seçenek seçili ise 1 vb. -1 ise seçili yok anlamında.. VT ye de integer alan olarak bu şekilde saklayabilirsin :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla