insert into 'is not a valid date' hata

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
resul
Üye
Mesajlar: 25
Kayıt: 04 Tem 2007 10:16
İletişim:

insert into 'is not a valid date' hata

Mesaj gönderen resul »

ADOQuery1.sql.Clear;
ADOQuery1.sql.add('insert into ONARIM_BILGI');
ADOQuery1.sql.add('(O_NO,M_NO,M_ADI,O_GEL_TAR,O_MARKA,O_CINSI,O_SERINO,O_BILGI,O_TES_TAR,O_UCTIP)');
ADOQuery1.sql.add('values(:edit1,:edit2,:edit3,:edit4,:edit5,:edit6,:edit7,:Memo1,:edit8,:ComboBox2)');

ADOQuery1.Parameters.ParamByName('edit1').Value:=Edit1.Text;
ADOQuery1.Parameters.ParamByName('edit2').Value:=Edit2.Text;
ADOQuery1.Parameters.ParamByName('edit3').Value:=Edit3.Text;
ADOQuery1.Parameters.ParamByName('edit4').Value:=strtodate(Edit4.Text);
ADOQuery1.Parameters.ParamByName('edit5').Value:=Edit5.Text;
ADOQuery1.Parameters.ParamByName('edit6').Value:=Edit6.Text;
ADOQuery1.Parameters.ParamByName('edit7').Value:=Edit7.Text;
ADOQuery1.Parameters.ParamByName('Memo1').Value:=Memo1.Text;
ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text);
ADOQuery1.Parameters.ParamByName('ComboBox2').Value:=ComboBox2.Text;

şöyle bir hata alıyorum yardımcı olurmusunuz
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

veri tarih formatında değil diyor.

Kod: Tümünü seç

strtodate(Edit8.Text); 
kodunu parametrede değil direk sql.add de ekleyip denermisin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
resul
Üye
Mesajlar: 25
Kayıt: 04 Tem 2007 10:16
İletişim:

Mesaj gönderen resul »

values kısmını mı ekleyecem anlamadım
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

resul yazdı:values kısmını mı ekleyecem anlamadım
ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text);
Bu parametreyi kaldırıp

Kod: Tümünü seç

ADOQuery1.sql.add('values(:edit1,:edit2,:edit3,:edit4,:edit5,:edit6,:edit7,:Memo1,strtodate(Edit8.Text) :ComboBox2)'); 
şeklinde
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
resul
Üye
Mesajlar: 25
Kayıt: 04 Tem 2007 10:16
İletişim:

Mesaj gönderen resul »

ORA-00936 missing exspression HATASI VERİYOR

HOCAM BUNU BAŞKA TÜRLÜ YAPAMAMMI
AMA
İNSERT İNTO KULANARAK BAŞKA YÖNTEMİ VARMI
BU ARADA ORACLE VERİTABANI KULANIYORUM
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Tablonuzdaki tüm alanlarin veri tiplerini yazabilir misiniz?
resul
Üye
Mesajlar: 25
Kayıt: 04 Tem 2007 10:16
İletişim:

Mesaj gönderen resul »

CREATE TABLE ONARIM_BILGI
(
O_NO NUMBER,
M_NO NUMBER DEFAULT NULL,
M_ADI VARCHAR2(20 BYTE) DEFAULT NULL,
O_GEL_TAR DATE,
O_TARIH DATE,
O_TES_TAR DATE,
O_TIP NUMBER DEFAULT NULL,
O_CIHAZ VARCHAR2(20 BYTE) DEFAULT NULL,
O_MARKA VARCHAR2(20 BYTE) DEFAULT NULL,
O_CINSI VARCHAR2(20 BYTE) DEFAULT NULL,
O_SERINO VARCHAR2(20 BYTE) DEFAULT NULL,
O_BILGI VARCHAR2(300 BYTE) DEFAULT NULL,
O_PER_NO VARCHAR2(20 BYTE) DEFAULT NULL,
O_PER_AD VARCHAR2(20 BYTE) DEFAULT NULL,
O_PER_SOYAD VARCHAR2(20 BYTE) );
Kullanıcı avatarı
MakPRO
Üye
Mesajlar: 251
Kayıt: 31 Eki 2003 05:21
Konum: Antalya
İletişim:

Mesaj gönderen MakPRO »

slm ben dbexpress kullanıyorum bu yüzden ado bilmem ama mantık olarak
senin yazdığın kod

Kod: Tümünü seç

ADOQuery1.Parameters.ParamByName('edit4').Value:=strtodate(Edit4.Text);
aşağıdaki gibi olması gerekmezmi ?

Kod: Tümünü seç

ADOQuery1.Parameters.ParamByName('edit4').asDate :=strtodate(Edit4.Text);
resul
Üye
Mesajlar: 25
Kayıt: 04 Tem 2007 10:16
İletişim:

