关于SQLConfigDataSource的服务器的参数设定

sandy_wu 2000-11-09 10:58:00
我要在程序中增加数据源,用
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "PostgreSQL",
"DSN=abc\0"
"Description=abcdef\0"
"Server=192.168.0.1\0"
"DataBase=mybase\0"
"ReadOnly=0\0"
"Port=5432\0");
是可以的,但server的ip是要由用户确定的,我如何调用SQLConfigDataSource?谢谢!
...全文
313 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wingsun 2000-11-21
  • 打赏
  • 举报
回复
我有一点看不懂你的意思,实际上在你调用ODBC的数据源的时候,你可以重新制定你的Server、Database、UserID以及PWD。你建立的数据源中的这些参数属于可以在运行是改变的参数,所以他的具体值无所谓的,你只要保证你在使用的时候传来的数据是对的就可以了。如你上面个建立的数据源,当你建立数据源的时候你的Server=192.168.0.1,可是你不能保证用户在以后的使用中不会改变Server的地址吧,难道每一个用户改变了Server的地址后你又重新的建立一个新的数据源吗?所以你没有必要确定这个值,你需要的是在程序运行是根据用户的实际情况来决定这个值等于多少。好了,我也有一段相关的程序,不过不涉及到版权的问题,因为是我自己写的,不过好像他的方法比我的好.
char Attr[1024];
char Dsn[]="DSN=Standard";
char Server[]="SERVER=";
char Database[]="DATABASE=Standard";
int iPos=0;
int i=0;
for(i=0;i<strlen(Dsn);i++)
{
Attr[iPos+i]=Dsn[i];
}
Attr[iPos+i]='\0';
i++;
iPos+=i;
for(i=0;i<strlen(Server);i++)
{
Attr[iPos+i]=Server[i];
}
iPos+=i;
i++;
for(i=0;i<EdtServerName->Text.Length();i++)
{
Attr[iPos+i]=EdtServerName->Text[i+1];
}
Attr[iPos+i]='\0';
i++;
iPos+=i;
for(i=0;i<strlen(Database);i++)
{
Attr[iPos+i]=Database[i];
}
Attr[iPos+i]='\0';
i++;
Attr[iPos+i]='\0';
SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"SQL Server\0",Attr);
其他的方面,上面的这位兄弟已经指出来了。
RedFire 2000-11-21
  • 打赏
  • 举报
回复
好了,我改了别人的一个例子。就是加了一个传送IP的功能。呵呵,以后有版权问题的时候,不要说是我改的。
对了,说到"\0",调用这个函数的时候,最后一个应该是"\0\0",你的帖子上有点错误。

代码如下,说的就是一个意思,就是要你自己去拼字符串。不知道有没有更好的办法。
/*
If you want to create the DSN depending on the user input then you
will need to follow the below procedure. To hardcode it you could just pass
"DSN=TestDB\0DBQ=D:\\Database\\Friends.mdb\0DEFAULTDIR=D:\\DATABASE\0\0" as the
third parameter
*/
char* szDesc;
int mlen;
szDesc=new char[256];

int IP1 = 192;
int IP2 = 168;
int IP3 = 0;
int IP4 = 1;

sprintf(szDesc,"DSN=%s: DESCRIPTION=TOC support source: DBQ=%s: FIL=MicrosoftAccess: Server=%d.%d.%d.%d: DEFAULTDIR=D:\\Database:: ","TestDB","D:\\Friends.mdb",IP1,IP2,IP3,IP4);
MessageBox(hwnd, szDesc, "hehe", MB_OK);
mlen = strlen(szDesc);
for (int i=0; i<mlen; i++)
{
if (szDesc[i] == ':')
szDesc[i] = '\0';
}

if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))
MessageBox(hwnd,"Failed","INFORMATION",MB_OK);
else
MessageBox(hwnd,"Sucess","INFORMATION",MB_OK);

break;
}
break;
sandy_wu 2000-11-21
  • 打赏
  • 举报
回复
请问如何将ip通过变量的形式传给SQLConfigDataSource()?
RedFire 2000-11-21
  • 打赏
  • 举报
回复
"\0"不是什么意思。它就是调用这个函数所特殊要求的,是参数之间的分隔符。
sandy_wu 2000-11-21
  • 打赏
  • 举报
回复
有人吗?
sandy_wu 2000-11-21
  • 打赏
  • 举报
回复
谢谢redfire,谢谢wingsun
sandy_wu 2000-11-15
  • 打赏
  • 举报
回复
我想要的效果是:server的ip是要由用户在我的程序中设定,而不是去到control pannel、odbc中去设定一大堆东西。
sandy_wu 2000-11-15
  • 打赏
  • 举报
回复
RedFire兄:在下实在羞愧,我就是不知道如何将ip通过变量的形式传给SQLConfigDataSource(),
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "PostgreSQL",
"DSN=abc\0"
"Description=abcdef\0"
"Server=192.168.0.1\0"
"DataBase=mybase\0"
"ReadOnly=0\0"
"Port=5432\0");
'\0'是什么意思?
请阁下赐教,万分感激!
RedFire 2000-11-15
  • 打赏
  • 举报
回复
呵呵。我更加的不明白了。你在程序中调用的这个函数,你当然可以在程序中设定这个ip了。

不过,不知道你知不知道。在windows的目录下面有一个hosts文件。你看一看就明白它是干什么用的了。
RedFire 2000-11-14
  • 打赏
  • 举报
回复
你想要什么样的效果呢?不明白。
sandy_wu 2000-11-14
  • 打赏
  • 举报
回复
有谁能回答我?再加50分
sandy_wu 2000-11-10
  • 打赏
  • 举报
回复
\0是什么意思?
sandy_wu 2000-11-10
  • 打赏
  • 举报
回复
难道没有人用过此函数吗?
sandy_wu 2000-11-10
  • 打赏
  • 举报
回复
大虾门哪里去了?
wjf 2000-11-09
  • 打赏
  • 举报
回复
事先弹出一个对话框询问用户。
sandy_wu 2000-11-09
  • 打赏
  • 举报
回复
大虾门哪里去了?
sandy_wu 2000-11-09
  • 打赏
  • 举报
回复
to wjf:
这种方法不好,谢谢!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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