术语 | CRecordset::Open | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
释义 | CRecordset::Open virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none ); throw( CDBException, CMemoryException ); 返回值: 如果CRecordset对象被成功打开,则返回非零值;否则,如果CDatabase::Open(如果被调用了)返回0,则返回0。 参数:
说明: 你必须调用此成员函数来运行记录集定义的查询。在调用Open之前,你必须构造记录集对象。 此记录集与数据源的连接依赖于在调用Open之前你是如何构造这个记录集的。如果你将一个没有连接到一个数据源的CDatabase对象传递给记录集构造函数,此成员函数使用GetDefaultConnect来尝试打开该数据库对象。如果你将NULL传递给记录集构造函数,则此成员函数为你构造一个CDatabase对象,并且Open试图连接给数据库对象。有关关闭记录集和在这些不同的环境下的连接的细节,请参见Close。 注意: 通过一个CRecordset对象对数据源的访问总是被共享的。不像CDaoRecordset类,不能使用一个CRecordset对象来打开一个具有独占访问的数据源。 当你调用Open时,一条查询语句,通常是一条SQL SELECT语句,基于下表给出的标准来选择记录:
注意,在SQL字符串中,你不能插入额外的空格。例如,如果你在卷括号和CALL关键字之间插入了空格,MFC将错误地将这个SQL串解释为一个表名,并将它合并到SELECT语句中,这将导致抛出一个异常。 类似地,如果使用输出参数的预定义查询没有在卷括号和‘?’号之间插入空格,则也会导致抛出异常。最后,你不能在一个CALL语句中的卷括号之前和在一个SELECT语句中的SELECT关键字之前插入空格。 通常的程序是将NULL传递给Open;在这种情况下,Open调用GetDefaultSQL。如果你正在使用一个CRecordset派生类,GetDefaultSQL给出你在ClassWizard中指定的表名。你可以代替在lpszSQL参数中指定其它的信息。 不管传递的是什么,Open都为查询构造一个最后的SQL字符串(该字符串可能有SQL WHERE和ORDER BY子串添加在你传递的lpszSQL串中),然后执行这个查询。你可以在调用Open之后通过调用GetSQL来检查这个构造出来的字符串。 记录集类的字段数据成员与所选择数据的列相关联。如果有记录被返回,则第一个记录成为当前记录。 如果你想为记录集设置选项,比如一个过滤器或排序,则应在构造了此记录集对象之后,但在调用Open之前指定这些选项。如果你要在记录集被打开之后刷新记录集中的记录,可以调用Requery。 示例: 下面的代码例子说明了Open调用的不同形式。 // rs 是一个CRecordset或CRecordset派生对象 // 用缺省的SQL语句打开rs // 实现书签,并关闭自动脏数据检查 rs.Open( CRecordset::snapshot, NULL, CRecordset::useBookmarks | CRecordset::noDirtyFieldCheck ); // 传递一个完整的SELECT语句并打开作为一个动态集 rs.Open( CRecordset::dynaset, _T( "Select L_Name from Customer" ) ); // 接收所有的缺省值 rs.Open( ); 请参阅: CRecordset::CRecordset, CRecordset::Close, CRecordset::GetDefaultSQL, CRecordset::GetSQL, CRecordset::m_strFilter, CRecordset::m_strSort, CRecordset::Requery |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
随便看 |
|
MFC类库中文详解手册包含4274条MFC类库参考词条,基本涵盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容,是计算机编程的有利工具。