⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selectaccount.pas

📁 一套非常发好的财务管理软件,想从事此方面开发的可以借签
💻 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 + -