📄 selectaccount.pas
字号:
unit SelectAccount;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, SUIForm, SUIImagePanel, SUIButton, StdCtrls, SUIEdit,
SUIListBox, jpeg , ExtFunc , IniFiles, DB, ADODB, SUIDlg;
type
TFrmSelectAccount = class(TForm)
suiForm1: TsuiForm;
Panel1: TPanel;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
ListAccount: TsuiListBox;
editAccountName: TsuiEdit;
btnOK: TsuiButton;
btnCancel: TsuiButton;
Label3: TLabel;
pSqlConnect: TsuiImagePanel;
Label4: TLabel;
editServerName: TsuiEdit;
editDatabaseName: TsuiEdit;
Label5: TLabel;
Label6: TLabel;
editUID: TsuiEdit;
editPassword: TsuiEdit;
Label7: TLabel;
btnAdd: TsuiButton;
Timer1: TTimer;
tq: TADOQuery;
btnDel: TsuiButton;
passDlg: TsuiInputDialog;
procedure FormShow(Sender: TObject);
procedure ListAccountClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnDelClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
AutoSelectAccount,LastSelectAccount:integer;
IniFile:TIniFile;
end;
var
FrmSelectAccount: TFrmSelectAccount;
implementation
uses DataModule,PublicFunc, AddAccount;
{$R *.dfm}
procedure TFrmSelectAccount.FormShow(Sender: TObject);
var
AccountNum,i:integer;
begin
IniFile:=TIniFile.Create(Fun_GetCurrentPath^+'Account.ini');
AccountNum:=StrToInt(IniFile.ReadString('Accounts','AccountCount','0'));
AutoSelectAccount:=StrToInt(IniFile.ReadString('Accounts','AutoSelectAccount','0'));
LastSelectAccount:=StrToInt(IniFile.ReadString('Accounts','LastSelectAccount','0'));
if AccountNum<1 then Exit;
btnDel.Enabled:=true;
for i:=1 to AccountNum do
ListAccount.Items.Add(IniFile.ReadString('Account'+Trim(IntToStr(i)),'AccountName',''));
btnOK.Enabled:=(ListAccount.Items.Count>0);
if (AutoSelectAccount>ListAccount.Items.Count) or (AutoSelectAccount<0) then
AutoSelectAccount:=0;
if (LastSelectAccount>ListAccount.Items.Count) or (LastSelectAccount<0)then
LastSelectAccount:=0;
if ListAccount.Items.Count>0 then
begin
if AutoSelectAccount>0 then
ListAccount.ItemIndex:=AutoSelectAccount-1
else
begin
if LastSelectAccount>0 then
ListAccount.ItemIndex:=LastSelectAccount-1
else
ListAccount.ItemIndex:=0;
end;
end;
ListAccount.OnClick(self);
if AutoSelectAccount>0 then
begin
btnOK.Click;
end;
end;
procedure TFrmSelectAccount.ListAccountClick(Sender: TObject);
var
i:Integer;
begin
pSqlConnect.Visible:=False;
i:=ListAccount.ItemIndex+1;
editAccountName.Text:=ListAccount.Items[ListAccount.ItemIndex];
editServerName.Text:=IniFile.ReadString('Account'+Trim(IntToStr(i)),'ServerName','');
editDatabaseName.Text:=IniFile.ReadString('Account'+Trim(IntToStr(i)),'DatabaseName','');
editUID.Text:=IniFile.ReadString('Account'+Trim(IntToStr(i)),'UID','');
editPassword.Text:=Fun_UnEncryptString(IniFile.ReadString('Account'+Trim(IntToStr(i)),'Password',''))^;
end;
procedure TFrmSelectAccount.btnOKClick(Sender: TObject);
var
i:Integer;
s:string;
SQLVer:string;
begin
DM.adoc.Close;
DM.adoc.ConnectionString:=Fun_GetSQLServer2000ConnectString(editServerName.Text,editDatabaseName.Text,editUID.Text,editPassword.Text)^;
try
DM.adoc.Open;
tq.Connection:=DM.adoc;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('use Master');
tq.SQL.Add('exec xp_msver ProductVersion');
tq.SQL.Add('Use '+editDatabaseName.Text);
tq.Open;
SQLVer:=Trim(tq.FieldByName('Character_value').AsString);
tq.Close;
if StrToInt(Copy(SQLVer,1,1))<8 then
begin
DM.adoc.Close;
Frm_MsgBox('系统信息','本软件需要 MS SQLServer 2000 (8.0) 或以上版本,请升级您的 MS SQLServer 数据库版本。',MsgBox_OK_ERROR);
pSqlConnect.Visible:=true;
editServerName.SetFocus;
Exit;
end;
s:=Trim(GetOptionsKeyValue(DM.adoc,'数据库版本号'));
if DM.SoftVersionNumber<>s then
begin
DM.adoc.Close;
Frm_MsgBox('系统信息','指定的帐套数据库已连接,但版本号('+s+')与本软件当前版本('+DM.SoftVersionNumber+')不符合,请升级您的软件及帐套数据库。',MsgBox_OK_ERROR);
pSqlConnect.Visible:=true;
editServerName.SetFocus;
Exit;
end;
i:=ListAccount.ItemIndex+1;
IniFile.WriteString('Account'+Trim(IntToStr(i)),'ServerName',editServerName.Text);
IniFile.WriteString('Account'+Trim(IntToStr(i)),'DatabaseName',editDatabaseName.Text);
IniFile.WriteString('Account'+Trim(IntToStr(i)),'UID',editUID.Text);
IniFile.WriteString('Account'+Trim(IntToStr(i)),'Password',Fun_EncryptString(editPassword.Text)^);
IniFile.WriteString('Accounts','LastSelectAccount',Trim(IntToStr(i)));
Timer1.Enabled:=true;
except
Timer1.Enabled:=false;
Frm_MsgBox('错误信息','指定的帐套数据库连接失败,请输入正确的服务器、SQLServer 登录信息!',MsgBox_OK_Error);
pSqlConnect.Visible:=true;
editServerName.SetFocus;
end;
end;
procedure TFrmSelectAccount.btnCancelClick(Sender: TObject);
begin
Close;
end;
procedure TFrmSelectAccount.Timer1Timer(Sender: TObject);
begin
if DM.adoc.Connected then Close;
end;
procedure TFrmSelectAccount.btnAddClick(Sender: TObject);
var
faa:TFrmAddAccount;
begin
faa:=TFrmAddAccount.Create(self);
faa.ShowModal;
if faa.isAdded then
begin
ListAccount.Items.Add(Trim(faa.editAccountName.Text));
btnDel.Enabled:=true;
if ListAccount.Items.Count=1 then
begin
ListAccount.ItemIndex:=0;
ListAccount.OnClick(self);
btnOK.Enabled:=true;
end;
end;
faa.Destroy;
end;
procedure TFrmSelectAccount.btnDelClick(Sender: TObject);
var
i:integer;
index:integer;
Name,pass:string;
begin
if Frm_MsgBox('系统信息','删除帐套将同时删除其数据库,请谨慎操作!确定要删除 '+editAccountName.Text+' 帐套吗?',MsgBox_YESNO)=mrNo then Exit;
DM.adoc.Close;
DM.adoc.ConnectionString:=Fun_GetSQLServer2000ConnectString(editServerName.Text,editDatabaseName.Text,editUID.Text,editPassword.Text)^;
try
DM.adoc.Open;
tq.Connection:=DM.adoc;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('select * from Operator where id=1');
tq.Open;
name:=tq.FieldByName('name').AsString;
pass:=tq.FieldByName('password').AsString;
tq.Close;
passDlg.PromptText:='请输入此帐套操作员“'+Trim(name)+'”的密码:';
if passDlg.ShowModal=mrCancel then
begin
DM.adoc.Close;
Exit;
end;
if Fun_NoUnEnCryptString(passDlg.ValueText,'',1,16,0)^<>Pass then
begin
DM.adoc.Close;
Frm_MsgBox('系统信息','密码错误,不能删除此帐套。',MsgBox_OK_ERROR);
Exit;
end;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('use Master');
tq.SQL.Add('drop database '+editDatabaseName.Text);
tq.ExecSQL;
tq.Close;
DM.adoc.Close;
except
DM.adoc.Close;
Frm_MsgBox('错误信息','指定的帐套数据库删除失败,请输入正确的服务器、SQLServer 登录信息!',MsgBox_OK_Error);
Exit;
end;
IniFile.WriteInteger('Accounts','AccountCount',ListAccount.Items.Count-1);
if ListAccount.ItemIndex=(ListAccount.Items.Count-1) then
begin
ListAccount.Items.Delete(ListAccount.ItemIndex);
btnOK.Enabled:=(ListAccount.Items.Count>0);
btnDel.Enabled:=(ListAccount.Items.Count>0);
if ListAccount.Items.Count>0 then
begin
ListAccount.ItemIndex:=ListAccount.Items.Count-1;
ListAccount.OnClick(self);
end
else
begin
editAccountName.Text:='';
pSqlConnect.Visible:=false;
end;
Exit;
end;
for i:=ListAccount.ItemIndex+1 to ListAccount.Items.Count-1 do
begin
IniFile.WriteString('Account'+Trim(IntToStr(i)),'AccountName',IniFile.ReadString('Account'+Trim(IntToStr(i+1)),'AccountName',''));
IniFile.WriteString('Account'+Trim(IntToStr(i)),'ServerName',IniFile.ReadString('Account'+Trim(IntToStr(i+1)),'ServerName',''));
IniFile.WriteString('Account'+Trim(IntToStr(i)),'DatabaseName',IniFile.ReadString('Account'+Trim(IntToStr(i+1)),'DatabaseName',''));
IniFile.WriteString('Account'+Trim(IntToStr(i)),'UID',IniFile.ReadString('Account'+Trim(IntToStr(i+1)),'UID',''));
IniFile.WriteString('Account'+Trim(IntToStr(i)),'Password',IniFile.ReadString('Account'+Trim(IntToStr(i+1)),'Password',''));
end;
index:=ListAccount.ItemIndex;
ListAccount.Items.Delete(ListAccount.ItemIndex);
ListAccount.ItemIndex:=index;
ListAccount.OnClick(self);
end;
procedure TFrmSelectAccount.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
IniFile.Destroy;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -