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

📄 tb_main.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
📖 第 1 页 / 共 2 页
字号:
        DestinationTableNameListBox.Items.Add(SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbf');
    end;
    if DestinationTableNameListBox.Items.Count=0 then Exit;
    PageControl1.ActivePageIndex:=2;
    Exit;
  end;
  //转到确认页======================
  if PageControl1.ActivePageIndex=2 then
  begin
    if ((DestinationDatabaseNameEdit.Text='') or (DestinationTableNameListBox.Items.Count=0)) then Exit;
    PageControl1.ActivePageIndex:=3;
    NextButton.Caption:='开始备份';
    ConfirmMemo.Lines.Add('源数据库:');
    ConfirmMemo.Lines.Add(SourceDatabaseNameComboBox.Text);
    ConfirmMemo.Lines.Add('');
    ConfirmMemo.Lines.Add('保存目录:');
    ConfirmMemo.Lines.Add(DestinationDatabaseNameEdit.Text);
    ConfirmMemo.Lines.Add('');
    ConfirmMemo.Lines.Add('数据表:');
    for i:=0 to DestinationTableNameListBox.Items.Count-1 do
      ConfirmMemo.Lines.Add(Copy(DestinationTableNameListBox.Items[i],Pos('_',DestinationTableNameListBox.Items[i])+1,Pos('.',DestinationTableNameListBox.Items[i])-Pos('_',DestinationTableNameListBox.Items[i])-1)+'->'+DestinationTableNameListBox.Items[i]);
    Exit;
  end;
  //确定事件========================
  if PageControl1.ActivePageIndex=3 then
  begin
    Animate1.Visible:=True;
    Animate1.Active:=True;
    TB_DfmDataModule1.DestinationDatabaseADOConnection.Close;
    TB_DfmDataModule1.DestinationDatabaseADOConnection.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=dBASE Files;Initial Catalog='+DestinationDatabaseNameEdit.Text;
    //循环处理多个库表==========================================================
    for i:=0 to SourceTableNameCheckListBox.Items.Count-1 do
    begin
      if SourceTableNameCheckListBox.Checked[i] then
      begin
        //从源表中读结构信息====================================================
        with TB_DfmDataModule1.SourceDatabaseADOQuery do
        begin
          Close;
          Sql.Clear;
          Sql.Add('Select * From '+SourceTablenames[i]);
          try Open;
           except
             ShowMessage('error');
             Animate1.Active:=False;
             Animate1.Visible:=False;
             Exit;
          end;
        end;
        for j:=0 to TB_DfmDataModule1.SourceDatabaseADOQuery.FieldCount-1 do
        begin
          SourceFieldName:=TB_DfmDataModule1.SourceDatabaseADOQuery.Fields[j].FieldName;
          SourceFieldType:=TB_DfmDataModule1.SourceDatabaseADOQuery.Fields[j].DataType;
          DestinationFieldTypeString:=FieldTypeConvertion(SourceFieldType);
          SourceFieldSize:=TB_DfmDataModule1.SourceDatabaseADOQuery.Fields[j].Size;
          if SourceFieldSize=0 then
          begin
            if SourceFieldType in [ftDateTime] then
              SourceFieldSize:=20
             else SourceFieldSize:=10;
          end;
          if j=0 then
          begin
            if ((DestinationFieldTypeString='memo') or (DestinationFieldTypeString='logical') or (DestinationFieldTypeString='date')) then
              CreateTableString:=SourceFieldName+' '+DestinationFieldTypeString
             else
               CreateTableString:=SourceFieldName+' '+DestinationFieldTypeString+'('+IntToStr(SourceFieldSize)+')'
          end
           else
           begin
             if ((DestinationFieldTypeString='memo') or (DestinationFieldTypeString='logical') or (DestinationFieldTypeString='date')) then
               CreateTableString:=CreateTableString+','+SourceFieldName+' '+DestinationFieldTypeString
              else
                CreateTableString:=CreateTableString+','+SourceFieldName+' '+DestinationFieldTypeString+'('+IntToStr(SourceFieldSize)+')';
           end;
        end;
        //创建目标表============================================================
        //删除存在的目标表======================================================
        with TB_DfmDataModule1.DestinationDatabaseADOQuery do
        begin
          Close;
          if FileExists(DestinationDatabaseNameEdit.Text+'\'+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbf') then
          begin
            Sql.Clear;
            Sql.Add('drop table '+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]);
            try ExecSQL;
             except
               ShowMessage('error');
               Animate1.Active:=False;
               Animate1.Visible:=False;
               Exit;
            end;
          end;
        end;
        //拷贝建好的表作为目标表================================================
        CopyFilePath:=ExtractFilePath(Application.ExeName);
        CopyFilePath:=Copy(CopyFilePath,1,Pos('\bin\',LowerCase(CopyFilePath)))+'Tables\';
        if (Pos('\bin\',LowerCase(ExtractFilePath(Application.ExeName)))<>0) and (FileExists(CopyFilePath+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbf')) then
        begin
          CopySourceFileName:=CopyFilePath+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbf';
          CopyDestinationFileName:=DestinationDatabaseNameEdit.Text+'\'+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbf';
          if not CopyFile(Pchar(CopySourceFileName),Pchar(CopyDestinationFileName),False) then
            ShowMessage('拷贝文件不成功,有的库表不能创建!');
          if (Pos('\bin\',LowerCase(ExtractFilePath(Application.ExeName)))<>0) and (FileExists(CopyFilePath+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbt')) then
          begin
            CopySourceFileName:=CopyFilePath+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbt';
            CopyDestinationFileName:=DestinationDatabaseNameEdit.Text+'\'+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]+'.dbt';
            if not CopyFile(Pchar(CopySourceFileName),Pchar(CopyDestinationFileName),False) then
              ShowMessage('拷贝文件不成功,有的库表不能创建!');
          end
        end
         else
         begin
           //创建目标表============================================================
           with TB_DfmDataModule1.DestinationDatabaseADOQuery do
           begin
             Close;
             Sql.Clear;
             Sql.Add('create table '+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]);
             Sql.Add('('+CreateTableString+')');
             //ShowMessage(sql.text);
             try ExecSQL;
              except
                ShowMessage('error');
                Animate1.Active:=False;
                Animate1.Visible:=False;
                Exit;
             end;
           end;
         end;
        //打开目标表============================================================
        with TB_DfmDataModule1.DestinationDatabaseADOQuery do
        begin
          Close;
          Sql.Clear;
          Sql.Add('Select * From '+SourceDatabaseNameComboBox.Text+'_'+SourceTablenames[i]);
          try Open;
           except
             ShowMessage('error');
             Animate1.Active:=False;
             Animate1.Visible:=False;
             Exit;
          end;
        end;
        //从源表读数据信息向目标表中写数据信息==================================
        TB_DfmDataModule1.SourceDatabaseADOQuery.First;
        TB_DfmDataModule1.DestinationDatabaseADOQuery.First;
        while not TB_DfmDataModule1.SourceDatabaseADOQuery.Eof do
        begin
          TB_DfmDataModule1.DestinationDatabaseADOQuery.Insert;
          for k:=0 to TB_DfmDataModule1.SourceDatabaseADOQuery.FieldCount-1 do
          begin
            try
              TB_DfmDataModule1.DestinationDatabaseADOQuery.Fields[k].AsString:=TB_DfmDataModule1.SourceDatabaseADOQuery.Fields[k].AsString;
             except
               ShowMessage('error');
               Animate1.Active:=False;
               Animate1.Visible:=False;
               Exit;
            end;
          end;
          TB_DfmDataModule1.DestinationDatabaseADOQuery.Post;
          TB_DfmDataModule1.SourceDatabaseADOQuery.Next;
        end;
      end;
    end;
    Animate1.Active:=False;
    Animate1.Visible:=False;
    ShowMessage('备份完成!');
    SourceTablenames.Free;
    Close;
  end;
end;

//从sqlserver转为dbase形式的数据类型============================================
function TTB_DfmMain.FieldTypeConvertion(SourceFieldType:TFieldType): string;
var
  DestinationFieldTypeString:string;
begin
  // if SourceFieldType in [ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid] then
  if SourceFieldType in [ftMemo] then
    DestinationFieldTypeString:='memo'
  {else if SourceFieldType in [ftBoolean] then
    DestinationFieldTypeString:='logical'
  else if SourceFieldType in [ftFloat] then
    DestinationFieldTypeString:='float'
  else if SourceFieldType in [ftDate] then
    DestinationFieldTypeString:='date'}
  else
    DestinationFieldTypeString:='char';
  Result:=DestinationFieldTypeString;
end;

//显示中文表名================================================================
procedure TTB_DfmMain.ShowSourceTablenames;
var
  SourceTablenames:TStrings;
  i:integer;
  MidalTableNameString:string;
begin
  SourceTablenames:=TStringList.Create;
  TB_DfmDataModule1.SourceDatabaseADOConnection.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='+SourceDatabaseNameComboBox.Text+';Data Source='+MyServerName;
  TB_DfmDataModule1.SourceDatabaseADOConnection.GetTableNames(SourceTablenames,False);
  if SourceTablenames.IndexOf('TTableName')<>-1 then
  begin
    for i:=0 to SourceTablenames.Count-1 do
    begin
      if (Copy(SourceTablenames[i],1,1)='T') or (Copy(SourceTablenames[i],1,1)='D') then
      begin
        MidalTableNameString:=LowerCase(Trim(Copy(SourceTablenames[i],2,50)));
        with TB_DfmDataModule1.ChineseTableNameADOQuery do
        begin
          Close;
          Sql.Clear;
          Sql.Add('Select * From TTableName');
          try Open;
           except
             ShowMessage('error');
             Exit;
          end;
        end;
        TB_DfmDataModule1.ChineseTableNameADOQuery.First;
        while not TB_DfmDataModule1.ChineseTableNameADOQuery.Eof do
        begin
          if LowerCase(Trim(TB_DfmDataModule1.ChineseTableNameADOQuery.FieldByName('FieldNameE').AsString))=MidalTableNameString then
            SourceTablenames[i]:=SourceTablenames[i]+'('+Trim(TB_DfmDataModule1.ChineseTableNameADOQuery.FieldByName('FieldNameC').AsString)+')';
          TB_DfmDataModule1.ChineseTableNameADOQuery.Next;
        end;
      end;
    end;
  end;
  SourceTableNameCheckListBox.Items.Assign(SourceTablenames);
  SourceTablenames.Free;
end;

end.

⌨️ 快捷键说明

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