先请看下面的代码: With ADOQuery Do
Begin
With SQL Do
Begin
Add('Insert Into IntraUsers');
Add(' UserName,');
Add(' EmailAddress,');
Add('Values');
Add(' (:UserName,');
Add(' :EmailAddress)');
End; Parameters.ParamByName('UserName').Value := UserNameText;
Parameters.ParamByName('EmailAddress').Value := EmailAddressText; ExecSQL;
End;没有错吧?使用的数据库是Access 2000,UserName和EmailAddress字段定义均为文本,不是必填,也允许为空。当变量UserNameText和EmailAddressText不是空字符串的时候,上述代码执行正常;可问题是,当UserNameText和EmailAddressText这两个变量中有任何一个为''(空字符串),就会在ExecSQL的时候抛出一个莫名其妙的异常,我猜它是说参数类型的问题。呃……哪位大虾给个解决方案?在此先拜谢了!
Begin
With SQL Do
Begin
Add('Insert Into IntraUsers');
Add(' UserName,');
Add(' EmailAddress,');
Add('Values');
Add(' (:UserName,');
Add(' :EmailAddress)');
End; Parameters.ParamByName('UserName').Value := UserNameText;
Parameters.ParamByName('EmailAddress').Value := EmailAddressText; ExecSQL;
End;没有错吧?使用的数据库是Access 2000,UserName和EmailAddress字段定义均为文本,不是必填,也允许为空。当变量UserNameText和EmailAddressText不是空字符串的时候,上述代码执行正常;可问题是,当UserNameText和EmailAddressText这两个变量中有任何一个为''(空字符串),就会在ExecSQL的时候抛出一个莫名其妙的异常,我猜它是说参数类型的问题。呃……哪位大虾给个解决方案?在此先拜谢了!
sqlquery:='insert into intrausers(username,emailaddress)
values(:username,:emailaddress)'+
adoquery1.sql.add(sqlquery);
这样试试
Begin
With SQL Do
Begin
Add('Insert Into IntraUsers(UserName,EmailAddress)');
Add('Values(:UserNam,:EmailAddres)');
End;
Parameters.ParamValues['UserName'] := UserNameText;
Parameters.ParamValues['EmailAddress'] := EmailAddressText;
execsql;
End;改为用paramvaluesparamvalues是variant型,而parambyname.value是olevariant型,olevariant好象对''的支持有问题
Begin
With SQL Do
Begin
Add('Insert Into IntraUsers');
Add(' (UserName,');
Add(' EmailAddress)');
Add('Values');
Add(' (:UserName,');
Add(' :EmailAddress)');
End; Parameters.ParamByName('UserName').Value := UserNameText;
Parameters.ParamByName('EmailAddress').Value := EmailAddressText; ExecSQL;
End;哦?用ParamValues就可以了?
params[1].AsString := EmailAddressText;
variant和''的转换是没有问题的
我也用paramvalues按你相同的情况测试了,没有问题,强烈建议你再做一遍试试
是ado的写法,我是用ado测试的,配的跟你的环境一模一样。我用parambyname时有异常发生,而用paramvalues时就没有问题。