首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

向Access数据库中insert数据时异常

2012-05-05 
向Access数据库中insert数据时错误sbreceive1到sbreceive6是从一个Ansistring 中拆分出来的字符串sbreceiv

向Access数据库中insert数据时错误

sbreceive1到sbreceive6是从一个Ansistring 中拆分出来的字符串
sbreceive1在Access对应的字段pdate为日期/时间型-短日期,形如“2012-05-02”
sbreceive2在Access对应的字段ptime为日期/时间型-长时间,形如“10:11:25”
程序运行时提示“标准表达式中数据类型不匹配”,但程序仍能运行,打开数据库,数据已经写进去了。
可是数据行却是隔行写入的,因为我发现自动编号字段是这样的“192 194 196 198 200”,怎么会这样啊?

C/C++ code
  AnsiString  sql1 = "insert into record (peifang,xiliaodaihao,pdate,ptime,NW,TW,GW) values ('"+peifanghao+"','"+xiliaodaihao+"','"+sbreceive1+"','"+sbreceive2+"','"+sbreceive3+"','"+sbreceive4+"','"+sbreceive5+"');";   ADOQuery1->Close();  ADOQuery1->SQL->Clear();  ADOQuery1->SQL->Add(sql1);  ADOQuery1->ExecSQL();


[解决办法]
一般 BCB 里面 SQL 语句推荐用 参数方式传值,而不是直接构造 SQL 字符串。

类似:

FTable2->Active = false;
FTable2->SQL->Text = "INSERT INTO TLOG (TYP, SRC, DTM, MSG) VALUES(:TYP, :SRC, :DTM, :MSG)";
FTable2->Params->ParamByName("TYP")->AsInteger = FLogRecord->nType;
FTable2->Params->ParamByName("SRC")->AsInteger = FLogRecord->nVideo;
FTable2->Params->ParamByName("DTM")->AsString = FLogRecord->sTime;
FTable2->Params->ParamByName("MSG")->AsString = FLogRecord->sText;
FTable2->ExecuteSQL();
FTable2->Active = false;

[解决办法]
你把字符型当日期型写入有问题吧,你还是用日期函数转换一下。
[解决办法]
C/C++ code
   if(sqlExecute->DBConnection->ProviderName == "Access")         tmpSQL = " rDate >= #"+DateEdit1->Text+"# and  rDate <= #"+DateEdit2->Text+"#  "  ;    else         tmpSQL = " rDate >= '"+DateEdit1->Text+"' and  rDate <= '"+DateEdit2->Text+"'  "  ; 

热点排行