如何自动设置ODBC数据源?--源代码复制了总有错误 ( 积分: 100 )

  • 主题发起人 主题发起人 firfans
  • 开始时间 开始时间
F

firfans

Unregistered / Unconfirmed
GUEST, unregistred user!
我只是在原来界面上加了一个按钮
然后把代码放上去了,可是不对
难道要重新做一个模块一个单元?
哪位高手给个准确的代码,告诉小弟如何做?

我的数据库名称是
bookaccess
数据库地址是
D:/学习软件/BookManbak/BookMan/access.mdb
我的驱动地址
G:/WINDOWS/System32/odbcjt32.dll

付原来拷贝的设置程序:
procedure TForm1.Button1Click(Sender: TObject);
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( ’MyAccess’, ’Microsoft Access Driver (*.mdb)’ );
 end
 else
begin//创建键值失败
 memo1.lines.add(’增加ODBC数据源失败’);
 exit;
end;
CloseKey;

//找到或创建Software/ODBC/ODBC.INI/MyAccess,写入DSN配置信息
if OpenKey(’Software/ODBC/ODBC.INI/MyAccess’,True) then
begin
  WriteString( ’DBQ’, ’C:/inetpub/wwwroot/test.mdb’ );//数据库目录
  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
  memo1.lines.add(’增加ODBC数据源失败’);
  exit;
end;
CloseKey;

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

  memo1.lines.add(’增加新ODBC数据源成功’);

  Free;
 end;
end;
 
我只是在原来界面上加了一个按钮
然后把代码放上去了,可是不对
难道要重新做一个模块一个单元?
哪位高手给个准确的代码,告诉小弟如何做?

我的数据库名称是
bookaccess
数据库地址是
D:/学习软件/BookManbak/BookMan/access.mdb
我的驱动地址
G:/WINDOWS/System32/odbcjt32.dll

付原来拷贝的设置程序:
procedure TForm1.Button1Click(Sender: TObject);
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( ’MyAccess’, ’Microsoft Access Driver (*.mdb)’ );
 end
 else
begin//创建键值失败
 memo1.lines.add(’增加ODBC数据源失败’);
 exit;
end;
CloseKey;

//找到或创建Software/ODBC/ODBC.INI/MyAccess,写入DSN配置信息
if OpenKey(’Software/ODBC/ODBC.INI/MyAccess’,True) then
begin
  WriteString( ’DBQ’, ’C:/inetpub/wwwroot/test.mdb’ );//数据库目录
  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
  memo1.lines.add(’增加ODBC数据源失败’);
  exit;
end;
CloseKey;

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

  memo1.lines.add(’增加新ODBC数据源成功’);

  Free;
 end;
end;
 
不会吧?
没有人知道??
拜托拜托
着急啊!!
 
???
这个是我的毕设啊
谁帮个忙??!!
 
哪位大牛解答一下
 
有个ODBC设置的函数
直接可以用
就不用在往注册表中写了
具体的要查查
忘记了
好象是
odbccp32.dll中的一个方法~
你去搜索一下~
 
后退
顶部