请高手帮帮忙怎样实现动态连接数据库(access)
我要的是有设置路径
在程序运行时查找(access)库
我要的是有设置路径
在程序运行时查找(access)库
解决方案 »
- 取得Internet 快捷方式 图标
- delphi+access查询自动编号内容
- Delphi中如何检测数据库中某个表是否发生了变化???
- 简体中文操作系统开发的程序运行的繁体操作系统下出现乱码,应该怎么解决?
- 刚接触游戏开发,现有一问题?在程序中如何实现敌人的自动移动?
- 怎么才能让我点一下桌面或其它程序就可以让菜单消失??
- 怎样将array of const转换为array of TVarRec?
- 怎么判断数据库为空的时候!按钮变灰!
- 大家编的数据库软件还需要让用户手动设置ODBC数据源吗?如果不是,请进。
- DSPACK控件,实现用摄像头录像后,视频上有摄像的时间(读电脑的日期时间)
- 超难问题:关于满页打印
- 现在有一种VCD,第一张用电脑不能看(空的),但用家庭VCD机上就可以看。
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;
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是你的服务器名称
连接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;
来晚了就是晚了..进最后的努力吧...上面的代码是正确的..
我只能给你写思路..
首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ stFileName.Caption + ';Persist Security Info=False';
end;
beginif 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控件,再连,
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;
但是有一种情说,说是不用 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;