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

📄 addaccount.pas

📁 晓风财务软件源码,具有财务软基本功能,仅供学习,勿商用,后果与本人无关 1、使用的第三方VCL: FastReport2.6中文版 EHLIB3 sncCurrency SUIPac
💻 PAS
字号:
unit AddAccount;

interface

uses
  Windows, Graphics, Controls, SysUtils, Forms, DB, ADODB, ComCtrls, StdCtrls,
  SUIComboBox, SUIEdit, SUIButton, Classes, ExtCtrls, SUIForm, ExtFunc,
  Dialogs, SUIDBCtrls, jpeg, IniFiles, SUIStatusBar;


type
  TFrmAddAccount = class(TForm)
    suiForm1: TsuiForm;
    btnCancel: TsuiButton;
    btnOK: TsuiButton;
    Label4: TLabel;
    editServerName: TsuiEdit;
    Label5: TLabel;
    editDatabaseName: TsuiEdit;
    Label6: TLabel;
    editUID: TsuiEdit;
    Label7: TLabel;
    editPassword: TsuiEdit;
    editAccountName: TsuiEdit;
    Label1: TLabel;
    Label2: TLabel;
    editDeptName: TsuiEdit;
    Label3: TLabel;
    editDeptManager: TsuiEdit;
    Label8: TLabel;
    editFinanceManager: TsuiEdit;
    Label9: TLabel;
    Label10: TLabel;
    cbDeptType: TsuiComboBox;
    dtAccountStartDate: TDateTimePicker;
    q: TADOQuery;
    sb: TsuiStatusBar;
    procedure FormShow(Sender: TObject);
    procedure editAccountNameChange(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
  private
    { Private declarations }
  public
    isAdded:Boolean;
  end;

var
  FrmAddAccount: TFrmAddAccount;
implementation

uses PublicFunc;

{$R *.dfm}

procedure TFrmAddAccount.FormShow(Sender: TObject);
var
  IniFile:TIniFile;
  Depts:integer;
  i:integer;
begin
  isAdded:=false;
  IniFile:=TIniFile.Create(Fun_GetCurrentPath^+'DatabaseTemplate\Dept.ini');
  Depts:=IniFile.ReadInteger('Depts','Total',0);
  for i:=1 to Depts do cbDeptType.Items.Add(IniFile.ReadString('Depts','Dept'+IntToStr(i)+'Name',''));
  IniFile.Destroy;
  dtAccountStartDate.Date:=StrToDate(Copy(DateToStr(now),1,4)+'-1-1');
end;

procedure TFrmAddAccount.editAccountNameChange(Sender: TObject);
begin
  btnOK.Enabled:=((Trim(editAccountName.Text)<>'') and (Trim(editDeptName.Text)<>'') and (Trim(editDeptManager.Text)<>'')
    and (Trim(editFinanceManager.Text)<>'') and (cbDeptType.Text<>'') and (Trim(editServerName.Text)<>'')
    and (Trim(editDatabaseName.Text)<>'') and (Trim(editUID.Text)<>''));
end;

procedure TFrmAddAccount.btnOKClick(Sender: TObject);
var
  y,m,d:WORD;
  IniFile:TIniFile;
  i:integer;
  s:string;
  xmlTableName:string;
begin
  sb.Panels[0].Text:='连接 MS SQLServer ...';
  q.Close;
  q.Connection:=TAdoConnection.Create(self);
  q.Connection.LoginPrompt:=false;
  q.Connection.Close;
  q.Connection.ConnectionString:=Fun_GetSQLServer2000ConnectString(editServerName.Text,'Master',editUID.Text,editPassword.Text)^;
  try
    q.Connection.Open;
  except
    Frm_MsgBox('系统信息','指定的 MS SQLServer 服务器不存在或连接错误,请重新输入正确的 SQL 数据库配置信息。',MsgBox_OK_ERROR);
    editServerName.SetFocus;
    q.Connection.Destroy;
    Exit;
  end;

  q.SQL.Clear;
  q.SQL.Add('exec xp_msver ProductVersion');
  q.Open;
  if StrToInt(Copy(Trim(q.FieldByName('Character_value').AsString),1,1))<8 then
  begin
    q.Close;
    q.Connection.Close;
    q.Connection.Destroy;
    Frm_MsgBox('系统信息','本软件需要 MS SQLServer 2000 (8.0) 或以上版本,请升级您的 MS SQLServer 数据库版本。',MsgBox_OK_ERROR);
    Exit;
  end;

  sb.Panels[0].Text:='检查数据库 ...';
  q.Close;
  q.SQL.Clear;
  q.SQL.Add('SELECT name FROM sysdatabases where name='''+Trim(editDatabaseName.Text)+'''');
  q.Open;
  if q.RecordCount>0 then
  begin
    q.Close;
    q.Connection.Close;
    q.Connection.Destroy;
    Frm_MsgBox('系统信息','指定的数据库 '+Trim(editDatabaseName.Text)+' 已经存在,请重新输入新的数据库名称。',MsgBox_OK_ERROR);
    editDatabaseName.SetFocus;
    Exit;
  end;

  sb.Panels[0].Text:='创建帐套 ...';
  q.Connection.BeginTrans;
  try
    q.Close;
    q.SQL.Clear;
    q.SQL.Add('create database '+Trim(editDatabaseName.Text));
    q.ExecSQL;
    q.Close;

    s:='isqlw -S '+Trim(editServerName.Text)+' -U '+Trim(editUID.Text)+' -P '+Trim(editPassword.Text)+' -d '+Trim(editDatabaseName.Text)+' -E -i "'+Fun_GetCurrentPath^+'DatabaseTemplate\ShoveFinance.sql" -o Sql.log -FU';
    WinExec(pChar(s),SW_SHOW);

    sleep(2000);
    q.SQL.Clear;
    q.SQL.Add('Use '+Trim(editDatabaseName.Text));
    q.ExecSQL;
    q.Close;
    q.SQL.Clear;
    q.SQL.Add('SELECT name FROM sysobjects WHERE (name = ''P_WriteLog'')');
    q.Open;
    while q.RecordCount<1 do
    begin
      sleep(1000);
      q.Requery;
    end;
    q.Close;

    //从模板表向数据库表写记录
    IniFile:=TIniFile.Create(Fun_GetCurrentPath^+'\DatabaseTemplate\Dept.ini');
    i:=IniFile.ReadInteger('Depts','XmlTableTotal',0);
    while i>0 do
    begin
      xmlTableName:=IniFile.ReadString('Depts','Table'+IntToStr(i)+'Name','');
      if Fun_RestoreXMLFileToDataTable(q.Connection,xmlTableName,Fun_GetCurrentPath^+'DatabaseTemplate\'+cbDeptType.Text+'\'+xmlTableName+'.xml')<>0 then StrToInt('a');//抛出错误
      i:=i-1;
    end;
    IniFile.Destroy;

    //设置帐套属性
    SetOptionsKeyValue(q.Connection,'帐套名称',Trim(editAccountName.Text));
    SetOptionsKeyValue(q.Connection,'单位名称',Trim(editDeptName.Text));
    SetOptionsKeyValue(q.Connection,'单位负责人',Trim(editDeptManager.Text));
    SetOptionsKeyValue(q.Connection,'财务主管',Trim(editFinanceManager.Text));
    SetOptionsKeyValue(q.Connection,'帐套启用时间',DateToStr(dtAccountStartDate.Date));
    SetOptionsKeyValue(q.Connection,'单位性质',cbDeptType.Text);
    DecodeDate(dtAccountStartDate.Date,y,m,d);
    SetOptionsKeyValue(q.Connection,'当前会计年度',IntToStr(y));
    SetOptionsKeyValue(q.Connection,'当前会计月份',IntToStr(m));
    SetOptionsKeyValue(q.Connection,'当前现金日记年度',IntToStr(y));
    SetOptionsKeyValue(q.Connection,'当前现金日记月份',IntToStr(m));
    SetOptionsKeyValue(q.Connection,'当前银行日记年度',IntToStr(y));
    SetOptionsKeyValue(q.Connection,'当前银行日记月份',IntToStr(m));

    //Ini文件增加一套帐
    IniFile:=TIniFile.Create(Fun_GetCurrentPath^+'Account.ini');
    i:=IniFile.ReadInteger('Accounts','AccountCount',0)+1;
    IniFile.WriteInteger('Accounts','AccountCount',i);
    IniFile.WriteString('Account'+Trim(IntToStr(i)),'AccountName',Trim(editAccountName.Text));
    IniFile.WriteString('Account'+Trim(IntToStr(i)),'ServerName',Trim(editServerName.Text));
    IniFile.WriteString('Account'+Trim(IntToStr(i)),'DatabaseName',Trim(editDatabaseName.Text));
    IniFile.WriteString('Account'+Trim(IntToStr(i)),'UID',Trim(editUID.Text));
    IniFile.WriteString('Account'+Trim(IntToStr(i)),'Password',Fun_EncryptString(editPassword.Text)^);
    IniFile.Destroy;
    q.Connection.CommitTrans;
  except
    q.Connection.RollbackTrans;
    q.Close;
    q.Connection.Close;
    q.Connection.Destroy;
    Frm_MsgBox('系统信息','新帐套创建失败,请重新输入信息的正确性。',MsgBox_OK_ERROR);
    Exit;
  end;
  q.Close;
  q.Connection.Close;
  q.Connection.Destroy;
  isAdded:=true;
  Close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -