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

CB的数据库组件ADOQuery的有关问题

2013-12-05 
CB的数据库组件ADOQuery的问题?ADOQuery什么时候用Open(),什么时候用ExecSQL(),什么时候需要Close()呢?如

CB的数据库组件ADOQuery的问题?
ADOQuery什么时候用Open(),什么时候用ExecSQL(),什么时候需要Close()呢?
如果查询结果显示在一个DBGrid中,选中其中的一条记录要删除,如何定位这条记录呢?比如记录的主键是xh(学号)。
[解决办法]
ExecSQL用于不返回结果集的SQL语句,像含有Insert、Update、DELETE、INTO等关键字的SQL语句使用ExecSQL方法;
Open用于返回结果集的SQL语句,如SELECT等关键字使用Open方法。

Close在你重置ADOQuery控件的内容或状态时最好使用,某些情况下看似不使用也可以,但极有可能特定时候出错
[解决办法]
如果直接选中了DBGrid中的行,那么有两种方法删除这条记录,

一种是热键和控件法,DBGrid控件默认有删除记录的热键,关联有DBNavigator控件的话DBNavigator上有删除按钮

另一种是代码法:ADOQuery1->Delete();
[解决办法]
Delete是删除了数据库记录,当前DBGrid也跟着刷新了
[解决办法]

引用:
Quote: 引用:

如果直接选中了DBGrid中的行,那么有两种方法删除这条记录,

一种是热键和控件法,DBGrid控件默认有删除记录的热键,关联有DBNavigator控件的话DBNavigator上有删除按钮

另一种是代码法:ADOQuery1->Delete();

DBGrid选中的行,是不是ADOQuery1->FieldValues[]就是它呢?
ADOQuery1->Delete()是删除数据库记录,还是更新了DBGrid?


FieldValues操作的是当前行记录的指定列,不是用来选中指定行的,用代码直接定位到指定行比较的麻烦
[解决办法]
ADOQuery1->First(); // 首条

ADOQuery1->Next(); // 下条
[解决办法]
引用:
比如有个for循环,代码如何定位到每一行?

for (ADOQuery1->First(); !ADOQuery1->Eof; ADOQuery1->Next())
{
// ...
// ...
// ...
}

[解决办法]
引用:
多谢!如果我在DBGrid选择了连续或者不连续的2行,ADOQuery1如何取这2行呢?

不客氣啦~ 
先將 DBGrid1 的 Options 
[解决办法]
 dgMultiSelect 設為 True...以 [Ctrl]+[鼠標左鍵] 不連續多選或是以 [Shift] + [上鍵] 或 [Shift] + [下鍵] 連續多選後...再以下面代碼處理...... 
TDataSet* ds = DBGrid1->DataSource->DataSet;

for (int i = 0; i < DBGrid1->SelectedRows->Count; i++)
{
ds->GotoBookmark(DBGrid1->SelectedRows->Items[i]);
// ...
// ...
// ...
}

热点排行