• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi adocommand adoquery 插入、更新sql 中文传参方式,报错incorrect string valu ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

由于采用sql拼接方式动态生成sql字符串执行,存在输入项不能含有引号的问题,尝试使用参数方式解决。但是发现输入英文能够顺利保存,但是输入中文后,一直报错。

win7系统,delphi7,mysql odbc 5.5  32位,发现使用传参方式,报错。

    //保存验证结果(文字信息)
    cmd1.CommandText:='insert into cw_bxd_valid (systime,bx_id,validresult) values (now(),:bxd_code,:validresult) ';
    cmd1.Parameters.ParamValues['bxd_code']:='123456';
    cmd1.Parameters.ParamValues['validresult']:=memo_valid.Lines.Text;

    cmd1.Execute;

 

    cmd1.CommandText:='insert into cw_bxd_valid (systime,bx_id,validresult) values (now(),:bxd_code,:validresult) ';
    cmd1.Parameters.Clear;
    cmd1.Parameters.CreateParameter('bxd_code',ftString,pdInput,Length(bxd_code),bxd_code);
    cmd1.Parameters.CreateParameter('bxd_code',ftString,pdInput,Length(memo_valid.Lines.Text),memo_valid.Lines.Text);

//    cmd1.Parameters.ParamValues['bxd_code']:='123456';
//    cmd1.Parameters.ParamValues['validresult']:=memo_valid.Lines.Text;
    cmd1.Execute;

 

后来发现,在navicat中,直接修改字段的编码,记录里面有中文的,保存数据表的时候,同样报上述错误。

偶然发现,把该字段编码设置为gbk,delphi程序段保存竟然不报错了。估计delphi用参数提交方式默认用的是gbk编码。到此问题解决。

   最后测试正确的代码,插入、更新都正常,读取显示中文也正常。

    qry1.Active:=false;
    qry1.SQL.Text:='select * from cw_bxd_valid where bx_id='''+bxd_code+'''';
    qry1.Active:=true;
    if qry1.RecordCount>0 then
    begin
        cmd1.CommandText:='update cw_bxd_valid set systime=now(),validresult=:validresult where bx_id=:bxd_code';
        cmd1.Parameters.ParamValues['bxd_code']:=bxd_code;
        cmd1.Parameters.ParamValues['validresult']:=memo_valid.Lines.Text;
        cmd1.Execute;
    end
    else
    begin
        cmd1.CommandText:='insert into cw_bxd_valid (systime,bx_id,validresult) values (now(),:bxd_code,:validresult) ';
        cmd1.Parameters.Clear;
        cmd1.Parameters.CreateParameter('bxd_code',ftString,pdInput,Length(bxd_code),bxd_code);
        cmd1.Parameters.CreateParameter('bxd_code',ftString,pdInput,Length(memo_valid.Lines.Text),memo_valid.Lines.Text);
    //    cmd1.Parameters.ParamValues['bxd_code']:='123456';
    //    cmd1.Parameters.ParamValues['validresult']:=memo_valid.Lines.Text;
        cmd1.Execute;    
    end;

 

 

到笔记本上运行,发现报错,示“不正常地定义参数对象”,“提供了不一致或不完整的信息”错误,但是不影响实际插入更新效果。按照网上的设置paramcheck也不行,连参数都不检测了。没时间考虑,最后加try except end;临时先用着。编译后,运行是不会报错的,只有在源程序运行模式下报错。

 

Delphi执行SQL提示“不正常地定义参数对象”,“提供了不一致或不完整的信息”错误

2011年09月02日 15:09:08 zhongguoren666 阅读数 4312 标签: delphisqlgoogle脚本更多

个人分类: Delphi

 用AdoQuery从脚本文件读入内容,执行时提示“不正常地定义参数对象”,“提供了不一致或不完整的信息”之类的错误,本以为是SQL语句有问题,用查询分析器执行时没有发现错误,一切OK。但一到Delphi中执行就提示“不正常地定义参数对象”,“提供了不一致或不完整的信息”。用Google对关键字进行检索,发现有提示,说是由于TADOQuery对象把":"后的字符当作变量来使用,导致数据识别错误。只要把 TADOQuery.ParamCheck设置为False即可。一试,果然如此。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Matlab 中 arburg 函数的理解与实际使用方法发布时间:2022-07-18
下一篇:
MATLAB及其信号处理基础发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap