insert into 'is not a valid date' hata
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
insert into 'is not a valid date' hata
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
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
veri tarih formatında değil diyor.
kodunu parametrede değil direk sql.add de ekleyip denermisin.
Kod: Tümünü seç
strtodate(Edit8.Text);
Bir kelimenin anlamını öğretsen bile yeter..



ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text);resul yazdı:values kısmını mı ekleyecem anlamadım
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)');
Bir kelimenin anlamını öğretsen bile yeter..



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) );
(
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) );
slm ben dbexpress kullanıyorum bu yüzden ado bilmem ama mantık olarak
senin yazdığın kod
aşağıdaki gibi olması gerekmezmi ?
senin yazdığın kod
Kod: Tümünü seç
ADOQuery1.Parameters.ParamByName('edit4').Value:=strtodate(Edit4.Text);
Kod: Tümünü seç
ADOQuery1.Parameters.ParamByName('edit4').asDate :=strtodate(Edit4.Text);
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
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
StrToDate() fonksiyonu boş alanı tarihe çevirmeye çalışıyor. O kısmı if içinde yazabilirsin;
Daha garantilisi ise şöyle olmalı; Çü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 
Kod: Tümünü seç
...
if trim(Edit8.Text) <> '' then
ADOQuery1.Parameters.ParamByName('edit8').Value:=strtodate(Edit8.Text);
...
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;
...

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
@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.
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.
@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;
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.
Nice elbiseler gördüm içinde insan yok.
-
- Üye
- Mesajlar: 401
- Kayıt: 22 Tem 2004 02:03
- Konum: sıkıntı çekmişlere yakın bi yerden
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;
...
alanında bir gariplik yokmu?O_TES_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?O_GEL_TAR
type
Tform1 = class(Tform)
Tform1 = class(Tform)