Mesaj gönderen resul »

ADOQuery1.sql.Clear;
ADOQuery1.sql.add('insert into ONARIM_BILGI');
ADOQuery1.sql.add('(O_NO,M_NO,M_ADI,O_GEL_TAR,O_MARKA,O_CINSI,O_SERINO,O_BILGI,O_TES_TAR,O_UCTIP)');
ADOQuery1.sql.add('values(:edit1,:edit2,:edit3,:edit4,:edit5,:edit6,:edit7,:Memo1,:edit8,:ComboBox2)');

ADOQuery1.Parameters.ParamByName('edit1').Value:=Edit1.Text;
ADOQOuery1.Parameters.ParamByName('edit2').Value:=Edit2.Text;
ADOQuery1.Parameters.ParamByName('edit3').Value:=Edit3.Text;
ADOQuery1.Parameters.ParamByName('edit4').Value:=strtodate(Edit4.Text);
ADOQuery1.Parameters.ParamByName('edit5').Value:=Edit5.Text;
ADOQuery1.Parameters.ParamByName('edit6').Value:=Edit6.Text;
ADOQuery1.Parameters.ParamByName('edit7').Value:=Edit7.Text;
ADOQuery1.Parameters.ParamByName('Memo1').Value:=Memo1.Text;
ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text);
ADOQuery1.Parameters.ParamByName('ComboBox2').Value:=ComboBox2.Text;


KAYIT YAPIR AMA TARIHI BOŞ GEÇİNCE HATA VERİYOR
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

StrToDate() fonksiyonu boş alanı tarihe çevirmeye çalışıyor. O kısmı if içinde yazabilirsin;

Kod: Tümünü seç

...
if trim(Edit8.Text) <> '' then
  ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text); 
...
Daha garantilisi ise şöyle olmalı;

Kod: Tümünü seç

...
try
  ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text);
except
  ADOQuery1.Parameters.ParamByName('edit8').Value:=Date; // hata varsa istenirse sistem tarihi alınabilir. 
end;
...
 
Çünkü mask kullanmazsan Edit8 e her türlü bilgi girilebildiğinden sadece boş olması değil geçerli bir tarih bilgisi olmaması da hataya sebep olur. Bu tür alanlar için en doğrusu DateTimePicker ve benzeri bileşenleri kullanmak, böylece kullanıcıya hata yapma şansı vermemiş olursunuz :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

@rsimsek üstadım yanlış hatırlamıyorsam tarih formatına uymadığı zaman zaten delphi hata penceresi ile hata veriyor. girdiğiniz değer tarih değildir şeklinde.
@resul hocam yakın zamanda aynı hatayı bende bayağı bi uğraştırmıştı. Ancak ben MSSQL'de bu sorunu yaşamıştım. Sorunu sadece tarih bilgisinin olduğu kısmı parametre dışına alarak kısmen çözmüştüm. İsterseniz sizde bi bunu deneyin.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject); 
begin 
with ADOQuery1 do 
begin 
Active; 
SQL.Clear; 
sql.add('insert into  kimlik (tckimlik,adi,soyadi,tarih)'); 
sql.add('values( :ad,:soyad,:tcno,'''+edit4.Text+''' )'); 
Parameters.ParamByName('ad').Value:=Edit1.Text; 
Parameters.ParamByName('soyad').Value:=edit2.text; 
Parameters.ParamByName('tcno').Value:=edit3.text;
viewtopic.php?t=20263&highlight=

Ancak burada edit4.text'e ben bilgi girişi yaparken strtodate() kullanmadığımdan delphide bu şekilde bir hata almayacağımdan @rsimsek üstadımızın dediği gibi maskeleme yapmıştım. Eğer bu şekilde sorununuzu halledebilirseniz mutlaka tarih giriş formatına uygun düzenlemeyi yapın. Son kullanıcı için sıkıntı olmasın.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
tarih alanlarında edit yerine datetimepicker kullanmayı deneyin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

KAYIT YAPIR AMA TARIHI BOŞ GEÇİNCE HATA VERİYOR


Daha garantilisi ise şöyle olmalı;
Kod:
...
try
ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text);
except
ADOQuery1.Parameters.ParamByName('edit8').Value:=Date; // hata varsa istenirse sistem tarihi alınabilir.
end;
...
O_TES_TAR
alanında bir gariplik yokmu?

O_GEL_TAR
alanına kayıt girerken bir problem yok editteki bilgiyi direk kayıt ediyorsunuz yada öyle gözüküyo ikiside veri tabanında aynı tipte tanımlanmış. sadece O_TES_TAR alanına kayıt girerken hata veriyorsa not null olabilirmi?
type
Tform1 = class(Tform)
Cevapla