发信人: pazee@GZ() 
整理人: teleme(2001-02-12 19:37:37), 站内信件
 | 
 
 
 标  题: Re: 怎样用编程方法创建odbc数据源,即控制面板里的odbc32的设置? 发信站: 网易虚拟社区 (Tue Apr 11 14:10:26 2000), 站内信件
  【 在 owalmh () 的大作中提到: 】
 : 怎样用编程方法创建odbc数据源,即控制面板里的odbc32的设置?
 
 这是我写过的一个创建 MySQL ODBC的程序,你参考一下吧.他同时还建立了BDE的 
 别名.
 
 // 服务器参数设置
 // 修改注册表 建立Alias For MySQL
 // Designed By Linquan
 unit Frm6_1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dia 
 logs,
   StdCtrls, ExtCtrls, registry, Buttons, DBTables;
 
 const
   ODBCKey= 'Software\ODBC\ODBC.INI\ODBC Data Sources';
 
 type
   TMySQLODBC= class
   private
   public
     { Public declarations }
     Database,
     Description,
     Driver,
     Option,
     Password,
     Port,
     Server,
     User,
     DocumentsFab: string;
     RegKeyName: string;
     BDEAlias: TStringList;
     fReg: TRegistry;
     constructor Create(KeyName, DBName: string);
     destructor Destory;
     procedure ReadODBCPara;
     procedure WriteODBCPara;
   end;
 
 type
   TForm6_1 = class(TForm)
     GroupBox1: TGroupBox;
     BtnCancel: TButton;
     BtnOK: TButton;
     Label1: TLabel;
     Label2: TLabel;
     EdtHostName: TEdit;
     EdtPort: TEdit;
     Image1: TImage;
     LabelMsg: TLabel;
     SpdBtnDefault: TSpeedButton;
     procedure EdtPortKeyPress(Sender: TObject; var Key: Char);
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
     procedure BtnCancelClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure SpdBtnDefaultClick(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure BtnOKClick(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
     ATMM, ATMS: TMySQLODBC;
     procedure ModifyAccessDAODLL;
   end;
 var
   Form6_1: TForm6_1;
 
 implementation
 
 {$R *.DFM}
 
 constructor TMySQLODBC.Create(KeyName, DBName: string);
 begin
   BDEAlias:= TStringList.Create;
   with BDEAlias do begin
     Add('DATABASE NAME=');
     Add('USER NAME=');
     Add('ODBC DSN=MySQL');
     Add('OPEN MODE=READ/WRITE');
     Add('BATCH COUNT=200');
     Add('LANGDRIVER=');
     Add('MAX ROWS=-1');
     Add('SCHEMA CACHE DIR=');
     Add('SCHEMA CACHE SIZE=8');
     Add('SCHEMA CACHE TIME=-1');
     Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
     Add('SQLQRYMODE=');
     Add('ENABLE SCHEMA CACHE=FALSE');
     Add('ENABLE BCD=FALSE');
     Add('ROWSET SIZE=20');
     Add('BLOBS TO CACHE=64');
     Add('BLOB SIZE=32');
   end;
   fReg:= TRegistry.Create;
   RegKeyName:= KeyName;
   ReadODBCPara;
 end;
 
 destructor TMySQLODBC.Destory;
 begin
   BDEAlias.Free;
   fReg.CloseKey;
   fReg.Free;
 end;
 
 procedure TMySQLODBC.ReadODBCPara;
 begin
   with fReg do begin
     OpenKey('\Software\ODBC\ODBC.INI\' + RegKeyName, True);
     Database:= ReadString('Database');
     Description:= ReadString('Description');
     Driver:= ReadString('Driver');
     Option:= ReadString('Option');
     Password:= ReadString('Password');
     Port:= ReadString('Port');
     Server:= ReadString('Server');
     User:= ReadString('User');
 //    OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
   end;
 end;
 
 
 procedure TMySQLODBC.WriteODBCPara;
 var
   Se: TSession;
   SysPath: array [0..MAX_PATH] of char;
 begin
   Se:= TSession.Create(nil);
   Se.AutoSessionName:= True;
   with fReg do begin
     OpenKey('\Software\ODBC\ODBC.INI\' + RegKeyName, True);
     WriteString('Database', Database);
     WriteString('Description', Description);
     GetSystemDirectory(Syspath, MAX_PATH);
     if (Driver='') then
       Driver:= String(SysPath) + '\myodbc.dll';
     WriteString('Driver', Driver);
     Option:= IntToStr(StrToInt('0' + Option) or 1);
     WriteString('Option', Option);
     WriteString('Password', Password);
     WriteString('Port', Port);
     WriteString('Server', Server);
     WriteString('User', User);
     OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
     WriteString(RegKeyName, 'MySQL');
     try
       Se.AddAlias(RegKeyName, 'MySQL', BDEAlias);
     except
     end;
   end;
   Se.Close;
   Se.Free;
 end;
 //-------------------------------------------------------------------- 
 -
 
 // 修改Access 的 DAO 驱动
 procedure TForm6_1.ModifyAccessDAODLL;
 var
   ParaLst: TStringList;
 begin
   ParaLst:= TStringList.Create;
   ParaLst.Add('DLL32=IDDA3532.DLL');
   with TSession.Create(nil) do begin
     AutoSessionName:= True;
     ModifyDriver('MSACCESS', ParaLst);
     SaveConfigFile;
     Free;
   end;
   ParaLst.Free;
 end;
 
 
 procedure TForm6_1.EdtPortKeyPress(Sender: TObject; var Key: Char);
 begin
   if (not(key in [#0..#31,'0'..'9'])) then
     Key:= #0;
 end;
 
 procedure TForm6_1.FormClose(Sender: TObject; var Action: TCloseAction 
 );
 begin
   if (self.Tag = 0) then begin
     if ((Trim(EdtHostName.Text)='')) then begin
       Application.MessageBox('主机地址和端口不能为空。','错误',MB_ICON 
 ERROR);
       Action:= caNone;
     end
     else begin
       Application.MessageBox('修改成功!'+#10+#13+'所作的修改只有在下次 
 启动软件时才生效。','提示',MB_ICONINFORMATION);
       Action:= caFree;
     end;
   end  else
     Action:= caFree;
 end;
 
 procedure TForm6_1.BtnCancelClick(Sender: TObject);
 begin
   self.Tag:= 1;
   Close;
 end;
 
 procedure TForm6_1.FormCreate(Sender: TObject);
 begin
   ATMM:= TMySQLODBC.Create('ATMM', '');
   ATMS:= TMySQLODBC.Create('ATMS', '');
   EdtHostName.Text:= ATMM.Server;
   EdtPort.Text:= ATMM.Port;
   if (EdtPort.Text='') then
     EdtPort.Text := '3306';
 end;
 
 procedure TForm6_1.SpdBtnDefaultClick(Sender: TObject);
 begin
   EdtPort.Text:= '3306';
 end;
 
 procedure TForm6_1.FormDestroy(Sender: TObject);
 begin
   ATMM.Destory;
   ATMS.Destory;
 end;
 
 procedure TForm6_1.BtnOKClick(Sender: TObject);
 begin
   ATMM.Server:= EdtHostName.Text;
   ATMS.Server:= EdtHostName.Text;
   ATMM.Port:= EdtPort.Text;
   ATMS.Port:= EdtPort.Text;
   ATMM.WriteODBCPara;
   ATMS.WriteODBCPara;
   ModifyAccessDAODLL;
   Close;
 end;
 
 end.
 
 
 -- .------------------------------------------------. 
 |                                    |           | 
 | 吃饱了不饿;睡醒了不困。           |.===.      | 
 | 这是放之四海皆准的真理!           {}o o{}     | 
 `---------------------------------ooO--(_)--Ooo--' 
  ※ 修改:.pazee 于 Apr 11 14:13:17 修改本文.[FROM: 202.96.191.124] ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.191.124]
  | 
 
 
 |