精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>数据库技术>>Re: 怎样用编程方法创建odbc数据源,即控制面板里的odbc32的设置?

主题:Re: 怎样用编程方法创建odbc数据源,即控制面板里的odbc32的设置?
发信人: 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]

[关闭][返回]