Ms Sql database select esnasında insert

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Ms Sql database select esnasında insert

Mesaj gönderen denizfatihi »

Merhaba,

Aşağıdaki kod içinde select ile insert işelmi yaparken ayrıca select içinde parametre de kullanıyorum. ExecSQL kısmına geldiğinde Parametre nesnesi hatalı tanımlanmış uyumsuz veya eksik bilgiler verilmiş diye hata veriyor sebep olarak ne olabilir ?
İlginiz ve yardımınız için şimdiden teşekkürler.

Kod: Tümünü seç

procedure TForm17.BitBtn3Click(Sender: TObject);
begin
  with ADOQuery2 do begin
  Close ;
  //insert;
  SQL.Text := 'INSERT INTO DENKIZIN (STARIHI, SICIL,IDN,BASTARIHI,BITTARIHI,ISBASTARIH, KULLATARIH, GUN, TURU, DOSYA, UZ) ';
  SQL.Text := 'VALUES (SELECT KTARIH,:SICIL, :IDN,:BASTARIHI,:BITTARIHI,:ISBASTARIH,:KULLATARIH, :GUN, :TURU, :DOSYA, :UZ FROM TARIH WHERE KTARIH BETWEEN :BASTARIHI AND :BITTARIHI)' ;
//  Parameters.ParamByName('a1').value := datetostr(DateTimePicker1.DateTime);  //starih
  Parameters.ParamByName('SICIL').value :=Edit1.text;  //sicil
  Parameters.ParamByName('IDN').value :=Edit3.text;  //idn
  Parameters.ParamByName('BASTARIHI').value :=datetostr(DateTimePicker1.DateTime);  //baslama
  Parameters.ParamByName('BITTARIHI').value :=datetostr(DateTimePicker2.DateTime);  //bitiş
  Parameters.ParamByName('ISBASTARIH').value :=datetostr(DateTimePicker1.DateTime+1);  //işbaşı
  Parameters.ParamByName('KULLATARIH').value :=null;  //kullanım tarihi
  Parameters.ParamByName('GUN').value :=Edit3.text;  //gün
  Parameters.ParamByName('TURU').value :=Edit4.text;  //türü
  Parameters.ParamByName('DOSYA').value :=''; //image alan
  Parameters.ParamByName('UZ').value :=Edit7.text; //uzantı
 // Parameters.ParamByName('a12').value :='1'; //uzantı
  ExecSQL; 
  Close; // Hata mesajının verildiği yer
  SQL.Text:= 'SELECT * FROM DENKIZIN';
  Open;
  end;
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Ms Sql database select esnasında insert

Mesaj gönderen thelvaci »

VALUES () kısmını kaldırıp denermisiniz. Ayrıca gördüğüm kadarı ile; sanırım yanlışlıkla SQL.Text özelliğine iki defa atama yapmışsınız. İlk atamanızdan sonra Sql.Add kullanmalısınız. Yada daha da güzeli, bu tarz şeyler için kesinlikle stored procedure kullanmanız olur.
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Ms Sql database select esnasında insert

Mesaj gönderen denizfatihi »

Merhaba,

Öncelikle ilginize teşekkür ederim, yanlız söylediğiniz düzeltmeleri yapmama rağmen aynı hata mesajı devam ediyor, son hali aşağıdaki gibi.

Kod: Tümünü seç

procedure TForm17.BitBtn3Click(Sender: TObject);
begin
  with ADOQuery2 do begin
  Close ;
  SQL.Text := 'INSERT INTO DENKIZIN (STARIHI, SICIL,IDN,BASTARIHI,BITTARIHI,ISBASTARIH, KULLATARIH, GUN, TURU, DOSYA, UZ) ';
  SQL.Add('SELECT KTARIH,:SICIL, :IDN,:BASTARIHI,:BITTARIHI,:ISBASTARIH,:KULLATARIH, :GUN, :TURU, :DOSYA, :UZ FROM TARIH WHERE KTARIH BETWEEN :BASTARIHI AND :BITTARIHI') ;
  Parameters.ParamByName('SICIL').value :=Edit1.text;  //sicil
  Parameters.ParamByName('IDN').value :=Edit3.text;  //idn
  Parameters.ParamByName('BASTARIHI').value :=datetostr(DateTimePicker1.DateTime);  //baslama
  Parameters.ParamByName('BITTARIHI').value :=datetostr(DateTimePicker2.DateTime);  //bitiş
  Parameters.ParamByName('ISBASTARIH').value :=datetostr(DateTimePicker1.DateTime+1);  //işbaşı
  Parameters.ParamByName('KULLATARIH').value :=null;  //kullanım tarihi
  Parameters.ParamByName('GUN').value :=Edit3.text;  //gün
  Parameters.ParamByName('TURU').value :=Edit4.text;  //türü
  Parameters.ParamByName('DOSYA').value :=Edit7.text; //dosya
  Parameters.ParamByName('UZ').value :=Edit7.text; //uzantı
  ExecSQL;
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Ms Sql database select esnasında insert

Mesaj gönderen thelvaci »

Where condition'da kullanmadığınız parametreleri neden Select ettiğiniz alanlar bölümüne de yazdınız, özel bir sebebiniz var mı bilmiyorum ama; string olan parametreler için QuotedStr kullanmanız gerekiyor olabilir büyük ihtimalle. Aksi durumda yazdığınız SQL cümlesi aşağıdaki gibi bir hale bürünür ki o da hata verecektir.

Kod: Tümünü seç

INSERT INTO Tablo(Alan1, Alan2)
SELECT 
  100,
  Merhaba Dünya
FROM TARIH 
WHERE 
  KTARIH BETWEEN 05/01/2015 AND 05/01/2015
Sizin de gördüğünüz gibi bu kod geçerli bir SQL kodu değildir. Doğrusu aşağıdaki gibi olabilir;

Kod: Tümünü seç

INSERT INTO Tablo(Alan1, Alan2)
SELECT 
  100,
  'Merhaba Dünya'
FROM TARIH 
WHERE 
  KTARIH BETWEEN '05/01/2015' AND '05/01/2015'
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Ms Sql database select esnasında insert

Mesaj gönderen denizfatihi »

Merhaba,

Sorunu en son aşağıdaki şekilde çözdüm, ihtiyacı olabilecek arkadaşlara yardımcı olması dileklerimle.

Ayrıca sayın thelvaci ilgi ve alakanızdan dolayı teşekkür ederim.

Kod: Tümünü seç

with ADOQuery2 do begin
  Close ;
  SQL.Text := 'INSERT INTO DENKIZIN (STARIHI, SICIL,IDN,BASTARIHI,BITTARIHI,ISBASTARIH, KULLATARIH, GUN, TURU, DOSYA, UZ) ';
  SQL.Add('SELECT K.KTARIH, '''+Edit1.Text+''', '''+Edit3.text+''', convert(datetime,'''+datetostr(DateTimePicker1.Datetime)+''',104), convert(datetime,'''+datetostr(DateTimePicker2.Datetime)+''',104), convert(datetime,'''+datetostr(DateTimePicker2.Datetime+1)+''',104), '''', '''+edit3.text+''', '''+Edit4.text+''', '''', '''' FROM TARIH K WHERE K.KTARIH BETWEEN :BASTARIHI AND :BITTARIHI');
                                                               
  Parameters.ParamByName('BASTARIHI').value :=(DateTimePicker1.Date);  //baslama
  Parameters.ParamByName('BITTARIHI').value :=(DateTimePicker2.Date);  //bitiş
 // open;
  ExecSQL;
Cevapla