今日一個小工具,采用的是bcb6和mysql,用的是ADO進行連接資料庫的,
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上面查找了,說是中文的問題,想請教一下有沒有什么辦法能夠解決這個問題的啊。感謝
uj5u.com熱心網友回復:
給地自己頂起來,期待高手的解決uj5u.com熱心網友回復:
跟蹤一下程式,看下你的sql語氣有沒有問題,介意直接發源代碼uj5u.com熱心網友回復:
你檢查插入的資料庫欄位的charset是不是utf8或是中文型別,如果不是,就會出錯uj5u.com熱心網友回復:
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=https://bbs.csdn.net/topics/filename;
String cmpno=StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v2")->Value=https://bbs.csdn.net/topics/StrPas(fds[2].c_str());
q1->Parameters->ParamByName("v3")->Value=https://bbs.csdn.net/topics/StrPas(fds[3].c_str());
TDateTime now=Now();
q1->Parameters->ParamByName("v4")->Value=https://bbs.csdn.net/topics/ FormatDateTime("yyyy-mm-dd hh:nn:ss",now);
String taskno=cmpno+FormatDateTime("mmddhhnnss",now);
q1->Parameters->ParamByName("v5")->Value=https://bbs.csdn.net/topics/taskno;
q1->Parameters->ParamByName("v6")->Value=https://bbs.csdn.net/topics/StrPas(fds[4].c_str());
q1->Parameters->ParamByName("v7")->Value=https://bbs.csdn.net/topics/StrPas(fds[5].c_str());
q1->Parameters->ParamByName("v8")->Value=https://bbs.csdn.net/topics/StrPas(fds[6].c_str());
q1->ExecSQL();
uj5u.com熱心網友回復:
資料庫欄位使用的gb2312,如果把資料庫欄位改成utf8的話,BCB小程式不會報錯,但是資料庫表里面顯示的卻是亂碼。
uj5u.com熱心網友回復:
我大概知道了,你用的是引數,我以前遇到過,不要使用引數,使用引數中文時多半會報錯uj5u.com熱心網友回復:
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();
類似這種形式比較好
uj5u.com熱心網友回復:
把服務器和客戶端的字符集改成一樣的看看uj5u.com熱心網友回復:
自定義安裝mysql資料庫,選擇字符集為GB2312用navicat for mysql管理工具來重新創建資料庫
就可以解決了。
uj5u.com熱心網友回復:
這個辦法我試過了,不行的喲。uj5u.com熱心網友回復:
用我說的那種方法,百分之百可以啊。如果非要用引數的話,對應的欄位賦值要加上轉換函式,例如
q1->Parameters->ParamByName("v1")->Value=https://bbs.csdn.net/topics/AnsiToUtf8(filename);類似這樣試試
uj5u.com熱心網友回復:
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=https://bbs.csdn.net/topics/AnsiToUtf8(filename);這樣的 轉換函式還是提示錯誤 AnsiToUtf8(filename) 還有其他類似的函式么?能夠進行正確的轉換
q1->ExecSQL();
uj5u.com熱心網友回復:
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=https://bbs.csdn.net/topics/AnsiToUtf8(filename);這樣的 轉換函式還是提示錯誤 AnsiToUtf8(filename) 還有其他類似的函式么?能夠進行正確的轉換
q1->ExecSQL();
你確認一下是否凡是有可能有中文的欄位都使用了AnsiToUtf8函式?
uj5u.com熱心網友回復:
字符集全統一成UTF8吧,會少很多麻煩uj5u.com熱心網友回復:
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=https://bbs.csdn.net/topics/AnsiToUtf8(filename);這樣的 轉換函式還是提示錯誤 AnsiToUtf8(filename) 還有其他類似的函式么?能夠進行正確的轉換
q1->ExecSQL();
不用轉換 直接q1->Parameters->ParamByName("v1")->Value=https://bbs.csdn.net/topics/filename; 就可以吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143422.html
標籤:數據庫及相關技術
下一篇:幫我看看這個程式為啥結果不對
