SQL Server数据库连接问题

wenyongjie 2003-07-30 10:25:18
我做了一个SQL Server数据库连接的DLL,编译通过生成DLL文件,在.exe工程文件调用时出错,大概是溢出,但我直接做成函数调用是可以的,请问是什么意思?错误代码:
Project Project1.exe raised exception class EAccessViolation with message'Access violation at address 004118cc in module 'DATABASEDLL.DLL'.Read of address FFFFFFFF'.Process stopped.Use Step or Run to continue.
DLL文件:
#include <vcl.h>
#include <windows.h>
#include "FormUnit.h"//Form2窗口
#pragma hdrstop
extern "C" __declspec(dllexport) void LinkDatabase(WideString Pwd,WideString UserID,WideString Database,WideString Server); //数据库连接
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
/*
UserID:登录SQL Server用户名, Database:SQL Server数据库名
Server:SQL Server数据库所在的服务器名称 Pwd:登录数据库密码
*/
void LinkDatabase(WideString Pwd,WideString UserID,WideString Database,WideString Server)
{ WideString Link="Provider=SQLOLEDB.1;Password="+Pwd+";Persist Security Info=False;User ID="+UserID+";Initial Catalog="+Database+";Data Source="+Server;
if(Form2->ADOConnection1->Connected==false) //如果没有连接到SQL Server
{ try
{
Form2->ADOConnection1->ConnectionString=Link;
Form2->ADOConnection1->LoginPrompt=true;
Form2->ADOConnection1->Connected=true;
}
catch(...)
{
ShowMessage("数据库连接失败,请联系管理员");
}
}
}
//--------------------------------------------------------------------------------
静态调用:
extern "C" __declspec(dllexport) void LinkDatabase(WideString Pwd,WideString UserID,WideString Database,WideString Server);//声明
void __fastcall TForm1::FormCreate(TObject *Sender)
{
WideString Pwd="",UserID="sa",Database="test",Server="my1";
LinkDatabase(Pwd,UserID,Database,Server);
}
//---------------------------------------------------------------------------
...全文
56 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenyongjie 2003-07-30
  • 打赏
  • 举报
回复
楼上的能说详细点吗?
he_Fly 2003-07-30
  • 打赏
  • 举报
回复
你DLL库中FORM2没有创建,你把ADO控件放在上面调用,它不报错才怪了。。。:)
你最好用TDataModule做ADO控件的容器,装入是时创建。
hong123456 2003-07-30
  • 打赏
  • 举报
回复
你可能是FROM2的所有文件保存的位置和From1的位置不同。请所有的文件一起放在同一个目录下试试看。
wenyongjie 2003-07-30
  • 打赏
  • 举报
回复
he_Fly(裸奔中的思考者):不好意思,您别晕,我按您的去做又出现如下错误提示:
An exception(OEEDFADE) occurred during DllEntrypoint or DllMain in module:
c:\Databasedll.dll(我的dll路径),这次是我晕了,
he_Fly 2003-07-30
  • 打赏
  • 举报
回复
晕~~~当你DLL装入时,你FORM2是没有创建的,但你在LinkDatabase中引用该变量,事实上这个FORM2是不存在的,所以会报指针错。
建议你可以用TDATAMODULE做这容器,也就是说把AdoConnection放在这个容器里,在DllEntryPoint函数中创建它,例如:
switch(reason){
DLL_PROCESS_ATTACH:
DM=new TDM(NULL);
break;
case DLL_PROCESS_DETACH:
delete DM;
break;
}

//-------------------------------------------
/*
UserID:登录SQL Server用户名, Database:SQL Server数据库名
Server:SQL Server数据库所在的服务器名称 Pwd:登录数据库密码
*/
void LinkDatabase(WideString Pwd,WideString UserID,WideString Database,WideString Server)
{ WideString Link="Provider=SQLOLEDB.1;Password="+Pwd+";Persist Security Info=False;User ID="+UserID+";Initial Catalog="+Database+";Data Source="+Server;
if(DM->ADOConnection1->Connected==false) //如果没有连接到SQL Server
{ try
{
DM->ADOConnection1->ConnectionString=Link;
DM->ADOConnection1->LoginPrompt=true;
DM->ADOConnection1->Connected=true;
}
catch(...)
{
ShowMessage("数据库连接失败,请联系管理员");
}
}
}

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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