如何用SQLConnect或者SQLDriverConnect 或者SQLBrowseConnect连接远程或者局域网的dsn(或者数据库)

freshman45 2009-02-13 02:28:06
我用ODBC API编写对access数据库的操作。
对于本地access的连接操作是没有问题的。
但要把access分步到服务器上,就没有办法连接上。
SQLConnect:中第二个参数ServerName :msdn说明说可以连接到网络上的其他计算机。但我没有办法实现:
连接本地的如下:
sqlRet = SQLConnect(m_hdbc,L"DBDEMO", SQL_NTS, 注明:DBDEMO是一个系统数据源,如果这样子写就不行L“DNS=DBDEMO”
NULL, SQL_NTS,
NULL, SQL_NTS);

而用SQLDriverConnect ,连接本地如下:
sqlRet = SQLDriverConnect(m_hdbc,
NULL,
(SQLTCHAR*)L"DSN=DBTEST;SERVER=10.100.142.76;UID=admin;PWD=;", //注:只有dsn这个起作用,其他的可以随便填,这是为什么?
SQL_NTS,
(SQLTCHAR*)szConnStrOut,
sizeof(szConnStrOut),
&pcbConnStrOut,
SQL_DRIVER_NOPROMPT);
请熟悉这块的帮帮忙!
...全文
1887 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiadong1125 2012-09-19
  • 打赏
  • 举报
回复
SQLConnect对你产生的疑惑我用个例子来告诉你好了,运行环境WindwosXP,VS6.0++ ,
我本机IP:192.168.30.62 我连接的是192.168.30.198机器上的MySQL数据库
#include "stdafx.h"

#include <iostream>

#include "windows.h"

#include "sqlext.h"

using namespace std;

int main(int argc, char* argv[])
{
SQLHENV henv;

SQLHDBC hdbc;

SQLRETURN retcode;

SQLCHAR ConnStrOut[256];

SQLSMALLINT ConnStrOutLen;

SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);

SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);

SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);

retcode = SQLConnect(hdbc,(SQLCHAR *)("MySqlODBC"),SQL_NTS,(SQLCHAR *)("root"),SQL_NTS,(SQLCHAR *)("xxj"),SQL_NTS);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{

cout << "ok" << endl;

cout << ConnStrOutLen << endl;

cout << ConnStrOut << endl;

}


return 0;
}

下来详解一下MySqlODBC来自哪里和作用:
1、如果要本机在连接其它电脑的MySql数据库,那么要先在本机上安装MySql的驱动,我装的是mysql驱动程序_mysql-connector-odbc-5.1.6-win32.msi。
2、安装完上述驱动后去“控制面版\管理工具\数据源 (ODBC)”面板的用户DNS标签页可以看到“MySQL ODBC 5.1 Driver”字样的驱动程序则表示驱动已经正确安装。
3、选中此驱动程序再点“配置”按钮,在弹出的界面中
Data Source Name:填入MySqlODBC ---这就是填入函数中第二个参数的值
Description: 可以为空不填
Server:填入192.168.30.98--因为我要连接192.168.30.98的数据库
Port:填入3306 --默认为3306
User:填入root --数据库的登录帐号
Password:填入 xxj --数据库的登录密码
Datagbase:上面的填对的话点那个下拉列表可以看到里边建立好的数据库,选一个你想直接登入的就行

以上信息填写完成后可以点击“Test”按钮测试一下。如果显示成功那你就真成功了,代码已经经过测试。




啤酒肚 2011-07-14
  • 打赏
  • 举报
回复
对于SQLDriverConnect函数中的第三个参数应该如何写不是很明白,希望这方面的高手可以介绍一下
  • 打赏
  • 举报
回复
我现在遇到了同样的问题,所以感觉很痛苦呢,而我的项目急用。我用SQLConnect函数的时候的第二个参数我输入的是“Alarm”,但是错误提示说不能将‘const char[6]’转化成‘SQLWCHAR *’不知道怎么回事 ??
freshman45 2009-03-18
  • 打赏
  • 举报
回复
改用sqlserver就ok了,谢谢各位
Terry717 2009-03-06
  • 打赏
  • 举报
回复
帮顶!
freshman45 2009-02-15
  • 打赏
  • 举报
回复
to:dawugui & zjcxx

这是msdn上看到的,上面有写着可以网络上的另外一个dsn。
SQLRETURN SQLConnect(
SQLHDBC ConnectionHandle,
SQLCHAR * ServerName,
SQLSMALLINT NameLength1,
SQLCHAR * UserName,
SQLSMALLINT NameLength2,
SQLCHAR * Authentication,
SQLSMALLINT NameLength3);
ServerName
[Input]
Data source name. The data might be located on the same computer as the program, or on another computer somewhere on a network.

文件的共享也只能在局域网上吧,internet上没有办法吧?
请两位帮忙下,是不是odbc api这套操作上有些讲究,
就是在连接处理上
zjcxc 2009-02-15
  • 打赏
  • 举报
回复
DSN不提供任何远程服务功能, 所以你不可能连接远程DSN

对于 access, 要远程访问只能使用共享文件的方式, 要不然你自己写服务
oraclelogan 2009-02-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 freshman45 的帖子:]
我用ODBC API编写对access数据库的操作。
对于本地access的连接操作是没有问题的。
但要把access分步到服务器上,就没有办法连接上。
SQLConnect:中第二个参数ServerName :msdn说明说可以连接到网络上的其他计算机。但我没有办法实现:
连接本地的如下:
sqlRet = SQLConnect(m_hdbc,L"DBDEMO", SQL_NTS, 注明:DBDEMO是一个系统数据源,如果这样子写就不行L“DNS=DBDEMO”
NULL, SQL_NTS,
NULL, SQL_NTS);


[/Quote]

关注下,学习了啊!
dawugui 2009-02-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zjcxc 的回复:]
DSN不提供任何远程服务功能, 所以你不可能连接远程DSN

对于 access, 要远程访问只能使用共享文件的方式, 要不然你自己写服务
[/Quote]
把文件直接共享即可,和DBF库一样.

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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