发信人: 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]
|
|