我使用ADOQuery或ADOCommand组件来插入数据,结果会出现错误。请各位大侠帮忙看看哪里出的问题。具体情况如下:
我使用的是access数据库,表名为cost,表结构如下:
字段名 类型
Id 自动增长
Date 日期时间
Item 文本 (50)
Money 货币
我在ADOQuery的SQL属性中设置命令为:
insert into cost(Date,Item,Money) values(:Date,:Item,:Money)
点击ok后可以在Paramenters属性中看到Date,Item,Money变量名称。
但当我使用如下代码:
ADOQuery1.Parameters.ParamByName('Date').Value:=edtDate.Text;
ADOQuery1.Parameters.ParamByName('Item').Value:=edtItem.Text;
ADOQuery1.Parameters.ParamByName('Money').Value:=edtMoney.Text;
ADOQuery1.ExecSQL;
进行数据插入的时候结果出现
“INSERT INTO 语句的语法错误。”的错误提示。
但当我将SQL语句改为:
insert into cost(Item) values(:Item)
再使用
ADOQuery1.Parameters.ParamByName('Item').Value:=edtItem.Text;
ADOQuery1.ExecSQL;
就可以添加成功。
但换成其他的字段如Date或Money都不行,还是会出现“INSERT INTO 语句的语法错误。”的错误提示。
使用ADOCommand控件也与使用ADOQuery1控件一样,会出现相同的错误。
不知道是不是因为与表中定义字段类型不符所以出现这样的错误?如果是的话要怎么解决呢?如果不是,那又会是什么问题呢?请各位大侠不吝赐教。
我使用的是access数据库,表名为cost,表结构如下:
字段名 类型
Id 自动增长
Date 日期时间
Item 文本 (50)
Money 货币
我在ADOQuery的SQL属性中设置命令为:
insert into cost(Date,Item,Money) values(:Date,:Item,:Money)
点击ok后可以在Paramenters属性中看到Date,Item,Money变量名称。
但当我使用如下代码:
ADOQuery1.Parameters.ParamByName('Date').Value:=edtDate.Text;
ADOQuery1.Parameters.ParamByName('Item').Value:=edtItem.Text;
ADOQuery1.Parameters.ParamByName('Money').Value:=edtMoney.Text;
ADOQuery1.ExecSQL;
进行数据插入的时候结果出现
“INSERT INTO 语句的语法错误。”的错误提示。
但当我将SQL语句改为:
insert into cost(Item) values(:Item)
再使用
ADOQuery1.Parameters.ParamByName('Item').Value:=edtItem.Text;
ADOQuery1.ExecSQL;
就可以添加成功。
但换成其他的字段如Date或Money都不行,还是会出现“INSERT INTO 语句的语法错误。”的错误提示。
使用ADOCommand控件也与使用ADOQuery1控件一样,会出现相同的错误。
不知道是不是因为与表中定义字段类型不符所以出现这样的错误?如果是的话要怎么解决呢?如果不是,那又会是什么问题呢?请各位大侠不吝赐教。
解决方案 »
- 郁闷中,求答案并散分
- Fast Report4.9在Dephi7安装失败
- ADODataSet 过滤时提示"参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突"
- 思维加速X3产品是delphi搞的吗 ?
- 小弟做个数据库小程式,需要用几个EDIT输入同一类但内容不同的信息,我想在EDIT的ON CHANGE中进行对比,每个EDIT中的内容都必须是唯一的,
- MSScriptControl.ScriptControl有大量内存泄露,帮我看看代码是否正确
- 一个声明时的小问题啊!请大家帮我看看啊!我是小菜!谢谢大家了啊!!!!!!
- 在intraweb中,有关iwdbgrid数据记录的分页显视....
- 怎样进行数据库文件的备份和恢复!
- DELPHI一个非常头痛的问题!!!!`·#¥%……—
- prepare;//这一行可以不加吗,好象不加也可以,加了有什么作用
- 诚聘 软件测试工程师 与 软件工程师 ,能力强者优先
ADOQuery1.Parameters.ParamByName('Item').Value:=StrToDate(edtItem.Text);
ADOQuery1.Parameters.ParamByName('Money').Value:=StrToCurr(edtMoney.Text);
我以前也遇到这样的问题。
如果数据库不是access,那么采用:
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.sql.Add('select * from input where 录入员=:lry and 日期=:rq');
adoquery2.Parameters.ParamValues['lry']:=trim(form1.StatusBar1.Panels[1].Text);
adoquery2.Parameters.ParamValues['rq']:=FormatDateTime('yyyy-mm-dd',datetimepicker1.Date);
adoquery2.Open;
adoquery2.First;
请看上面的adoquery2.Parameters.ParamValues['rq']:=FormatDateTime('yyyy-mm-dd',datetimepicker1.Date);
中的格式。
如果是ACCESS数据库,那么加入'#'来进行参数传递日期型。
insert into cost(Date) values('#2002-1-1#')
insert into cost(Date) values(#2002-1-1#)
insert into cost(Date) values("#2002-1-1#")
试了可是还是提示同样的错误!!
在试过诸多看起来没有语病的insert into语句之后,我终于决定要将那个日期类型字段改命了,我想那个字段可能是因为名字的关系导致了错误(至于是什么错误我就不太清楚了,我想会不会是Date本身是一个函数,用在“'insert into cost(Date)...'”里的时候会取出一个什么数据出来,导致了sql语句的语法错误,不过照理说因为在字符串里面,编译的时候应该不会被误认为是一个函数。所以只好期待高手们的说明了),于是将字段名Date改为Dtype,然后再用insert into cost(Dtype) values(#2002-1-1#)插入数据,结果成功了!!!然后我又怀疑,会不会现在我将字段名称改会Date也能插入成功呢?就又将字段名改回Date,在插入,结果还是出现原来的错误,看来问题真的出现在这里。但是难道字段名就不能设置为Date吗?忽然想到以前在SQL Server里有看到当字段名称带有空格的时候,就用"[]"把字段括起来,就试着用下面的语句:insert into cost([Date]) values(#2002-1-1#),结果插入成功。(后来我发现那个字段名为Money的也有这个毛病,也要用[]括起来才可以,至于为什么,不清楚,不知道会不会因为与字段的属性名一样)
最后,我发现其实插入字符串其实也是可以的,可以不用作类型转换,如果用字符串的话,可以不用在前后加#符号。所以当我作如下修改后,即可成功插入数据到表中:
ADOQuery1的SQL属性设为: insert into cost([Date],Item,[Money]) values(:Date,:Item,:Money)
插入代码如下:
ADOQuery1.Close;
ADOQuery1.Parameters.ParamByName('Date').Value:=edtDate.Text;
ADOQuery1.Parameters.ParamByName('Item').Value:=edtItem.Text;
ADOQuery1.Parameters.ParamByName('Money').Value:=edtMoney.Text;
try
ADOQuery1.ExecSQL;
finally
ADOQuery1.Close;
end;
最后感谢所有上面作出回复的朋友,从你们的回复中我学到了许多。