insert into ile kayıt problemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

insert into ile kayıt problemi

Mesaj gönderen idalan »

öncelikle selamun aleyküm

Biz arkadaşlar ile şu işin ortasını bulamadık :?:
veritabanı(MSaccess)

Kod: Tümünü seç

with AdoQuery1 do begin
Close ;
SQL.Text := 'INSERT INTO TABLO1 (sicil, ad, soy) VALUES (:param1,:param2,:param3)';
Parameters.ParamByName('param1').value := Edit1.text;
Parameters.ParamByName('param2').value :=Edit2.text;
Parameters.ParamByName('param3').value :=Edit3.text;
ExecSQL;
Bu kod Çalışıyor ve tabloya kayıt yapıyor.sorun yok

Fakat Şöyle Yapınca Boş bir kayıt atıyor

Kod: Tümünü seç

with AdoQuery1 do begin
Close ;
SQL.Text := 'INSERT INTO TABLO1 (sicil, ad, soy) VALUES (:edit1.text,:edit2.text,:edit3.text)';
ExecSQL;
Bu kod ise direk 1 ve 2 değerini atıyor Fakat values e edit1,edit2 deki bilgileri ekletmeyi başaramadım(Ne yaptıysam Hata Veriyor)

Kod: Tümünü seç

with AdoQuery1 do begin
Close ; 
SQL.Text := 'INSERT INTO TABLO1 (FIELD1, FIELD2) VALUES (1,2)' ; 
ExecSQL; 
Yani arkadaş bundan memnun kalmadı ve param1 falan olmadan bir üstteki gibi kısa bir kodlama ile çözmek istiyor ben yapamadım yardımcı olursanız sevinirim.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

2. kodun eklemeyi yapmamasi gayet normal cünkü aslında ilk kod ile tamamen ayni. Yani yine parametre kullanmıs fakat bunlara deger atamamıssınız. Cunku : karakteri kendinden sonraki gelen degiskeni parametre yapar. Dogru kod su sekilde olmali...

Kod: Tümünü seç

with AdoQuery1 do begin 
Close ; 
SQL.Text := 'INSERT INTO TABLO1 (sicil, ad, soy) VALUES (edit1.text,#39+edit2.text+#39,#39+edit3.text+#39)'; 
ExecSQL;
2. ve 3. alanlar karakter olduklari icin bunlari tırnak icine alabilmek amaci ile #39 karakteri koydum.

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ı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

with AdoQuery1 do begin
Close ;
SQL.Text := 'INSERT INTO TABLO1 (sicil, ad, soy) VALUES (:edit1.text,:edit2.text,:edit3.text)';
ExecSQL;
burada edit1.text, edit2.text ve edit3.text sadece string şeklindedir. Yoksa içerdiği bilgiyi atmak istiyorsan aşağıdaki şekilde yazmalısın.

Kod: Tümünü seç

SQL.Text := 
'INSERT INTO TABLO1 (sicil, ad, soy) VALUES (:' + Edit1.Text + ', :' + Edit2.Text + ',:' + Edit3.Text + ')'; 

Kullanıcı avatarı
akgun83
Üye
Mesajlar: 106
Kayıt: 26 Eyl 2003 11:34

Mesaj gönderen akgun83 »

Kod: Tümünü seç

  SQL.Text:='INSERT INTO TABLO1 (sicil, ad, soy) VALUES ('
    + QuotedStr(Edit1.Text) + ','
    + QuotedStr(Edit2.Text) + ','
    + QuotedStr(Edit3.Text) + ')';
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

herkese çok teşekkür ederim ;
ama sorunum hala devam ediyor ;

recep abinin veriği kod veritabanına sadece boş kayıt açıyor

Kod: Tümünü seç

SQL.Text := 
'INSERT INTO TABLO1 (sicil, ad, soy) VALUES (:' + Edit1.Text + ', :' + Edit2.Text + ',:' + Edit3.Text + ')'; 


fahrettin abinin ki çalışıyor ama problem şu
boş olarak verdiğim soy alanını

Kod: Tümünü seç

select * from tablo1 where soy is null
sorguluyorum ama hiçbirşey vermiyor ama kayıt işini veritabanının içinden yaptığımda sicil ve ad alanını giriyorum ve soy alanını boş
bıraktığımda Sql sorgum çalışıyor ve kaydı veriyor..
tahminim şu #35 yüzünden

