ADOQuery1->ExecSQL()与ADOQuery1->Open()

petiteturbo 2005-06-10 02:16:52
哪位好心人给我讲讲ADOQuery1->ExecSQL()与ADOQuery1->Open()的具体区别啊???
...全文
297 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
weill 2005-06-11
  • 打赏
  • 举报
回复
唉呀呀呀……这种问题也要问啊……
用脚指头想想也明白吖……
petiteturbo 2005-06-11
  • 打赏
  • 举报
回复
谢谢大家!学习了
  • 打赏
  • 举报
回复
ADOQuery1->ExecSQL()执行数据更新语句
insert
update
delete
ADOQuery1->Open()执行查询语句select
luobeyond 2005-06-10
  • 打赏
  • 举报
回复
sczyq的代码确实比较好
我也多了一点经验
我很高兴哦
第2次留言
发现留言比不留言要好
我发现你的代码改一下更加完善
你的代码
if (ADOQuery->SQL->Strings[0].SubString(1,6).UpperCase() == "SELECT")
这里可能会出现错误
把它改一下可能通用性更强
就是对前面空格的判断因为这样也是对的
" select * from......."







dddbryant 2005-06-10
  • 打赏
  • 举报
回复
同意楼上的
tsk 2005-06-10
  • 打赏
  • 举报
回复
返回结果集就是从数据库取到数据.暂存在缓存中,就把它当着暂存在ADOQuery中好了!!!
而不返回结果集,就是操作数据库,不读取数据,这样理解!

hunshihaichong 2005-06-10
  • 打赏
  • 举报
回复
To:luobeyond
我觉得你说的太简单了,虽然易懂
To: sunliwen780502
结果集是什么意思,我的SQL学得不好
谢谢
sunliwen780502 2005-06-10
  • 打赏
  • 举报
回复
ADOQuery1->ExecSQL()不返回结果集,主要是针对modify, insert,update, delete 等操作。
而ADOQuery1->Open(); 则返回届集,主要是执行查询操作。
sczyq 2005-06-10
  • 打赏
  • 举报
回复
关于三个通用通用的函数,其实没必要怎么复杂, ADOQuery->SQL 本身是TStrings 类型。
而从这里直接加入SQL语句,也更加容易读懂程序。主要是SQL语句出错的问题,因此,容错机制显得非常重要。

//---------------------------------------------------------------------------
bool __fastcall ExecSQLTry(TADOQuery *ADOQuery)
{
bool Succeeded = false;

if (ADOQuery->SQL->Count)
{
try
{
if (ADOQuery->SQL->Strings[0].SubString(1,6).UpperCase() == "SELECT")
ADOQuery->Open();
else ADOQuery->ExecSQL();
Succeeded = true;
}
catch ( Exception &E )
{
Succeeded = false;
RunTimeError(ADOQuery, E.Message // 异常处理函数,可用来显示或记录日志
+ "\n------------------------------\n"
+ ADOQuery->SQL->Text);
}
catch (...)
{
Succeeded = false;
RunTimeError(ADOQuery, ADOQuery->SQL->Text); // 出错处理
}
}
return Succeeded;
}
//---------------------------------------------------------------------------
luobeyond 2005-06-10
  • 打赏
  • 举报
回复
ADOQuery1->ExecSQL()执行数据更新语句
insert
update
delete
ADOQuery1->Open()执行查询语句select
luobeyond 2005-06-10
  • 打赏
  • 举报
回复
ADOQuery1->ExecSQL()执行数据更新语句
insert
update
delete
modify
上面所有的这些操作都是改变数据库的内容而不要返回结果
例如:
AnsiString sSql;
sSql = "insert into P_Contract_Tax values(1,'abc',3.7,"hello");
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(sSql);
Query1->ExecSQL();

ADOQuery1->Open()执行查询语句select
例如:
Ansistring sSql;
sSql=”select * from stu.dbf”
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(sSql);
Query1->Open();

下面是三个通用通用的函数,你写好后直接调用就好了:

执行数据更新语句
void __fastcall ExecuteSql(TADOQuery *Que,AnsiString sSQL)
{
if (Que->Active)
Que->Active=false;

if (Que->Filter!=""){Que->Filter="";}
if (Que->Filtered){Que->Filtered=false;}
Que->SQL->Clear();
Que->SQL->Add(sSQL);

Que->ExecSQL();

}
//---------------------------------------------------------------------------
void __fastcall ExecuteSql(TADOQuery *Que,TStringList *sSQL)
{
if (Que->Active)
Que->Active=false;

if (Que->Filter!=""){Que->Filter="";}
if (Que->Filtered){Que->Filtered=false;}
Que->SQL->Clear();
Que->SQL->Assign(sSQL);

Que->ExecSQL();
}
//---------------------------------------------------------------------------
//执行数据查询语句
void __fastcall ResultSql(TADOQuery *Que,AnsiString sSQL)//返回数据集
{
if (Que->Active) {Que->Active=FALSE;}
if (Que->Filter!=""){Que->Filter="";}
if (Que->Filtered){Que->Filtered=false;}
Que->SQL->Clear();
Que->SQL->Add(sSQL);
Que->ExecSQL();
try
{
Que->Active=true;
}
catch(...)
{
return;
}
}

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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