📄 addaccount.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 + -