connstr=Provider=MSDASQL.1;Persist Security Info=False;Data Source=db;
在 q1->ExecSQL();进行insert into 插库的时候,提示报错,报错为
[MySQL][ODBC 5.1 Driver][mysqld-5.1.26-rc-community]Incorrect string value: '\xB5\xA5\xC1\xA3.t...' for column 'ftpfile' at row 1
在CSDN上面查找了,说是中文的问题,想请教一下有没有什么办法能够解决这个问题的啊。感谢
15 个解决方案
#1
给地自己顶起来,期待高手的解决
#2
跟踪一下程序,看下你的sql语气有没有问题,介意直接发源代码
#3
你检查插入的数据库字段的charset是不是utf8或是中文类型,如果不是,就会出错
#4
q1->SQL->Clear();
q1->SQL->Add("insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8)");
AnsiString filename =StrPas(fds[1].c_str());
Log->Lines->Add("filename:"+filename);
q1->Parameters->ParamByName("v1")->Value=filename;
String cmpno=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v2")->Value=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v3")->Value=StrPas(fds[3].c_str());
TDateTime now=Now();
q1->Parameters->ParamByName("v4")->Value= FormatDateTime("yyyy-mm-dd hh:nn:ss",now);
String taskno=cmpno+FormatDateTime("mmddhhnnss",now);
q1->Parameters->ParamByName("v5")->Value=taskno;
q1->Parameters->ParamByName("v6")->Value=StrPas(fds[4].c_str());
q1->Parameters->ParamByName("v7")->Value=StrPas(fds[5].c_str());
q1->Parameters->ParamByName("v8")->Value=StrPas(fds[6].c_str());
q1->ExecSQL();
q1->SQL->Add("insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8)");
AnsiString filename =StrPas(fds[1].c_str());
Log->Lines->Add("filename:"+filename);
q1->Parameters->ParamByName("v1")->Value=filename;
String cmpno=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v2")->Value=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v3")->Value=StrPas(fds[3].c_str());
TDateTime now=Now();
q1->Parameters->ParamByName("v4")->Value= FormatDateTime("yyyy-mm-dd hh:nn:ss",now);
String taskno=cmpno+FormatDateTime("mmddhhnnss",now);
q1->Parameters->ParamByName("v5")->Value=taskno;
q1->Parameters->ParamByName("v6")->Value=StrPas(fds[4].c_str());
q1->Parameters->ParamByName("v7")->Value=StrPas(fds[5].c_str());
q1->Parameters->ParamByName("v8")->Value=StrPas(fds[6].c_str());
q1->ExecSQL();
#5
数据库字段使用的gb2312,如果把数据库字段改成utf8的话,BCB小程序不会报错,但是数据库表里面显示的却是乱码。
#6
我大概知道了,你用的是参数,我以前遇到过,不要使用参数,使用参数中文时多半会报错
#7
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
q1->ExecSQL();
类似这种形式比较好
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
q1->ExecSQL();
类似这种形式比较好
#8
把服务器和客户端的字符集改成一样的看看
#9
自定义安装mysql数据库,选择字符集为GB2312
用navicat for mysql管理工具来重新创建数据库
就可以解决了。
用navicat for mysql管理工具来重新创建数据库
就可以解决了。
#10
这个办法我试过了,不行的哟。
#11
用我说的那种方法,百分之百可以啊。
如果非要用参数的话,对应的字段赋值要加上转换函数,例如
q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);类似这样试试
如果非要用参数的话,对应的字段赋值要加上转换函数,例如
q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);类似这样试试
#12
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
类似这种形式比较好
采用这个方法不会报错,可以解决问题。
但是 q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);这样的 转换函数还是提示错误 AnsiToUtf8(filename) 还有其他类似的函数么?能够进行正确的转换
q1->ExecSQL();
#13
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
类似这种形式比较好
采用这个方法不会报错,可以解决问题。
但是 q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);这样的 转换函数还是提示错误 AnsiToUtf8(filename) 还有其他类似的函数么?能够进行正确的转换
q1->ExecSQL();
你确认一下是否凡是有可能有中文的字段都使用了AnsiToUtf8函数?
#14
字符集全统一成UTF8吧,会少很多麻烦
#15
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
类似这种形式比较好
采用这个方法不会报错,可以解决问题。
但是 q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);这样的 转换函数还是提示错误 AnsiToUtf8(filename) 还有其他类似的函数么?能够进行正确的转换
q1->ExecSQL();
不用转换 直接q1->Parameters->ParamByName("v1")->Value=filename; 就可以吧
#1
给地自己顶起来,期待高手的解决
#2
跟踪一下程序,看下你的sql语气有没有问题,介意直接发源代码
#3
你检查插入的数据库字段的charset是不是utf8或是中文类型,如果不是,就会出错
#4
q1->SQL->Clear();
q1->SQL->Add("insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8)");
AnsiString filename =StrPas(fds[1].c_str());
Log->Lines->Add("filename:"+filename);
q1->Parameters->ParamByName("v1")->Value=filename;
String cmpno=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v2")->Value=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v3")->Value=StrPas(fds[3].c_str());
TDateTime now=Now();
q1->Parameters->ParamByName("v4")->Value= FormatDateTime("yyyy-mm-dd hh:nn:ss",now);
String taskno=cmpno+FormatDateTime("mmddhhnnss",now);
q1->Parameters->ParamByName("v5")->Value=taskno;
q1->Parameters->ParamByName("v6")->Value=StrPas(fds[4].c_str());
q1->Parameters->ParamByName("v7")->Value=StrPas(fds[5].c_str());
q1->Parameters->ParamByName("v8")->Value=StrPas(fds[6].c_str());
q1->ExecSQL();
q1->SQL->Add("insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8)");
AnsiString filename =StrPas(fds[1].c_str());
Log->Lines->Add("filename:"+filename);
q1->Parameters->ParamByName("v1")->Value=filename;
String cmpno=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v2")->Value=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v3")->Value=StrPas(fds[3].c_str());
TDateTime now=Now();
q1->Parameters->ParamByName("v4")->Value= FormatDateTime("yyyy-mm-dd hh:nn:ss",now);
String taskno=cmpno+FormatDateTime("mmddhhnnss",now);
q1->Parameters->ParamByName("v5")->Value=taskno;
q1->Parameters->ParamByName("v6")->Value=StrPas(fds[4].c_str());
q1->Parameters->ParamByName("v7")->Value=StrPas(fds[5].c_str());
q1->Parameters->ParamByName("v8")->Value=StrPas(fds[6].c_str());
q1->ExecSQL();
#5
你检查插入的数据库字段的charset是不是utf8或是中文类型,如果不是,就会出错
数据库字段使用的gb2312,如果把数据库字段改成utf8的话,BCB小程序不会报错,但是数据库表里面显示的却是乱码。
#6
q1->SQL->Clear();
q1->SQL->Add("insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8)");
AnsiString filename =StrPas(fds[1].c_str());
Log->Lines->Add("filename:"+filename);
q1->Parameters->ParamByName("v1")->Value=filename;
String cmpno=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v2")->Value=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v3")->Value=StrPas(fds[3].c_str());
TDateTime now=Now();
q1->Parameters->ParamByName("v4")->Value= FormatDateTime("yyyy-mm-dd hh:nn:ss",now);
String taskno=cmpno+FormatDateTime("mmddhhnnss",now);
q1->Parameters->ParamByName("v5")->Value=taskno;
q1->Parameters->ParamByName("v6")->Value=StrPas(fds[4].c_str());
q1->Parameters->ParamByName("v7")->Value=StrPas(fds[5].c_str());
q1->Parameters->ParamByName("v8")->Value=StrPas(fds[6].c_str());
q1->ExecSQL();
#7
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
q1->ExecSQL();
类似这种形式比较好
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
q1->ExecSQL();
类似这种形式比较好
#8
把服务器和客户端的字符集改成一样的看看
#9
自定义安装mysql数据库,选择字符集为GB2312
用navicat for mysql管理工具来重新创建数据库
就可以解决了。
用navicat for mysql管理工具来重新创建数据库
就可以解决了。
#10
自定义安装mysql数据库,选择字符集为GB2312
用navicat for mysql管理工具来重新创建数据库
就可以解决了。
#11
这个办法我试过了,不行的哟。
自定义安装mysql数据库,选择字符集为GB2312
用navicat for mysql管理工具来重新创建数据库
就可以解决了。
如果非要用参数的话,对应的字段赋值要加上转换函数,例如
q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);类似这样试试
#12
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
类似这种形式比较好
采用这个方法不会报错,可以解决问题。
但是 q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);这样的 转换函数还是提示错误 AnsiToUtf8(filename) 还有其他类似的函数么?能够进行正确的转换
q1->ExecSQL();
#13
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
类似这种形式比较好
采用这个方法不会报错,可以解决问题。
但是 q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);这样的 转换函数还是提示错误 AnsiToUtf8(filename) 还有其他类似的函数么?能够进行正确的转换
q1->ExecSQL();
你确认一下是否凡是有可能有中文的字段都使用了AnsiToUtf8函数?
#14
字符集全统一成UTF8吧,会少很多麻烦
#15
AnsiString sql;
sql = "insert into import_wlm_task(ftpfile,cmpno,loginuser,uploadtime"
",taskno,boxcnt,bigpacklen,smallpacklen) values('" + filename + "', .....)";
q1->SQL->Clear();
q1->SQL->Add(sql);
类似这种形式比较好
采用这个方法不会报错,可以解决问题。
但是 q1->Parameters->ParamByName("v1")->Value=AnsiToUtf8(filename);这样的 转换函数还是提示错误 AnsiToUtf8(filename) 还有其他类似的函数么?能够进行正确的转换
q1->ExecSQL();
不用转换 直接q1->Parameters->ParamByName("v1")->Value=filename; 就可以吧