akgun83 arkadaşımın verdiği kodda aynısı oluyor soy alanı boş verip
select * from tablo1 where soy is null diye sorguladığımda hiç birşey vermiyor...Sanırım Kaydet Dediğimde boş alanları bir değer olarak veritabanına yazıyor ve aramada null olarak gözükmüyor. bunu nasıl sağlayabilirim

şimdiden teşekkürler;
Kullanıcı avatarı
akgun83
Üye
Mesajlar: 106
Kayıt: 26 Eyl 2003 11:34

Mesaj gönderen akgun83 »

Eğer soyadı girilmemişse boş değer atar.

Kod: Tümünü seç

select * from tablo1 where soy='' or soy is null
şeklinde sorgulayabilirsin.
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

@akgun83 arkadaşım çok ama çok teşekkür ederim

ama şu QuotedStr neden kullandın alanların string olduğunu belirtmek için
diye tahmin ediyorum ama Quoted anlamı nedir ve integer atamak istersem ne yapacağım :oops:

cevap veren herkese teşekkür ediyorum tekrardan
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

QuotedStr, string ifadenin başına ve sonuna tek tırnak ( ' ) koymak iin kullanılıyor.

QuotdeStr(Edit1.Text), eğer Edit1'de Mustafa yazıyorsa, bunu 'Mustafa' yapıyor.

Kolay gelsin.
Kullanıcı avatarı
akgun83
Üye
Mesajlar: 106
Kayıt: 26 Eyl 2003 11:34

Mesaj gönderen akgun83 »

stringlerin başına sonuna tırnak koyuyor. integer veya farklı tipteki bir datayı fonksiyon içine koymak için stringe çevirmen lazım.

Kod: Tümünü seç

QuotedStr(inttostr(234));

veya

Kod: Tümünü seç

QuotedStr(floattostr(234.3265));
gibi. Kolay gelsin saygılar .
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

Selamun Aleykum ;

insert into ile sizin sayenizde kayıt ettire biliyorum yanlız ne yaptıysam;
DBGRID'te kayıtlarımı göremiyorum;

1 adet ADOQuery var
buna bağlı bie DataSet'im

DataSet'ime bağlıda bir gridim var...

programı ilk çalıştığımda kayıtlar grid'te listeleniyor ama yeni bir kayıt
yaptığımda grid'te hiçbir kayıt gözükmüyor Acaba ADOQuery1 açıp kapatmam mı lazım

yardımcı olursanız sevinirim iyi çalışmalar....
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

evet, dataset'ten eklersen anında gözükür ama Insert into ile eklersen refresh veya kapa/aç yapman lazım.

Kolay gelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

evet cevap yazmak amaciyla tikladigimde Admin'in cevabini gordum.
gridin dataset'i veritabanı tarafinda tabloya yapılan degisikliklerden haberdar olmadigi icin acip kapamak suretiyle refresh etmek gerekir.
* 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ı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

DataSet'i refresh ediyorum ama bir türlü olmuyor :oops:

veya Query refresh ediyorum ama bir türlü olmuyor

Kod: Tümünü seç

Close ;
  SQL.Text := 'INSERT INTO TABLO1 (sicil, ad, soy) VALUES (:param1,:param2,:param3)' ;
  Parameters.ParamByName('param1').value := Edit1.text;
  Parameters.ParamByName('param2').value :=Edit2.text;
  Parameters.ParamByName('param3').value :=Edit3.text;

  ExecSQL;
  DataSource1.DataSet.Refresh;
iyi çalışmalar
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

tabloyu kapat ac en saglam refresh tir
eger hangi kayıtta oldugum kaybolmasın istiyorsan TBookMark kullan
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

peki nerede tabloyu açıp kapatacağım...

Kod: Tümünü seç

  begin
  with ADOQuery1 do begin
  Close ; 
  SQL.Text := 'INSERT INTO TABLO1 (sicil, ad, soy) VALUES    (:param1,:param2,:param3)' ; 
  Parameters.ParamByName('param1').value := Edit1.text; 
  Parameters.ParamByName('param2').value :=Edit2.text; 
  Parameters.ParamByName('param3').value :=Edit3.text; 

  ExecSQL; 
  close;  
  open; 
  end; 
end;
 
open dediğimde veya close,refresh nerede kullanacağım
yukarıdaki gibi yazdığımda hata veriyor...
veya bunların dışında
datasource1.dataset.close;
datasource1.dataset.open;
veya
bunu da denedim ama tekrar hata veriyor.

belki ben yanlış yerde kullandığım için hata veriyordur... Ama ben her türlü deniyorum... yinede olmuyor. :(
Cevapla