查询D型数据的SQL的语句有什么不对的地方?

billfranck 2004-07-29 03:48:25
case 2:
{
DataModule1->HISTORYQuery1->SQL->Clear();
DataModule1->HISTORYQuery1->Close();
AnsiString queryString="SELECT * FROM HISTORY ";
queryString +=" WHERE LENDDATE= ";
queryString +="\"";
queryString +=StrToDate(DateToStr(FormatDateTime("yyyy-mm-dd", Now())));
queryString +="\"";

try
{
DataModule1->HISTORYQuery1->SQL->Add(queryString);
DataModule1->HISTORYQuery1->ExecSQL();
DataModule1->HISTORYQuery1->Active=true;
}
catch(EDBEngineError &E)
{
ShowMessage("不能查询此表");
return;
}
}
break;
...全文
82 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alpha1981 2004-07-31
  • 打赏
  • 举报
回复
case 2:
{
DataModule1->HISTORYQuery1->SQL->Clear();
DataModule1->HISTORYQuery1->Close();
AnsiString queryString="SELECT * FROM HISTORY ";
queryString +=" WHERE LENDDATE='";
queryString +=DateToStr(FormatDateTime("yyyy-mm-dd", Now()));
queryString +="'";

try
{
DataModule1->HISTORYQuery1->SQL->Add(queryString);
DataModule1->HISTORYQuery1->Open();
}
catch(EDBEngineError &E)
{
ShowMessage("不能查询此表");
return;
}
}
break;
这样绝对可以
我就是那样才成功的
CACACACACA 2004-07-30
  • 打赏
  • 举报
回复
DataModule1->HISTORYQuery1->ExecSQL();这句不要

如果不返回数据的话可以这样,如果返回数据,要用OPEN()或ACTIVE = TRUE;

日期用单引号括起来即可,不要用双引号



mxsoft2003 2004-07-30
  • 打赏
  • 举报
回复
如果数据库里字段类型为D型,就要在查的日期前加一个#号,如:WHER DATE BETWEEN #DATE1# AND #DATE2#
h98458 2004-07-30
  • 打赏
  • 举报
回复
2,为什么大家都说把DataModule1->HISTORYQuery1->ExecSQL(); 换成
DataModule1->HISTORYQuery1->Open();啊?
我以前都是先ExecSQL(),再 Active=true;,都没有问题啊
---------------------------------------------------------
你的SQL不是select语句
Lonelywolf1899 2004-07-30
  • 打赏
  • 举报
回复
1,先回答楼主的问题:DataModule1->HISTORYQuery1->SQL->Clear();
DataModule1->HISTORYQuery1->Close();//两句换位置
---------------------------------------------------------------------------
2,为什么大家都说把DataModule1->HISTORYQuery1->ExecSQL(); 换成
DataModule1->HISTORYQuery1->Open();啊?
我以前都是先ExecSQL(),再 Active=true;,都没有问题啊
futulove 2004-07-30
  • 打赏
  • 举报
回复
我想你这些语句以编译的时候都有问题吧?
queryString +="\"";多了一个"
queryString +=StrToDate(DateToStr(FormatDateTime("yyyy-mm-dd", Now())));To来To去的没用去。改成下面的试试
case 2:
{
DataModule1->HISTORYQuery1->Close();
DataModule1->HISTORYQuery1->SQL->Clear();
AnsiString queryString="SELECT * FROM HISTORY ";
queryString +=" WHERE LENDDATE= ";
queryString +=FormatDateTime("yyyy-mm-dd", Now());
try
{
DataModule1->HISTORYQuery1->SQL->Add(queryString);
DataModule1->HISTORYQuery1->Active=true;
}
catch(EDBEngineError &E)
{
ShowMessage("不能查询此表");
return;
}
}
break;
GaoLun 2004-07-29
  • 打赏
  • 举报
回复
你的SQL 语句 本身就有问题,
你用 ShowMessage(DataModule1->HISTORYQuery1->SQL->Text);
看看 你的SQL语句的全部


ExexSQL 执行的是 没有返回值的 语句 insert delete update 等等
而 Open 执行的是有 返回值的 语句 Select
h98458 2004-07-29
  • 打赏
  • 举报
回复
到底出现什么错误呢?你帖出来呀
还有调试错时最好不要用异常处理,要不然很难发现错误在什么地方的。你这样运行时无论发生什么错误都只会提示“不能查询此表”,你根本不知道SQL或数据库哪个地方设置有误。
还有建议:
DataModule1->HISTORYQuery1->SQL->Add(queryString);
DataModule1->HISTORYQuery1->ExecSQL();//删除这句,因为SELECT语是有返回值的,不能用ExecSQL()方法,而应该用Open()或Active=true;
可以这样写:DataModule1->HISTORYQuery1->Open();,然后再删除下面这句
DataModule1->HISTORYQuery1->Active=true;

GaoLun 2004-07-29
  • 打赏
  • 举报
回复

DataModule1->HISTORYQuery1->Close();
DataModule1->HISTORYQuery1->SQL->Clear();
上边两句换个顺序,成我这样

然后
DataModule1->HISTORYQuery1->ExecSQL();
改为:
DataModule1->HISTORYQuery1->Open();

删掉下边这句
DataModule1->HISTORYQuery1->Active=true;

试试看看

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