📄 sqlserverlink.pas
字号:
unit SQLServerLink;
interface
uses
Windows, Messages, SysUtils, Classes, DB, ADODB, Controls, Forms, ComObj, Variants, Registry,
strUtils;
type
TSQLServerLink = class(tadoconnection)
private
{ Private declarations }
FProjectName: string;
protected
{ Protected declarations }
public
{ Public declarations }
// class function LinkToDB: Boolean;
function SetParam: Boolean;
function Connect: integer;
published
{ Published declarations }
property ProjectName: string read FProjectName write FProjectName;
end;
procedure Register;
implementation
uses uDBLinkSetFrm;
procedure Register;
begin
RegisterComponents('倍恩组件', [TSQLServerLink]);
end;
function TSQLServerLink.Connect: integer; // -1 未设置连接参数 0 连接失败 1 连接成功 2 在连接状态
var
Reg: Tregistry;
sLinkParam: string;
sSrvName: string;
sLogid: string;
sLogpass: string;
sLinkMode: string;
begin
if Self.Connected then //已经处于连接状态
begin
Result := 2;
Exit;
end;
Result := 0;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\倍恩科技\SQLServerLink\' + FProjectName, False);
sLinkMode := Reg.ReadString('连接模式');
sSrvName := Reg.ReadString('服务器名称');
sLogid := Reg.ReadString('登录用户名');
sLogPass := Reg.ReadString('登录密码');
Reg.CloseKey;
Reg.Free;
if trim(sSrvName) = '' then
begin
Result := -1;
Exit;
end;
if LeftStr(sLinkMode, 1) = '1' then //NT集成模式
sLinkParam := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=' + sSrvName
else
sLinkParam := 'Provider=SQLOLEDB.1;Password=' + Trim(sLogpass) + ';Persist Security Info=False;User ID=' + Trim(sLogid) + ';Initial Catalog=master;Data Source=' + sSrvName;
Self.Connected := False;
Self.LoginPrompt := False;
Self.ConnectionString := sLinkParam;
Screen.Cursor := crHourglass;
try
Self.Connected := True;
except
on E: Exception do
begin
Screen.Cursor := crDefault;
Application.MessageBox(Pchar('数据库连接失败!' + #13 + '可能因素:' + E.Message), '连接错误', MB_ICONSTOP);
Exit;
end;
end;
Screen.Cursor := crDefault;
Result := 1; //连接成功
end;
function TSQLServerLink.SetParam: Boolean;
var
SQLServer: Variant;
ServerList: Variant;
i, iServers: integer;
Reg: TRegistry;
sLinkMode: string;
begin
Result := False;
if Trim(FProjectName) = '' then
begin
Application.MessageBox('必须设置一个工程文件名称', '参数错误', MB_ICONSTOP);
Exit;
end;
Screen.Cursor := crHourglass;
FrmLinkSet := TFrmLinkSet.Create(nil);
FrmLinkSet.sProjectName := FProjectName;
{将本网络内装有SQL Server的服务器全部增加到SrvList中}
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
iServers := ServerList.Count;
for i := 1 to iServers do
begin
FrmLinkSet.SrvList.items.Add(ServerList.Item(i));
end;
SQLServer := NULL;
serverList := NULL;
//初始化设置窗体的一些参数
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\倍恩科技\SQLServerLink\' + FProjectName, False);
with FrmLinkSet do
begin
sLinkMode := Reg.ReadString('连接模式');
if LeftStr(sLinkMode, 1) = '1' then
LinkMode.ItemIndex := 0
else
LinkMode.ItemIndex := 1;
SrvList.Text := Reg.ReadString('服务器名称');
Logid.Text := Reg.ReadString('登录用户名');
LogPass.Text := Reg.ReadString('登录密码');
end;
Reg.CloseKey;
Reg.Free;
{---------------------------------------------------}
FrmLinkSet.sProjectName := FProjectName;
Screen.Cursor := crDefault;
if FrmLinkSet.ShowModal = mrok then Result := True;
FrmLinkSet.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -