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

📄 importform.pas

📁 功能全面的商业财会系统源码,清晰,很有参考价值.扩展性强.
💻 PAS
字号:
unit ImportForm;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, DB, DBTables, ComCtrls, Dialogs, BDE, IniFiles;

type
  TfrmImport = class(TForm)
    btnOK: TButton;
    btnCancel: TButton;
    ProgressBar1: TProgressBar;
    Table1: TTable;
    lblHeading: TLabel;
    TableOld: TTable;
    BatchMove1: TBatchMove;
    Query1: TQuery;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
  private
    { Private declarations }
    procedure DeleteData(TblName: string);
    procedure ImportTable(TblName: string);
  public
    { Public declarations }
  end;

var
  frmImport: TfrmImport;

implementation

uses BS1Form, LookUpsData;

var
  strSourceDatabaseName: string;

{$R *.DFM}

procedure TfrmImport.DeleteData(TblName: string);
begin
  Screen.cursor := crHourglass;

  Query1.close;
  Query1.SQL[0] := 'DELETE FROM ' + TblName;
  try Query1.open; except; end;

  ProgressBar1.StepIt;
end;

procedure TfrmImport.ImportTable(TblName: string);
  var Maps: TStringList;
begin
  Screen.cursor := crHourglass;
  //Showmessage(TblName);
  Table1.TableName := TblName;
  TableOld.TableName := TblName;

  Table1.open;
  TableOld.open;

  if (Table1.TableName = 'Currency.db') and (TableOld.FieldDefs.IndexOf('APExchangeGLAccount') > -1) then begin   //If converting from v1.1g or less, rename APExchangeGLAccount and drop ARExchangeGLAccount.
    Maps := TStringlist.create;
    with Maps do begin
      Clear;
      Add('CurrencyID');
      Add('CurrencyName');
      Add('ExchangeRate');
      Add('APGLAccount');
      Add('GainLossExchangeGLAccount=APExchangeGLAccount');
      Add('APDiscGLAccount');
      Add('ARGLAccount');
      Add('ARDiscGLAccount');
      Add('DfltWriteOffGLAccount');
    end;
    BatchMove1.Mappings := Maps;
    Maps.free;
  end else BatchMove1.Mappings.Clear;

  BatchMove1.execute;
  DbiSaveChanges(Table1.handle);

  Table1.close;
  TableOld.close;

  ProgressBar1.StepIt;
end;

procedure TfrmImport.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmImport.FormCreate(Sender: TObject);
begin
  Query1.DatabaseName := strDatabaseName;
  Table1.DatabaseName := strDatabaseName;
  strSourceDatabaseName := ExtractFilePath(ParamStr(0)) + 'DataOld';
  TableOld.DatabaseName := strSourceDatabaseName;
  lblHeading.caption := 'Import from ' + strSourceDatabaseName;
end;

procedure TfrmImport.btnOKClick(Sender: TObject);
var
  I: integer;
  UsersIni: TIniFile;
begin
  try   //Verify source directory exists.
    TableOld.TableName := 'Company.db';
    TableOld.open;
    TableOld.Close;
  except
    raise(exception.create('Error reading from data source...' + #13 + #13 + 'Ensure old data has been copied to ' + strSourceDatabaseName));
  end;

  if license = '' then begin
    UsersIni := TIniFile.Create(strSourceDatabaseName + '\Users.ini');   //Import license data.
    RegisteredTo := UsersIni.ReadString('General', 'RegisteredTo', '');
    UsersIni.Free;
    if RegisteredTo = '' then raise(exception.create('Importing data is not allowed until this program has been registered...' + #13 + #13 + 'Please see Help | How to register. If you have already registered a previous version, please enter your license code via Help | About | License Upgrade'));   //Prevent importing license code from 30 day trial version.
  end;

  if Application.MessageBox(PChar('This will delete all existing data...' + #13 + 'Do you want to continue?'), PChar(Application.Title), mb_OKCancel + mb_DefButton2 + mb_IconWarning) <> IDOK then begin
    raise(EAbort.create(''));  //Silent Exception: "abort;" replaced by "raise etc" since abort conflicts with BDE (required by DbiSaveChanges).
  end;

  try   //Ensure no other users are using the system.
    frmBS1.tblCompany.close;
    frmBS1.tblCompany.exclusive := true;
    frmBS1.tblCompany.open;
    frmBS1.tblCompany.close;
    frmBS1.tblCompany.exclusive := false;
  except
    frmBS1.tblCompany.exclusive := false;
    frmBS1.tblCompany.open;
    raise(exception.create('No one else can be using ' + application.title));
  end;

  for I := 0 to Application.ComponentCount - 1 do begin
    if (Application.Components[I] is TForm)
      and (TForm(Application.Components[I]).name <> 'frmBS1')
      and (TForm(Application.Components[I]).name <> 'frmImport')
      and (TForm(Application.Components[I]).visible = true) then raise(exception.create('All forms must be closed before running this option'));   //Get user to finish and "close" (or hide) all forms.
    if (Application.Components[I] is TForm)
      and (TForm(Application.Components[I]).name <> 'frmBS1')
      and (TForm(Application.Components[I]).name <> 'frmImport')
      and (TForm(Application.Components[I]).name <> 'frmCalendar')
      and (TForm(Application.Components[I]).name <> 'frmDialer')
      and (TForm(Application.Components[I]).name <> 'frmPreview')
      and (TForm(Application.Components[I]).name <> 'dmLookUps') then TForm(Application.Components[I]).release;   //Close any open forms.
  end;
  session.databases[0].CloseDatasets;   //Close any remaining open tables.

  lblHeading.caption := 'Deleting data';
  repaint;
  Screen.cursor := crHourglass;
  ProgressBar1.max := 41;
  ProgressBar1.step := 1;
  ProgressBar1.StepIt;
  try
    DeleteData('JVDet.db');
    DeleteData('JV.db');
    DeleteData('JVCtl.db');
    DeleteData('APInvChq.db');
    DeleteData('APInvDet.db');
    DeleteData('APInv.db');
    DeleteData('APInvCtl.db');
    DeleteData('APCheq.db');
    DeleteData('APChqCtl.db');
    DeleteData('ARInvPmt.db');
    DeleteData('ARInvDet.db');
    DeleteData('ARInv.db');
    DeleteData('ARInvCtl.db');
    DeleteData('ARPmt.db');
    DeleteData('ARPmtCtl.db');
    DeleteData('VBalance.db');
    DeleteData('VContact.db');
    DeleteData('Vendor.db');
    DeleteData('VendCtl.db');
    DeleteData('CBalance.db');
    DeleteData('CContact.db');
    DeleteData('Customer.db');
    DeleteData('CustCtl.db');
    DeleteData('Salesman.db');
    DeleteData('CusType.db');
    DeleteData('Bank.db');
    DeleteData('Company.db');
    DeleteData('Currency.db');
    DeleteData('Item.db');
    DeleteData('ItemCtl.db');
    DeleteData('Tax.db');
    DeleteData('GLActual.db');
    DeleteData('GLBudget.db');
    DeleteData('GLHist.db');
    DeleteData('GLAccnt.db');
    DeleteData('FStmtLAc.db');
    DeleteData('FStmtLTo.db');
    DeleteData('FStmtLin.db');
    DeleteData('FStmt.db');
    DeleteData('FStmtCtl.db');
  finally
    Screen.cursor := crDefault;
    Query1.close;
  end;

  lblHeading.caption := 'Importing data';
  repaint;
  Screen.cursor := crHourglass;
  ProgressBar1.max := 42;
  ProgressBar1.step := 1;
  ProgressBar1.position := 0;
  ProgressBar1.StepIt;
  try
    ImportTable('FStmtCtl.db');
    ImportTable('FStmt.db');
    ImportTable('FStmtLin.db');
    ImportTable('FStmtLTo.db');
    ImportTable('FStmtLAc.db');
    ImportTable('GLAccnt.db');
    ImportTable('GLHist.db');
    ImportTable('GLBudget.db');
    ImportTable('GLActual.db');
    ImportTable('Tax.db');
    ImportTable('ItemCtl.db');
    ImportTable('Item.db');
    ImportTable('Currency.db');
    ImportTable('Company.db');
    ImportTable('Bank.db');
    ImportTable('CusType.db');
    ImportTable('Salesman.db');
    ImportTable('CustCtl.db');
    ImportTable('Customer.db');
    ImportTable('CContact.db');
    ImportTable('CBalance.db');
    ImportTable('VendCtl.db');
    ImportTable('Vendor.db');
    ImportTable('VContact.db');
    ImportTable('VBalance.db');
    ImportTable('ARPmtCtl.db');
    ImportTable('ARPmt.db');
    ImportTable('ARInvCtl.db');
    ImportTable('ARInv.db');
    ImportTable('ARInvDet.db');
    ImportTable('ARInvPmt.db');
    ImportTable('APChqCtl.db');
    ImportTable('APCheq.db');
    ImportTable('APInvCtl.db');
    ImportTable('APInv.db');
    ImportTable('APInvDet.db');
    ImportTable('APInvChq.db');
    ImportTable('JVCtl.db');
    ImportTable('JV.db');
    ImportTable('JVDet.db');

    UsersIni := TIniFile.Create(strSourceDatabaseName + '\Users.ini');   //Import license data.
    License := UsersIni.ReadString('General', 'License', '');
    RegisteredTo := UsersIni.ReadString('General', 'RegisteredTo', '');
    UsersIni.Free;
    UsersIni := TIniFile.Create(strDatabaseName + '\Users.ini');
    UsersIni.WriteString('General', 'RegisteredTo', RegisteredTo);
    UsersIni.WriteString('General', 'License', License);
    UsersIni.Free;
    ProgressBar1.StepIt;
  finally
    frmBS1.tblCompany.open;   //Re-open table(s) on frmBS1.
    dmLookUps.free; application.createform (TdmLookUps,dmLookUps);   //Re-open tables on data module.
    Screen.cursor := crDefault;
  end;
end;

end.

⌨️ 快捷键说明

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