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

数据库操作有关问题

2012-03-30 
数据库操作问题C/C++ codechar tmptext[50]AnsiString cEndTime FormatDateTime(yyyy-mm-dd,Now())

数据库操作问题

C/C++ code
  char tmptext[50];  AnsiString cEndTime = FormatDateTime("yyyy-mm-dd",Now()) ;  Form1->ArrayType="TerminalType,Building,Unit,Storey,Room,TNum";  DataModule35->qry3->Close();  DataModule35->qry3->SQL->Clear();  DataModule35->qry3->SQL->Add("Select " + Form1->CdtCol + " from cdtinfo");  DataModule35->qry3->SQL->Add(" where ComputerNo = :ComputerNo and (TerminalType = 3 or TerminalType = 4)");  DataModule35->qry3->SQL->Add(" and Address in (select Author from CardAuthor where CardNo in(Select CardNo from Card  where EndTime <= :cEndTime))");  DataModule35->qry3->Parameters->ParamByName("ComputerNo")->Value = Form1->ComputerNo;  DataModule35->qry3->Parameters->ParamByName("cEndTime")->Value = cEndTime;

  这样会提示,标准表达式中数据类型不匹配,我用的是Access数据库,问题就出在cEndTime这个字段上面,cEndTime在数据库中的类型是日期/时间类型,要是把它去掉了就不会提示什么问题了,关键是去掉了cEndTime的话就不能够筛选指定的数据了,我试了很多种方法还是没能解决这个问题。

[解决办法]
Access啊?好像需要两个冒号,如:

C/C++ code
DataModule35->qry3->SQL->Add("Select " + Form1->CdtCol + " from cdtinfo");DataModule35->qry3->SQL->Add(" where ComputerNo = ::ComputerNo and (TerminalType = 3 or TerminalType = 4)");DataModule35->qry3->SQL->Add(" and Address in (select Author from CardAuthor where CardNo in(Select CardNo from Card  where EndTime <= ::cEndTime))");
[解决办法]
我一般使用格式化字符串写:
C/C++ code
String sql=String().sprintf("select XX from Table where date>'%s' and data<'%s'",StartDate.c_str(),EndDate.c_str());ADOQuery->SQL->Text=sql;
[解决办法]
Access时间加#号的吧
EndTime <= #cEndTime#

热点排行