菜鸟求救!

mishu 2004-03-25 04:57:56
我设置数据源,用SQLConfigDataSource(NULL,ODBC_ADD_DSN,_T("SQL SERVER"),a)。其中a是一字符串变量,如果不是UNICODE工程,就没有问题了。可是采用UNICODE工程,怎么修改才能通过编译啊?希望各位大侠指点迷津。
...全文
129 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
mishu 2004-04-23
  • 打赏
  • 举报
回复
cy214threadx:
还有你的GetPrivateProfileString函数为什么会有六个参数, path是哪儿来的?
DSN,Server,DB我是读取网络上的,所以有path了。这个函数没有问题,DSN,Server,DB我都获得了。我想和它是没有问题的吧?有什么高见?
showjancn 2004-04-09
  • 打赏
  • 举报
回复
补充一点:
CString类它本身就支持UNICODE
可使有 宏_T来操作。
例:CStrign str;
str = _T("....")
showjancn 2004-04-09
  • 打赏
  • 举报
回复
首先推荐吏用TCHAR(通用字符类型)。当定义了_UNICODE宏时,TCHAR就是WCHAR,当没定义这个宏的时候,tchar就是char。

所以你要适用UNICODE可加上宏#define _UNICODE

当然也可能通过函数来转换。
WideCharToMultiByte()和MultByteToWideChar()
cy214 2004-04-09
  • 打赏
  • 举报
回复
既然你说直接在函数里写字符串没事,那就在wcscpy(a, ss);以后设置断点, 看看a地址的内存实际内容, 是不是标准unicode.
还有你的GetPrivateProfileString函数为什么会有六个参数, path是哪儿来的?
mishu 2004-04-09
  • 打赏
  • 举报
回复
cy214(threadx:我在project settings中preprocessor definition里加了UNICODE,_UNICODE这是没有问题的。
mishu 2004-04-09
  • 打赏
  • 举报
回复
下面是我的代码:
CString m_DB;
CString m_Server;
CString m_DSN;
TCHAR tszBufferServer[100];
GetPrivateProfileString(_T("Data Config"),_T("Server"),_T(""),tszBufferServer,20,path);
m_Server = tszBufferServer;
UpdateData(FALSE);
TCHAR tszBufferDB[100];
GetPrivateProfileString(_T("Data Config"),_T("DataBase"),_T(""),tszBufferDB,20,path);
m_DB = tszBufferDB;
UpdateData(FALSE);
TCHAR tszBufferDSN[100];
GetPrivateProfileString(_T("Data Config"),_T("DSN"),_T(""),tszBufferDSN,20,path);
m_DSN = tszBufferDSN;
UpdateData(FALSE);

CString ss,sDSN=_T("DSN="),sServer=_T("SERVER="),sDataBase=_T("DATABASE=");
sDSN=sDSN+m_DSN;
sDSN += "\\0";

sServer=sServer+m_Server;
sServer += "\\0";
sDataBase=sDataBase+m_DB;
sDataBase += "\\0\\0";
ss=sDSN+sServer+sDataBase;//其中ss已读出是"DSN=Try2DSN\0Server=Whd\0Database=xsxl\0\0";

TCHAR a[300] ;
wcscpy(a,ss);
BOOL r = ::SQLConfigDataSourceW(NULL, ODBC_ADD_DSN,
_T("SQL Server\0"),a );

if(r)
AfxMessageBox(_T("ok"));

哪出错了?
cy214 2004-04-02
  • 打赏
  • 举报
回复
上面没说清楚 改一下:

两个宏(分别支持crt和win32sdk) 并且在所有#include前面.
引用了tchar.h(include).
cy214 2004-04-02
  • 打赏
  • 举报
回复
unicode编译时确定一下: 定义了
#define UNICODE
#define _UNICODE
两个宏(分别支持crt和win32sdk) 并且在所有#include前面, 引用了tchar.h(include). odbc那些头文件和库你应该都添加了
定义a的时候用TCHAR
TCHAR a[256];
然后GetPrivateProfile.....给a赋值
我用msdn的例子改了一下试了unicode编译下没问题,可以添加data source
实在还不行你debug一下, 看看GetPrivateProfile以后a地址内的东西, 还有odbc那个config函数的返回值
下面是刚才试的代码 (刚才看msdn的时候还发现一个sqlunicode.h 不过好像和这个config函数没什么关系..)
#define UNICODE
#define _UNICODE

#include <Windows.h>
#include <tchar.h>
#include <odbcinst.h>
#include <sql.h>

int main(int argc, char* argv[])
{
RETCODE retcode;

TCHAR *szDriver = _TEXT("SQL Server");
TCHAR *szAttributes =
_T("DSN=TestDSN\0Server=SQL SERVER\0DataBase=xsxl\0\0");

retcode = SQLConfigDataSource(NULL,
ODBC_ADD_DSN,
szDriver,
szAttributes);
}#define UNICODE
#define _UNICODE

#include <tchar.h>
#include <Windows.h>
#include <odbcinst.h>
#include <sql.h>

void main(int argc, char* argv[])
{
RETCODE retcode;

TCHAR *szDriver = _TEXT("SQL Server");
TCHAR *szAttributes =
_T("DSN=TestDSN\0Server=SQL SERVER\0DataBase=xsxl\0\0");

retcode = SQLConfigDataSource(NULL,
ODBC_ADD_DSN,
szDriver,
szAttributes);
}

zhucde 2004-04-02
  • 打赏
  • 举报
回复
char* szDesc;
int mlen;
szDesc=new char[256];
sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","LawInfo","c:\\aa","c:\\");

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))
AfxMessageBox("SQLConfigDataSource Failed");
快乐鹦鹉 2004-04-02
  • 打赏
  • 举报
