200分请教一个数据库问题(200分)

  • 主题发起人 主题发起人 ricky.tan
  • 开始时间 开始时间
R

ricky.tan

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何在程序安装的时候自动配置数据库(ADO,BDE)呢?
 
制作安裝程序的時候配置上去
 
要看你什么数据库,如果是sqlserver ,且SQLSERVER是装在本机,还有就是SA的密码为空,
如果桌面数据库,就当然可以了,只要打好包就可以
 
SQL SERVER2000的网络数据库
是不是一定需要自己写程序修改ODBC呢?
 
使用Install Shield Express可以将ODBC打包进去,不过安装的时候需要具有SA权限。
 
不知是否对你有帮助
ODBC DSN的设置不过是写注册表而已, 将以下代码放入程序第一个窗体的create代码
中就行了
下面的代码可以设置 Sql server和access的DSN, 其它的ODBC可以参数注册表如法炮


var
i : integer;
strTemp : string;
begin
i :=CreateSQLServerDsn('SQL Server DSN名', '服务器名', '用户名'); //
database名无参数,请在函数中设置
strTemp:=CreateAccessDsn('access DSN名', 'access文件名');

// if i= 5 then
// ShowMessage('创建SQL server ODBC连接成功!'+#13#10+#13#10+strTemp);
// if i= 0 then
/ ShowMessage('创建SQL server ODBC连接失败!'+#13#10+#13#10+strTemp);

//***************/
unit CreateODBC;
interface
uses
Windows, SysUtils, Registry, Forms;

Function CreateSQLServerDsn(const FDSN,FServer,FUser:String):Integer;
Function CreateAccessDsn(const myDSN, strFileName:String):string;
Function CreateAccessUserDsn(const myDSN, strFileName:String):string;

implementation

Function CreateSQLServerDsn(const FDSN,FServer,FUser:String):Integer;
var
RegisterTemp:TRegistry;
s : string;
bTemp : boolean;
begin
RegisterTemp:=TRegistry.Create;
with RegisterTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
//首先判断此DSN是否已经存在,如在,则不用继续下去
if OpenKey('Software/ODBC/ODBC.INI/'+FDSN,False) then
begin
CloseKey;
bTemp:=DeleteKey('Software/ODBC/ODBC.INI/'+FDSN);
end;
CloseKey;
//判断SQL Server的驱动程序是否已经安装
If OpenKey('Software/ODBC/ODBCINST.INI/ODBC Drivers',False) then
begin
s:=ReadString('SQL Server');
if UpperCase(S)<>'INSTALLED' then
begin
CloseKey;
Result:=2;
Free;
exit;
end;
end
else
begin
CloseKey;
Result:=3;
Application.MessageBox('SQL Server驱动程序没有安装,请安装
Office97/2000或者安装win98中的PWS以安装Sql server的ODBC驱动程序','注意',
MB_OK);
Free;
exit;
end;
CloseKey;
//寻找SQL Server的驱动程序路径
If OpenKey('Software/ODBC/ODBCINST.INI/SQL Server',False) then
begin
s:=ReadString('Driver');
if S='' then
begin
CloseKey;
Result:=2;
Application.MessageBox('SQL Server驱动程序没有安装,请安装
Office97/2000或者安装win98中的PWS以安装Sql server的ODBC驱动程序','注意',
MB_OK);
Free;
exit;
end;
end
else
begin
CloseKey;
Result:=2;
Application.MessageBox('SQL Server驱动程序没有安装,请安装
Office97/2000或者安装win98中的PWS以安装Sql server的ODBC驱动程序','注意',
MB_OK);
Free;
exit;
end;
CloseKey;
//注册一个DSN名称
If OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
WriteString(FDSN,'SQL Server')
else
begin
CloseKey;
Result:=1;
Application.MessageBox('注册表键值Software/ODBC/ODBC.INI/ODBC Data
Sources打开出错', '注意', MB_OK);
Free;
exit;
end;
CloseKey;
if OpenKey('Software/ODBC/ODBC.INI/'+FDSN,True) then
begin
WriteString('Database','你的database名');
WriteString('Driver',S);
WriteString('LastUser',FUser);
WriteString('Server',FServer);
Result:=5;
end
else
begin
CloseKey;
Result:=1;
Free;
exit;
end;
CloseKey;
Free;
end;

end;

// Result:=0;
// Result:='此ODBC 的DSN已经存在,创建失败';
// Result:=3;
// Result:='操作系统中ODBC驱动程序没有安装,请检查控制面板的ODBC设置
是否存在?';
// Result:=2;
// Result:='Access的ODBC驱动程序没有安装';
// Result:=1;
// Result:='ODBC驱动程序没有安装';
// result :=5;
// result :='成功' ;

Function CreateAccessDsn(const myDSN, strFileName:String):string;
var
registerTemp : TRegistry;
bData : array[ 0..0 ] of byte;
begin
registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE

//找到Software/ODBC/ODBC.INI/ODBC Data Sources
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin //注册一个DSN名称
WriteString( myDSN, 'Microsoft Access Driver (*.mdb)' );
end
else
begin//创建键值失败
Result :='增加ODBC数据源失败';
exit;
end;
CloseKey;

//找到或创建Software/ODBC/ODBC.INI/MyAccess,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+MyDSN,True) then
begin
WriteString( 'DBQ', strFileName);//数据库目录
WriteString( 'Description', '我的新数据源' );//数据源描述
WriteString( 'Driver', 'C:/PWIN98/SYSTEM/odbcjt32.dll' );//驱动程
序DLL文件
WriteInteger( 'DriverId', 25 );//驱动程序标识
WriteString( 'FIL', 'Ms Access;' );//Filter依据
WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
WriteString( 'UID', '' );//用户名称
bData[0] := 0;
WriteBinaryData( 'Exclusive', bData, 1 );//非独占方式
WriteBinaryData( 'ReadOnly', bData, 1 );//非只读方式
end
else//创建键值失败
begin
Result :='增加ODBC数据源失败';
exit;
end;
CloseKey;

//找到或创建Software/ODBC/ODBC.INI/MyAccess/Engines/Jet
//写入DSN数据库引擎配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+MyDSN+'/Engines/Jet',True) then
begin
WriteString( 'ImplicitCommitSync', 'Yes' );
WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
WriteInteger( 'PageTimeout', 10 );//页超时
WriteInteger( 'Threads', 3 );//支持的线程数目
WriteString( 'UserCommitSync', 'Yes' );
end
else//创建键值失败
begin
Result :='增加本地 accessODBC数据源失败!';
exit;
end;
CloseKey;

Result :='增加新本地 access ODBC数据源成功!';
Free;
end;

end;

Function CreateAccessUserDsn(const myDSN, strFileName:String):string;
var
registerTemp : TRegistry;
bData : array[ 0..0 ] of byte;
begin
registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
// RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE
RootKey:=HKEY_Current_USER;//设置根键值为HKEY_LOCAL_MACHINE

//找到Software/ODBC/ODBC.INI/ODBC Data Sources
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin //注册一个DSN名称
WriteString( myDSN, 'Microsoft Access Driver (*.mdb)' );
end
else
begin//创建键值失败
Result :='增加ODBC数据源失败';
exit;
end;
CloseKey;

//找到或创建Software/ODBC/ODBC.INI/MyAccess,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+MyDSN,True) then
begin
WriteString( 'DBQ', strFileName);//数据库目录
WriteString( 'Description', '我的新数据源' );//数据源描述
WriteString( 'Driver', 'C:/PWIN98/SYSTEM/odbcjt32.dll' );//驱动程
序DLL文件
WriteInteger( 'DriverId', 25 );//驱动程序标识
WriteString( 'FIL', 'Ms Access;' );//Filter依据
WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
WriteString( 'UID', '' );//用户名称
bData[0] := 0;
WriteBinaryData( 'Exclusive', bData, 1 );//非独占方式
WriteBinaryData( 'ReadOnly', bData, 1 );//非只读方式
end
else//创建键值失败
begin
Result :='增加ODBC数据源失败';
exit;
end;
CloseKey;

//找到或创建Software/ODBC/ODBC.INI/MyAccess/Engines/Jet
//写入DSN数据库引擎配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+MyDSN+'/Engines/Jet',True) then
begin
WriteString( 'ImplicitCommitSync', 'Yes' );
WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
WriteInteger( 'PageTimeout', 10 );//页超时
WriteInteger( 'Threads', 3 );//支持的线程数目
WriteString( 'UserCommitSync', 'Yes' );
end
else//创建键值失败
begin
Result :='增加本地 accessODBC数据源失败';
exit;
end;
CloseKey;
Result :='增加新本地 accessODBC数据源成功';
Free;
end;
end;
end.
 
既然用了ADO 为何还用BDE(ODBC)
直接在ADO引擎中选择SQL server不就OK了
服务器端装SQL Server服务
客户端装程序即可
 
To :yczjs
那样是可以,如果不配只好ODBC的话很可能会出现不能连接的问题,
我们是用的ADO,我只是想顺便知道BDE的做法。
 
最好用动态生成

///|///
// - - //
( @ @ )
+---------------------oOOoo-(?)ooOOo---------------------+
| |
| 来拿分来了 |
| E-MAIL: you@xu.com.cn |
| OICQ : 4529818 |
| URL : http://www.yousoft.net/ |
| Ooooo 徐长友 2000.04.01 |
+-----------------------ooooO--( )---------------------+
( ) )|/
/|( (_/
/_)
 
odbc 可通过读写注册表来配置,在程序打包时可以通过写注册表配置数据源,我以前用过。
ADO 在安装的时候不能配置吧?我是在程序第一次启动的时候,或是连接出现问题的时候
才配置ado连接的,很简单,就是把连接字符串记录在注册表中,连接时去读它,在程序中
用户可以修改它的配置。如果你做在安装文件中也可以,无非是到时候在取读它。
 
用ado吧!
基本上不用配置!
 
ado版本不兼容,最好不要使用,配置ODBC很简单,在打包时将ODBC使用的动态库和配置文件
包括进去就行了。这些文件主要包括系统目录下的ODBC DLL文件和CFG文件,具体的配置我可
以传给你!
 
To 薛獅,
谢谢你了,麻烦发到我油箱里面tanjianglin@21cn.com
To snjat
已经按照你的作了一个程序,注册表修改也成功了,就是不自到有没有用处
因为现在想它不连上去都不行了,没法测试!
 
你查找一个叫ODBC.INI的文件,通常在Windows目录下,打开,看看里面的配置,是不是包含
你使用的ODBC名称!你把用到的驱动DLL包含在你的安装程序中,在将ODBC.INI包含在你的安
装程序中,其他的事情交给微软去处理吧。
 
如果做成安装程序,只要找到比较合适的打包工具就可以完成BDE,ODBC了。
好的打包工具如:wise,完全可以做到你的要求。
 
多人接受答案了。
 
后退
顶部