CDaoDatabase::Open

virtual void Open( LPCTSTR lpszName, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = _T(""));
  throw( CDaoException, CMemoryException );

参数:
lpszName指定Microsoft Jet数据库文件名的字符串。如果该文件带有扩展名,也需要写上。如果用户的网络支持唯一命名约定(UNC),则也可以使用网络路径,例如“\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB”(文件路径表达式中要采用双反斜杠“\\”,因为反斜杠“\”是C++中的控制符)。
使用lpszName时有些需要注意的地方:
·如果指定的数据库文件已经被其它用户独占使用,则MFC会产生一个CDaoException类型的异常。可以捕获该异常以通知用户该数据库不可用。
·如果指定的是一个空串(“”),并且lpszConnect是“ODBC”,则会显示一个对话框,列出所有注册的ODBC数据源的名字,用户可以在列表中选择一个数据源。编程时最好避免直接地连接数据源,而采用关联表。要了解更详细的信息,请参阅联机文档“Visual C++程序员指南”中的“DAO 扩展: 使用外部数据源”
·如果参考的数据库不存在或者ODBC数据源无效,MFC会产生一个CDaoException类型的异常。
注意:
DAO的错误代码,请参阅头文件DAOERR.H。相关的文档有DAO帮助中的“可捕获的数据访问错误”

bExclusive一个布尔值,独占打开数据库时设置为TRUE,否则设置为FALSE(共享打开)。该参数未设置时,默认为共享打开方式。
bReadOnly一个布尔值。如果以只读方式打开数据库,则设置为TRUE,否则设置为FALSE(以读/写方式打开)。未设置该参数时,数据库以读/写方式打开。所有相关的记录集继承这个设置。
lpszConnect用于打开数据库的字符串。该字符串构成了ODBC连接的参数。必须指定独占的和只读参数以提供源字符串。相关语法,请参阅DAO帮助中的“Connect 特性”。如果待连接的数据库是一个Microsoft Jet数据库(.MDB),这个串为空(“”)。缺省值的语法_T(“”)同时提供了对Unicode和ANSI字符集的支持。

说明:
必须调用本函数对一个代表某个现存数据库的CDatabase对象进行初始化。它建立数据库和其下的DAO对象的联系。在初始化数据库对象之前是不能用它来构造记录集、表定义或查询对象的。本函数会把数据库对象添加到相关工作区的Databases集合中。
使用参数应该注意的地方:
·如果要打开的是一个Microsoft Jet数据库,用lpszName指定数据库文件的名字,lpszConnect只需传一个空串或者用户口令(格式为“;PWD=password”,仅当数据库设置了口令才行,并且只用于MDB数据库)。
·如果待打开的是一个ODBC数据源,需要在lpszConnect中传送一个有效的ODBC连接串,而把lpszName设为空串。 相关信息,请参阅DAO帮助中的“OpenDatabse方法”
重点:
为了提高存取外部数据源(包括ISAM和ODBC数据源)的效率,建议使外部数据源与一个Microsoft Jet数相关联,而不要直接连接到数据源。
连接的申请可能会超时,例如DBMS主机不可用了。在连接失败时,MFC会产生一个CDaoException类型的异常。
下面的说明仅适用于ODBC数据源:
如果连接的是一个ODBC数据源,而Open调用却没有连接所需的足够的信息,ODBC驱动程序会打开一个对话框,由用户选择数据源并提供相关的参数信息。在调用Open时,连接串lpszConnect是作为私有变量存储的,可以调用函数GetConnect取得。
也可以在调用Open之前打开一个自己的对话框从用户那里得到连接参数,例如口令等。然后把得到的信息加到连接串中传给Open。也可以保存连接串(例如把它保存到Windows注册文件中),在下一次调用Open时就可以重用它了。
连接串也可用于多层次的登录授权(每一层次的登录对应于一个CDatabase对象),或转换与其它数据库相关的信息。
要了解有关连接串的信息,请参阅DAO帮助中的“Connect 特性”。

请参阅:CDatabase::CDatabase, CDatabase::Close