回复
我知道楼主很着急,我也很想帮助你。可是我对数据库编程不是很了解。不如你给数据库小板块的版主发短信求助吧。真的很抱歉啊。能力不够。
mishu 2004-04-02
  • 打赏
  • 举报
回复

SQLConfigDataSourceW(NULL,ODBC_ADD_DSN,_T("SQL SERVER"),a);其中a=_T("DSN=TestDSN\0Server=SQL SERVER\0DataBase=xsxl\0\0"),如果在函数中直接写字符串就可以成功设置数据源了,但是a是一个变量,通过GetPrivateProfile来获得的,所以函数中只能用变量a来表示,但是这样就不能成功设置数据源了。有哪位高手指点指点啊!期盼!
mishu 2004-04-02
  • 打赏
  • 举报
回复
不是编译错误,可以执行,但是在管理工具里没看到数据源连接上。
weixxxp 2004-04-01
  • 打赏
  • 举报
回复
把错误信息贴出来看看!
weixxxp 2004-04-01
  • 打赏
  • 举报
回复
是编译错误还是链接错误?要是链接错误的话那就是没有unicode的DLL,VC缺省是不安装unicode库的。
mishu 2004-03-31
  • 打赏
  • 举报
回复
weixxxp:按你说的做了,可是还不行啊,到底差哪呢?
weixxxp 2004-03-28
  • 打赏
  • 举报
回复
a申明成TCHAR类型,即
TCHAR a[256];
CSDNXX 2004-03-26
  • 打赏
  • 举报
回复
UP
mishu 2004-03-26
  • 打赏
  • 举报
回复
谢谢 zhaolaoxin() 的捧场。
对a的赋值也采用_T()方式。我就是那样做的啊,可是最后还是不行啊,还差哪呢?
期待!
zhaolaoxin 2004-03-26
  • 打赏
  • 举报
回复
对a的赋值也采用_T()方式
mishu 2004-03-26
  • 打赏
  • 举报
回复
???
加载更多回复(1)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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