当ADOStoredProc中参数为中文时报错,如何处理

scoredhigh 2013-03-05 06:09:28
当ADOStoredProc中参数为中文时如何处理?

数据库是mysql
存储过程为
CREATE PROCEDURE sp_save_patient(prmName char(24), prmMedno char(24))
BEGIN
insert into tbl_patient values(prmName, prmMedno);
END

BCB中的代码为
ADOStoredProc->Close();
ADOStoredProc->ProcedureName = "sp_save_patient";
ADOStoredProc->Parameters->Clear();
ADOStoredProc->Parameters->CreateParameter("@prmName", ftString, pdInput, 30, NULL);
ADOStoredProc->Parameters->CreateParameter("@prmMedno", ftString, pdInput, 30,NULL);
ADOStoredProc->Parameters->ParamByName("@prmName")->Value = "张三";
ADOStoredProc->Parameters->ParamByName("@prmMedno")->Value = "0001";
ADOStoredProc->ExecProc();

以上代码出错,如果参数“@prmName”为英文就可以,
ADOStoredProc->Parameters->ParamByName("@prmName")->Value = "zhangsan";
怎么解决
...全文
648 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
scoredhigh 2013-03-07
  • 打赏
  • 举报
回复
引用 8 楼 ccrun 的回复:
数据库是UTF-8的?那这样再试试: C/C++ code ? 12 ADOStoredProc->Parameters->ParamByName("@prmName")->Value = AnsiToUtf8("张三"); ADOStoredProc->Parameters->ParamByName("@prmMedno")->Value = AnsiToUtf8……
可以啊,多谢了
ccrun.com 2013-03-07
  • 打赏
  • 举报
回复
数据库是UTF-8的?那这样再试试:
ADOStoredProc->Parameters->ParamByName("@prmName")->Value = AnsiToUtf8("张三");
ADOStoredProc->Parameters->ParamByName("@prmMedno")->Value = AnsiToUtf8("0001");
scoredhigh 2013-03-07
  • 打赏
  • 举报
回复
引用 3 楼 ccrun 的回复:
将字符串转成String,如: C/C++ code ? 12 ADOStoredProc->Parameters->ParamByName("@prmName")->Value = String("张三"); ADOStoredProc->Parameters->ParamByName("@prmMedno")->Value = String("0001");……
试过了,不行啊
scoredhigh 2013-03-07
  • 打赏
  • 举报
回复
引用 2 楼 ksrsoft 的回复:
出错提示是什么
提示错误:“Project DataBase_Server.exe raised exception class EOleException with message '[MySQL][ODBC 5.2(w) Driver][mysqld-5.5.20]Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'prmName' at row 1'. Process stopped. Use Step or Run to continue.”
scoredhigh 2013-03-07
  • 打赏
  • 举报
回复
引用 1 楼 dataxdata 的回复:
看看数据库所使用的代码表,可能和中文的编码方式有关
数据库是utf8编码的,我用此存储过程直接在数据库里执行时可以的。 这说明是BCB里的问题,我在连接符里设置了"Provider=MSDASQL.1;Password=center_db;Persist Security Info=True;User ID=center_db;Data Source=ZDDB;charset=utf8",也没什么用
我不懂电脑 2013-03-06
  • 打赏
  • 举报
回复
用WideString
ccrun.com 2013-03-06
  • 打赏
  • 举报
回复
将字符串转成String,如:
ADOStoredProc->Parameters->ParamByName("@prmName")->Value = String("张三");
ADOStoredProc->Parameters->ParamByName("@prmMedno")->Value = String("0001");
缘中人 2013-03-06
  • 打赏
  • 举报
回复
出错提示是什么
dataxdata 2013-03-06
  • 打赏
  • 举报
回复
看看数据库所使用的代码表,可能和中文的编码方式有关

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