怎样实现动态连接数据库(access)
我要的是有设置路径
在程序运行时查找(access)库
15 个解决方案
#1
最快的办法就是在程序中利用adoconnetion的属性直接连接数据库的
然后把这些字符串拷贝出来分析的
修改数据库的名称 密码等信息
修改后动态的赋值给adoconnetionstring属性
最后connected设置为true就是可以的了
然后把这些字符串拷贝出来分析的
修改数据库的名称 密码等信息
修改后动态的赋值给adoconnetionstring属性
最后connected设置为true就是可以的了
#2
转帖:
procedure TfrmMain.ConnectDB;
var
ConnStr,DBPath:String; //保存连接字符串和数据库路径
begin
{ExtractFilePath函数从一个完整的文件名中分离出路径,以'\'结束,
Application.ExeName得到程序执行文件本身的文件名,
这里要求数据库文件(UserInfo.mdb)必须放在程序同一个目录,
否则就连接不上了,呵呵!}
try
DBPath:=ExtractFilePath(Application.ExeName)+'UserInfo.mdb';
ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
DBPath+';Persist Security Info=False';
ADOConnection1.Close; //要改变它的属性前要关闭连接!
ADOConnection1.ConnectionString:=ConnStr; //指定连接串
ADOconnection1.LoginPrompt:=False; //不显示默认的登录对话框
ADOConnection1.Open //打开连接
except
on E:Exception do
begin
ShowMessage('出错!'+e.Message); //显示出错信息
frmMain.Close; //退出程序算了,数据库都连不上还有什么用!^_^
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
ConnectDB; //连接数据库
end;
procedure TfrmMain.ConnectDB;
var
ConnStr,DBPath:String; //保存连接字符串和数据库路径
begin
{ExtractFilePath函数从一个完整的文件名中分离出路径,以'\'结束,
Application.ExeName得到程序执行文件本身的文件名,
这里要求数据库文件(UserInfo.mdb)必须放在程序同一个目录,
否则就连接不上了,呵呵!}
try
DBPath:=ExtractFilePath(Application.ExeName)+'UserInfo.mdb';
ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
DBPath+';Persist Security Info=False';
ADOConnection1.Close; //要改变它的属性前要关闭连接!
ADOConnection1.ConnectionString:=ConnStr; //指定连接串
ADOconnection1.LoginPrompt:=False; //不显示默认的登录对话框
ADOConnection1.Open //打开连接
except
on E:Exception do
begin
ShowMessage('出错!'+e.Message); //显示出错信息
frmMain.Close; //退出程序算了,数据库都连不上还有什么用!^_^
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
ConnectDB; //连接数据库
end;
#3
在程序中的连接字符串中写下数据库的相对路径
#4
我要有设置路径的ado
#5
如果是采用本地的ACCESS,应该在ODBC库中设置系统DNS,那里可以设置ACCESS的路径。
#6
with AdoConnection1 do
begin
Connected:=false;
Connectionstring := '';
ConnectionString :=' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= '
+ DataBaseName
+ ' ;Data Source='
+ ServerName;
Connected := true;
end;
Databasename是你的数据库名称
Servername是你的服务器名称
begin
Connected:=false;
Connectionstring := '';
ConnectionString :=' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= '
+ DataBaseName
+ ' ;Data Source='
+ ServerName;
Connected := true;
end;
Databasename是你的数据库名称
Servername是你的服务器名称
#7
这是连接Sql server2000的
连接Access的是
Path:=ExtractFilePath(ParamStr(0));
if not FileExists(Path+'Data\Pack.Dll') then
begin
Msg:='数据库文件"Pack.Dll"没有找到!'+#10#13+
'请查找到该文件以"Pack.Dll"为文件名放置到目录:'+#10#13+
Path+'Data\ 中。';
Application.MessageBox(Pchar(Msg),'错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
AdoCon.Connected:=False;
ConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'Data\Pack.Dll;Persist Security Info=True';
AdoCon.ConnectionString:=ConStr;
try
AdoCon.Connected:=True;
except
Application.MessageBox('数据库连接错误,请重试!','错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
连接Access的是
Path:=ExtractFilePath(ParamStr(0));
if not FileExists(Path+'Data\Pack.Dll') then
begin
Msg:='数据库文件"Pack.Dll"没有找到!'+#10#13+
'请查找到该文件以"Pack.Dll"为文件名放置到目录:'+#10#13+
Path+'Data\ 中。';
Application.MessageBox(Pchar(Msg),'错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
AdoCon.Connected:=False;
ConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'Data\Pack.Dll;Persist Security Info=True';
AdoCon.ConnectionString:=ConStr;
try
AdoCon.Connected:=True;
except
Application.MessageBox('数据库连接错误,请重试!','错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
#8
悔恨..恨........................
来晚了.............
来晚了.............
#9
sigh..
来晚了就是晚了..
进最后的努力吧...
上面的代码是正确的..
我只能给你写思路..
首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...
来晚了就是晚了..
进最后的努力吧...
上面的代码是正确的..
我只能给你写思路..
首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...
#10
简单
procedure TfrmMain.ADOConnection1BeforeConnect(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ stFileName.Caption + ';Persist Security Info=False';
end;
procedure TfrmMain.ADOConnection1BeforeConnect(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ stFileName.Caption + ';Persist Security Info=False';
end;
#11
procedure TfrmLogin.FormCreate(Sender: TObject);
begin
if fileexists(extractfilepath(application.exename)+'yh.mdb') then
begin
//连接数据库字串
connstr:='Provider=Microsoft.Jet.OLEDB.4.0;data Source='+extractfilepath(application.exename)+'yh.mdb';
//建立Connection
conn:=CreateOleObject('ADODB.Connection');
//打开连接
conn.open(connstr);
rs:=CreateOleObject('ADODB.Recordset');
rs.open('select * from tuser order by userid',conn,1,1);
还可以动态创建一个Q控件,再连,
begin
if fileexists(extractfilepath(application.exename)+'yh.mdb') then
begin
//连接数据库字串
connstr:='Provider=Microsoft.Jet.OLEDB.4.0;data Source='+extractfilepath(application.exename)+'yh.mdb';
//建立Connection
conn:=CreateOleObject('ADODB.Connection');
//打开连接
conn.open(connstr);
rs:=CreateOleObject('ADODB.Recordset');
rs.open('select * from tuser order by userid',conn,1,1);
还可以动态创建一个Q控件,再连,
#12
这个我做过:
getdir(0,path) ;
g_path:=path+'\db1.mdb';
ADOConnection1.close;
ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+g_path+''';Persist Security Info=False';
ADOConnection1.Open ;
ADOConnection1.Connected :=true;
getdir(0,path) ;
g_path:=path+'\db1.mdb';
ADOConnection1.close;
ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+g_path+''';Persist Security Info=False';
ADOConnection1.Open ;
ADOConnection1.Connected :=true;
#13
楼主啊,这么多的热心人都在帮你,你还没做好吗,
我来晚了,就不再说了,上面的代码都很不错的。
我来晚了,就不再说了,上面的代码都很不错的。
#14
别提,偶来得更晚,看到那么多方法
相信楼主应该做好了
相信楼主应该做好了
#15
动态连接用上面的方法都可以,
但是有一种情说,说是不用 Microsoft.Jet.OLEDB.4.0 时,你怎么办?
即你要用不同的数据库引擎时怎么办?
有以下的方法可以很好的实现,
原理:
在我们连数据库时,系统会有一个向导,可以选择数据库引擎,数据库。
我们也可以用他的方法,从VCL 库中我们知道,在连接时,他会调用一个方法:PromptDataSource,该方法要求有一个窗口句柄。
我们也可以用它的方法:
实现如下:
必须要包含单元:ADOConEd,IniFiles
代码:
procedure TfrmMain.FormCreate(Sender: TObject);
var
ConnectString: String;
ConfigFile: TIniFile;
begin
ConfigFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
If Not FileExists(ExtractFilePath(Application.ExeName) + 'Config.ini') Then
Begin
ShowMessage('数据库没有连接,请先连接数据库');
ConnectString := PromptDataSource(Handle, ConnectString);
ConfigFile.WriteString('ConnectString', 'CurConnectString', ConnectString);
End
Else
Begin
ConnectString := ConfigFile.ReadString('ConnectString', 'CurConnectString', '');
End;
frmDM.ADOConnection1.ConnectionString := ConnectString;
Try
frmDM.ADOConnection1.Open;
Except
ShowMessage('数据库连接错误,请检查配置文件 Config.ini !');
DeleteFile(ExtractFilePath(Application.ExeName) + 'Config.ini');
Application.Terminate;
End;
但是有一种情说,说是不用 Microsoft.Jet.OLEDB.4.0 时,你怎么办?
即你要用不同的数据库引擎时怎么办?
有以下的方法可以很好的实现,
原理:
在我们连数据库时,系统会有一个向导,可以选择数据库引擎,数据库。
我们也可以用他的方法,从VCL 库中我们知道,在连接时,他会调用一个方法:PromptDataSource,该方法要求有一个窗口句柄。
我们也可以用它的方法:
实现如下:
必须要包含单元:ADOConEd,IniFiles
代码:
procedure TfrmMain.FormCreate(Sender: TObject);
var
ConnectString: String;
ConfigFile: TIniFile;
begin
ConfigFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
If Not FileExists(ExtractFilePath(Application.ExeName) + 'Config.ini') Then
Begin
ShowMessage('数据库没有连接,请先连接数据库');
ConnectString := PromptDataSource(Handle, ConnectString);
ConfigFile.WriteString('ConnectString', 'CurConnectString', ConnectString);
End
Else
Begin
ConnectString := ConfigFile.ReadString('ConnectString', 'CurConnectString', '');
End;
frmDM.ADOConnection1.ConnectionString := ConnectString;
Try
frmDM.ADOConnection1.Open;
Except
ShowMessage('数据库连接错误,请检查配置文件 Config.ini !');
DeleteFile(ExtractFilePath(Application.ExeName) + 'Config.ini');
Application.Terminate;
End;
#1
最快的办法就是在程序中利用adoconnetion的属性直接连接数据库的
然后把这些字符串拷贝出来分析的
修改数据库的名称 密码等信息
修改后动态的赋值给adoconnetionstring属性
最后connected设置为true就是可以的了
然后把这些字符串拷贝出来分析的
修改数据库的名称 密码等信息
修改后动态的赋值给adoconnetionstring属性
最后connected设置为true就是可以的了
#2
转帖:
procedure TfrmMain.ConnectDB;
var
ConnStr,DBPath:String; //保存连接字符串和数据库路径
begin
{ExtractFilePath函数从一个完整的文件名中分离出路径,以'\'结束,
Application.ExeName得到程序执行文件本身的文件名,
这里要求数据库文件(UserInfo.mdb)必须放在程序同一个目录,
否则就连接不上了,呵呵!}
try
DBPath:=ExtractFilePath(Application.ExeName)+'UserInfo.mdb';
ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
DBPath+';Persist Security Info=False';
ADOConnection1.Close; //要改变它的属性前要关闭连接!
ADOConnection1.ConnectionString:=ConnStr; //指定连接串
ADOconnection1.LoginPrompt:=False; //不显示默认的登录对话框
ADOConnection1.Open //打开连接
except
on E:Exception do
begin
ShowMessage('出错!'+e.Message); //显示出错信息
frmMain.Close; //退出程序算了,数据库都连不上还有什么用!^_^
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
ConnectDB; //连接数据库
end;
procedure TfrmMain.ConnectDB;
var
ConnStr,DBPath:String; //保存连接字符串和数据库路径
begin
{ExtractFilePath函数从一个完整的文件名中分离出路径,以'\'结束,
Application.ExeName得到程序执行文件本身的文件名,
这里要求数据库文件(UserInfo.mdb)必须放在程序同一个目录,
否则就连接不上了,呵呵!}
try
DBPath:=ExtractFilePath(Application.ExeName)+'UserInfo.mdb';
ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
DBPath+';Persist Security Info=False';
ADOConnection1.Close; //要改变它的属性前要关闭连接!
ADOConnection1.ConnectionString:=ConnStr; //指定连接串
ADOconnection1.LoginPrompt:=False; //不显示默认的登录对话框
ADOConnection1.Open //打开连接
except
on E:Exception do
begin
ShowMessage('出错!'+e.Message); //显示出错信息
frmMain.Close; //退出程序算了,数据库都连不上还有什么用!^_^
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
ConnectDB; //连接数据库
end;
#3
在程序中的连接字符串中写下数据库的相对路径
#4
我要有设置路径的ado
#5
如果是采用本地的ACCESS,应该在ODBC库中设置系统DNS,那里可以设置ACCESS的路径。
#6
with AdoConnection1 do
begin
Connected:=false;
Connectionstring := '';
ConnectionString :=' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= '
+ DataBaseName
+ ' ;Data Source='
+ ServerName;
Connected := true;
end;
Databasename是你的数据库名称
Servername是你的服务器名称
begin
Connected:=false;
Connectionstring := '';
ConnectionString :=' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= '
+ DataBaseName
+ ' ;Data Source='
+ ServerName;
Connected := true;
end;
Databasename是你的数据库名称
Servername是你的服务器名称
#7
这是连接Sql server2000的
连接Access的是
Path:=ExtractFilePath(ParamStr(0));
if not FileExists(Path+'Data\Pack.Dll') then
begin
Msg:='数据库文件"Pack.Dll"没有找到!'+#10#13+
'请查找到该文件以"Pack.Dll"为文件名放置到目录:'+#10#13+
Path+'Data\ 中。';
Application.MessageBox(Pchar(Msg),'错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
AdoCon.Connected:=False;
ConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'Data\Pack.Dll;Persist Security Info=True';
AdoCon.ConnectionString:=ConStr;
try
AdoCon.Connected:=True;
except
Application.MessageBox('数据库连接错误,请重试!','错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
连接Access的是
Path:=ExtractFilePath(ParamStr(0));
if not FileExists(Path+'Data\Pack.Dll') then
begin
Msg:='数据库文件"Pack.Dll"没有找到!'+#10#13+
'请查找到该文件以"Pack.Dll"为文件名放置到目录:'+#10#13+
Path+'Data\ 中。';
Application.MessageBox(Pchar(Msg),'错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
AdoCon.Connected:=False;
ConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'Data\Pack.Dll;Persist Security Info=True';
AdoCon.ConnectionString:=ConStr;
try
AdoCon.Connected:=True;
except
Application.MessageBox('数据库连接错误,请重试!','错误',MB_OK+MB_ICONERROR);
Application.Terminate;
end;
#8
悔恨..恨........................
来晚了.............
来晚了.............
#9
sigh..
来晚了就是晚了..
进最后的努力吧...
上面的代码是正确的..
我只能给你写思路..
首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...
来晚了就是晚了..
进最后的努力吧...
上面的代码是正确的..
我只能给你写思路..
首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...
#10
简单
procedure TfrmMain.ADOConnection1BeforeConnect(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ stFileName.Caption + ';Persist Security Info=False';
end;
procedure TfrmMain.ADOConnection1BeforeConnect(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ stFileName.Caption + ';Persist Security Info=False';
end;
#11
procedure TfrmLogin.FormCreate(Sender: TObject);
begin
if fileexists(extractfilepath(application.exename)+'yh.mdb') then
begin
//连接数据库字串
connstr:='Provider=Microsoft.Jet.OLEDB.4.0;data Source='+extractfilepath(application.exename)+'yh.mdb';
//建立Connection
conn:=CreateOleObject('ADODB.Connection');
//打开连接
conn.open(connstr);
rs:=CreateOleObject('ADODB.Recordset');
rs.open('select * from tuser order by userid',conn,1,1);
还可以动态创建一个Q控件,再连,
begin
if fileexists(extractfilepath(application.exename)+'yh.mdb') then
begin
//连接数据库字串
connstr:='Provider=Microsoft.Jet.OLEDB.4.0;data Source='+extractfilepath(application.exename)+'yh.mdb';
//建立Connection
conn:=CreateOleObject('ADODB.Connection');
//打开连接
conn.open(connstr);
rs:=CreateOleObject('ADODB.Recordset');
rs.open('select * from tuser order by userid',conn,1,1);
还可以动态创建一个Q控件,再连,
#12
这个我做过:
getdir(0,path) ;
g_path:=path+'\db1.mdb';
ADOConnection1.close;
ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+g_path+''';Persist Security Info=False';
ADOConnection1.Open ;
ADOConnection1.Connected :=true;
getdir(0,path) ;
g_path:=path+'\db1.mdb';
ADOConnection1.close;
ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+g_path+''';Persist Security Info=False';
ADOConnection1.Open ;
ADOConnection1.Connected :=true;
#13
楼主啊,这么多的热心人都在帮你,你还没做好吗,
我来晚了,就不再说了,上面的代码都很不错的。
我来晚了,就不再说了,上面的代码都很不错的。
#14
别提,偶来得更晚,看到那么多方法
相信楼主应该做好了
相信楼主应该做好了
#15
动态连接用上面的方法都可以,
但是有一种情说,说是不用 Microsoft.Jet.OLEDB.4.0 时,你怎么办?
即你要用不同的数据库引擎时怎么办?
有以下的方法可以很好的实现,
原理:
在我们连数据库时,系统会有一个向导,可以选择数据库引擎,数据库。
我们也可以用他的方法,从VCL 库中我们知道,在连接时,他会调用一个方法:PromptDataSource,该方法要求有一个窗口句柄。
我们也可以用它的方法:
实现如下:
必须要包含单元:ADOConEd,IniFiles
代码:
procedure TfrmMain.FormCreate(Sender: TObject);
var
ConnectString: String;
ConfigFile: TIniFile;
begin
ConfigFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
If Not FileExists(ExtractFilePath(Application.ExeName) + 'Config.ini') Then
Begin
ShowMessage('数据库没有连接,请先连接数据库');
ConnectString := PromptDataSource(Handle, ConnectString);
ConfigFile.WriteString('ConnectString', 'CurConnectString', ConnectString);
End
Else
Begin
ConnectString := ConfigFile.ReadString('ConnectString', 'CurConnectString', '');
End;
frmDM.ADOConnection1.ConnectionString := ConnectString;
Try
frmDM.ADOConnection1.Open;
Except
ShowMessage('数据库连接错误,请检查配置文件 Config.ini !');
DeleteFile(ExtractFilePath(Application.ExeName) + 'Config.ini');
Application.Terminate;
End;
但是有一种情说,说是不用 Microsoft.Jet.OLEDB.4.0 时,你怎么办?
即你要用不同的数据库引擎时怎么办?
有以下的方法可以很好的实现,
原理:
在我们连数据库时,系统会有一个向导,可以选择数据库引擎,数据库。
我们也可以用他的方法,从VCL 库中我们知道,在连接时,他会调用一个方法:PromptDataSource,该方法要求有一个窗口句柄。
我们也可以用它的方法:
实现如下:
必须要包含单元:ADOConEd,IniFiles
代码:
procedure TfrmMain.FormCreate(Sender: TObject);
var
ConnectString: String;
ConfigFile: TIniFile;
begin
ConfigFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
If Not FileExists(ExtractFilePath(Application.ExeName) + 'Config.ini') Then
Begin
ShowMessage('数据库没有连接,请先连接数据库');
ConnectString := PromptDataSource(Handle, ConnectString);
ConfigFile.WriteString('ConnectString', 'CurConnectString', ConnectString);
End
Else
Begin
ConnectString := ConfigFile.ReadString('ConnectString', 'CurConnectString', '');
End;
frmDM.ADOConnection1.ConnectionString := ConnectString;
Try
frmDM.ADOConnection1.Open;
Except
ShowMessage('数据库连接错误,请检查配置文件 Config.ini !');
DeleteFile(ExtractFilePath(Application.ExeName) + 'Config.ini');
Application.Terminate;
End;