VF :SQLCONNECT("ODBC源",'USER','PASSWORD')
PB:
// Profile dda
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=dda;UID=dba;PWD=sql'"
如是PB建议用直连
ADO:
connstr = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=report"
'connstr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=kwanta;Data Source='" + VarString + "'"
Adodc1.ConnectionString = connstr
Adodc2.ConnectionString = connstr
PB:
// Profile dda
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=dda;UID=dba;PWD=sql'"
如是PB建议用直连
ADO:
connstr = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=report"
'connstr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=kwanta;Data Source='" + VarString + "'"
Adodc1.ConnectionString = connstr
Adodc2.ConnectionString = connstr
在Open的時候在字串里加上Prompt=false
还有一点:SQLCA.DBParm = "ConnectString='DSN=dda;UID=dba;PWD=sql'"
中,不要有多余的空格(比如在DSN前面有一个空格),否则,就又会出现了...
msdn如上提到:在open数据源的时候,如果提供了足够的参数,就可以不出现那个选择数据源的对话框。对这样的理解是否正确?
如果用ADO的话,参数设置正确不会出现对话框
Delphi则需要设置一下
还有待于俺再研究研究!谢谢!
-----------------------------------------------
Connectstring="DRIVER=SQL SERVER;SERVER=192.168.01.01;UID=user1;PWD=1234;DATABASE=yourdb"
以上是连接到一个sql数据库所必须的信息,如果信息不足或不正确,默认
情况下会弹出一个ODBC对话框提示填写这些信息,通常要保证以上各项连接
参数的正确性,避免这个对话框出现,因为对用户来说,他很可能并不知道
它的意思,会认为你的程序有bug.是否允许这个对话框出现,取决于客户端
的设置,参考N_chow(一劍飄香++)。
-----------------------------------------------
你的理解是正确的,但把意图弄反了。今天好象三千兄在。
virtual BOOL Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = “ODBC;”, BOOL bUseCursorLib = TRUE );
throw( CDBException, CMemoryException );Return ValueNonzero if the connection is successfully made; otherwise 0 if the user chooses Cancel when presented a dialog box asking for more connection information. In all other cases, the framework throws an exception.ParameterslpszDSNSpecifies a data source name — a name registered with ODBC through the ODBC Administrator program. If a DSN value is specified in lpszConnect (in the form “DSN=<data-source>”), it must not be specified again in lpszDSN. In this case, lpszDSN should be NULL. Otherwise, you can pass NULL if you want to present the user with a Data Source dialog box in which the user can select a data source. For further information, see Res.
CString DSN=tree.GetItemText(hChapter);
LPCTSTR ConnectString="ODBC;DSN;UID=Administrator;";
CDatabase Db;
Db.Open(DSN,FALSE,FALSE,ConnectString,TRUE);我的程序如上写法,在打开SQL Server数据源的时候就没有问题,可是打开Access、Excel和DBASE 数据文件的时候就出现“不能打开注册表关键字‘SOFTWARE\ODBC\ODBC.INI\Default”。驱动程序的SQLSetConnectAttr失败。
是不是连接串错误,如何改正?
谢谢!
Db.Open(DSN,FALSE,FALSE,ConnectString,TRUE);
改成:
Db.Open(DSN,1,FALSE,ConnectString,TRUE); //不出現ODBC對話框
或
Db.Open(DSN,2,FALSE,ConnectString,TRUE); //出現ODBC對話框另外,這一句好像也有問題,可以先試著把UID去掉。
LPCTSTR ConnectString="ODBC;DSN;" //UID=Administrator;";
或
Db.Open(DSN,2,FALSE,ConnectString,TRUE); //出現ODBC對話框 中的参数值1和2好像没有道理啊,因为第二个参数都是BOOL型的,那样只能保证他是真。另外,我试过了(将UID去掉,并且把参数改成1或者2),都只会出现一个debug错误的对话框,我就只有选择终止了。
1是代表dbDriverNoPrompt---即不出現ODBC提示框
2是代表dbDriverPrompt-----即出現在ODBC提示框。我再查查看。
在你的机器c:查找*.DSN文件,用记事本之类的文本编辑器打开它们,
你就明白对不同数据源的配置参数了,当然其中有些参数不是必须的。
如果某种数据源的.dsn文件不存在,你可以在控制面板的“ODBC数据源”根据
wizard提示配置一个。相信你在读完这些文件之后,就明白ODBC连接数据库的
奥妙所在了,当然这些ODBC驱动程序大多都已升级到 OLEDB PROVIDER方式了。
这些数据库连接方式通用于各种程序语言(少数对M$愤恨至极的除外)。
------------------------------------------------------------
mm很勤奋,VC++俺仅知些皮毛,还要多向你学习,有道是能者为师。
db.open "dsn=Dsnname","sa",""
LPCTSTR ConnectString="ODBC;DSN;UID=Administrator;";
CDatabase Db;
Db.Open(DSN,FALSE,FALSE,ConnectString,TRUE); //第一个参数是DSN的名字,必须已经在ODBC ADMIN中存在的,看看是否错了。
//如过在连接串指定DSN=,第一个参数可以传NULL。
在ODBC ADMIN中配一个ACCESS的DSN,把数据库名(路径\*.MDB)配上.
DSN=配置的DSN NAME
DB.OPEN(DSN);就OK了。
你也可以用OPENEX,其实OPEN中有调OPENEX。
你的做法
LPCTSTR ConnectString="ODBC;DSN;UID=Administrator;"; 改成
LPCTSTR ConnectString="ODBC;"也没问题,就是和用默认参数一样。
注: 1、树控件中的项目是使用SQLDataSources列出的已经建立好的数据源。
2、采用
LPCTSTR ConnectString="ODBC;DSN;UID=Administrator;"; 改成
LPCTSTR ConnectString="ODBC;"也没问题,就是和用默认参数一样。则不出现如上午所说的错误。而且对于每一种数据源,只要配置好,就没有问题。非常感谢各位的参与。谢谢你们!
^_^