数据库操作问题
- 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#