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

📄 unit_importdata.pas

📁 一个不错的源程序DELPHI开发的,功能比较好的客户管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
         Str :=copy(Str,1,length(Str)-1)+' )';
         query1.sql.text :=Str;
         //加上数值
         for k:=0 to P_LinkCount -1 do
         begin
           //只有四种格式的字段类型
           if not ((uppercase(P_Link[k].DataCode.DATA_TYPE)='VARCHAR2') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='CHAR') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='NUMBER') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='DATE')) then
           begin
             memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                +',不支持该列数据格式!');
             LBz1 :=true;
             continue;
           end;
           //和字段类型有关,现在只支持四中类型
           //和字段长度有关
           if (uppercase(P_Link[k].DataCode.DATA_TYPE)='VARCHAR2') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='CHAR') then
           begin
             if uppercase(P_Link[k].DataCode.NULLABLE)='N' then
             begin
               if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
               begin
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',数值为空,而字段为非空!');
                 LBz1 :=true;
                 continue;
               end;
             end;

             if length(Values[strtoint(P_Link[k].DataCode.LinkCol)])
                >strtoint(P_Link[k].DataCode.DATA_LENGTH) then
             begin
               memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                  +',数值超过长度!');
               LBz1 :=true;
               continue;
             end
             else
               begin
                 query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :=
                 Values[strtoint(P_Link[k].DataCode.LinkCol)];
               end;
           end;
           if uppercase(P_Link[k].DataCode.DATA_TYPE)='DATE' then
           begin
             if uppercase(P_Link[k].DataCode.NULLABLE)='N' then
             begin
               if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
               begin
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',数值为空,而字段为非空!');
                 LBz1 :=true;
                 continue;
               end;
             end;

             if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])<>'' then
             begin
               try
                  strtodatetime(Values[strtoint(P_Link[k].DataCode.LinkCol)]);
               except
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',时间格式错误!');
                 LBz1 :=true;
                 continue;
               end;
               query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asdatetime :=
               strtodatetime(Values[strtoint(P_Link[k].DataCode.LinkCol)]);
             end
               else
               query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :='';
           end;
           if uppercase(P_Link[k].DataCode.DATA_TYPE)='NUMBER' then
           begin
             if uppercase(P_Link[k].DataCode.NULLABLE)='N' then
             begin
               if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
               begin
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',数值为空,而字段为非空!');
                 LBz1 :=true;
                 continue;
               end;
             end;
              if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])<>'' then
              begin
                try
                  strtoint64(Values[strtoint(P_Link[k].DataCode.LinkCol)]);
                except
                  memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',不是数字,错误!');
                  LBz1 :=true;
                  continue;
                end;
              end;
             //数字麻烦
             if length(Values[strtoint(P_Link[k].DataCode.LinkCol)])
                >strtoint(P_Link[k].DataCode.DATA_LENGTH) then
             begin
               memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                  +',数值超过长度!');
               LBz1 :=true;
               continue;
             end
             else
               begin
                 if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
                 query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :=''
                 else
                 query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :=
                 Values[strtoint(P_Link[k].DataCode.LinkCol)];
               end;
           end;
         end;//end for k:=0 to P_LinkCount -1 do
         //表示已经有字段插入出错了
         if LBz1 then
         begin
           LBz :=true;
           continue;
         end
           else
             LBz1 :=false;
         try
           Dm_Main.Databasedh.StartTransaction;
           query1.ExecSQL;
           Dm_Main.Databasedh.Commit;
         except
           //messagedlg('第'+inttostr(i+1)+'行出错'+'   :违反唯一性原则或者其他数据库原因',mtInformation	,[mbok],0);
           Memo2.Lines.add('第'+inttostr(i+1)+'行出错'+'   :违反唯一性原则或者其他数据库原因');
           Dm_Main.Databasedh.Rollback;
           LBz :=true;
           continue;
         end;
     end;
  end
   else
     begin
       //Excel
       colcount :=ListView1.Columns.Count;
       rowcount :=ListView1.Items.Count;
       //判断连接数大于实际有的列数
       if P_LinkCount >colcount then
       begin
         messagedlg('连接的列数大于实际文件的列数,错误!',mtInformation	,[mbok],0);
         PnlPrint.Visible :=false;
         exit;
       end;

       //一行一行地导入
       for i:=0 to rowcount -1  do
       begin
           //一行的每格存到数组里
           for j:=0 to colcount -1  do
           begin
             if j=0 then
             StrValues :=ListView1.Items[i].Caption
             else
             StrValues :=ListView1.Items[i].SubItems[j -1];
             Values[j] :=trim(StrValues);
           end;

           //*****用这个数组进行插入表 ,要判断数据的合法性*******
           //*****非空字段不能为空,字段的长度和类型等***********
           query1.close;
           Str :='insert into '+tablename+' (';
           StrField :='';
           StrValues :='';
           for k:=0 to P_LinkCount -1 do
           begin
             StrField :=StrField+P_Link[k].DataCode.COLUMN_NAME+',';
             StrValues :=StrValues+':'+P_Link[k].DataCode.COLUMN_NAME+',';
           end;
           Str :=Str+StrField;
           Str :=copy(Str,1,length(Str)-1)+')';
           Str :=Str+' values('+StrValues;
           Str :=copy(Str,1,length(Str)-1)+' )';
           query1.sql.text :=Str;
         //加上数值
         for k:=0 to P_LinkCount -1 do
         begin
           //只有四种格式的字段类型
           if not ((uppercase(P_Link[k].DataCode.DATA_TYPE)='VARCHAR2') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='CHAR') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='NUMBER') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='DATE')) then
           begin
             memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                +',该列数据格式不支持!');
             LBz1 :=true;
             continue;
           end;
           //和字段类型有关,现在只支持四中类型
           //和字段长度有关
           if (uppercase(P_Link[k].DataCode.DATA_TYPE)='VARCHAR2') or
              (uppercase(P_Link[k].DataCode.DATA_TYPE)='CHAR') then
           begin
             if uppercase(P_Link[k].DataCode.NULLABLE)='N' then
             begin
               if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
               begin
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',数值为空,而字段为非空!');
                 LBz1 :=true;
                 continue;
               end;
             end;
             if length(Values[strtoint(P_Link[k].DataCode.LinkCol)])
                >strtoint(P_Link[k].DataCode.DATA_LENGTH) then
             begin
               memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                  +',数值超过长度!');
               LBz1 :=true;
               continue;
             end
             else
               begin
                 query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :=
                 Values[strtoint(P_Link[k].DataCode.LinkCol)];
               end;
           end;
           if uppercase(P_Link[k].DataCode.DATA_TYPE)='DATE' then
           begin
             if uppercase(P_Link[k].DataCode.NULLABLE)='N' then
             begin
               if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
               begin
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',数值为空,而字段为非空!');
                 LBz1 :=true;
                 continue;
               end;
             end;

             if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])<>'' then
             begin
               try
                  strtodatetime(Values[strtoint(P_Link[k].DataCode.LinkCol)]);
               except
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',时间格式错误!');
                 LBz1 :=true;
                 continue;
               end;
               query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asdatetime :=
               strtodatetime(Values[strtoint(P_Link[k].DataCode.LinkCol)]);
             end
               else
               query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :='';
           end;
           if uppercase(P_Link[k].DataCode.DATA_TYPE)='NUMBER' then
           begin
             if uppercase(P_Link[k].DataCode.NULLABLE)='N' then
             begin
               if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
               begin
                 memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',数值为空,而字段为非空!');
                 LBz1 :=true;
                 continue;
               end;
             end;
              if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])<>'' then
              begin
                try
                  strtoint64(Values[strtoint(P_Link[k].DataCode.LinkCol)]);
                except
                  memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                    +',不是数字,错误!');
                  LBz1 :=true;
                  continue;
                end;
              end;
             //数字麻烦
             if length(Values[strtoint(P_Link[k].DataCode.LinkCol)])
                >strtoint(P_Link[k].DataCode.DATA_LENGTH) then
             begin
               memo2.Lines.add('第'+inttostr(i+1)+'行'+'第'+inttostr(k+1)+'列'
                  +',数值超过长度!');
               LBz1 :=true;
               continue;
             end
             else
               begin
                 if trim(Values[strtoint(P_Link[k].DataCode.LinkCol)])='' then
                 query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :=''
                 else
                 query1.ParamByName(P_Link[k].DataCode.COLUMN_NAME).asstring :=
                 Values[strtoint(P_Link[k].DataCode.LinkCol)];
               end;
           end;
         end;//end for k:=0 to P_LinkCount -1 do
         if LBz1 then
         begin
           LBz :=true;
           continue;
         end
           else
             LBz1 :=false;
           try
             Dm_Main.Databasedh.StartTransaction;
             query1.ExecSQL;
             Dm_Main.Databasedh.Commit;
           except
             Memo2.Lines.add('第'+inttostr(i+1)+'行出错'+'   :违反唯一性原则或者其他数据库原因');
             Dm_Main.Databasedh.Rollback;
             LBz :=true;
             continue;
           end;
       end;

     end;

   PnlPrint.Visible :=false;
   //万一有错,不好跟踪那条,还是把出错的都记录下来呢?
   if LBz=false then
     messagedlg('导入数据成功!',mtInformation	,[mbok],0)
   else
     messagedlg('导入数据中出现错误,请查看错误日志!',mtInformation	,[mbok],0);

   button3.Enabled :=false;
end;

procedure TFrm_ImportData.FormShow(Sender: TObject);
var
  Ldata:TDataCode1;
  str :string;
begin
  button3.Enabled :=false;
  P_Add :=false;
  Panel4.Visible :=false;
  PnlPrint.Visible :=false;
  P_TxtOrExcel :=false;
  ListView1.Columns.Clear;
  ListView1.Items.Clear;
  ListView1.Visible :=false;
  CheckBox1.Checked :=true;
  Edit1.text :='';
  Memo1.Clear;
  P_Title :=true;
  //初始化表名的下拉框
  FreeNodeCombobox(Combobox);
  ComboBox.Clear;
  
  //如果配置表建出来了,要进行改动
  query1.close;
  query1.sql.text :=
    'Select distinct TABLE_NAME FROM user_tab_columns ';
  query1.open;
  query1.First;
  while not query1.Eof do
  begin
    //得到表注释
    query2.close;
    query2.sql.Text :=
    'Select COMMENTS FROM USER_TAB_COMMENTS where TABLE_NAME='
    +#39+query1.FieldByName('TABLE_NAME').AsString+#39;
    query2.open;
    str :=query2.Fields[0].asstring;
    if trim(str) <>'' then
    begin
      Ldata:=TdataCode1.Create;
      Ldata.Code:=trim(query1.FieldByName('TABLE_NAME').AsString);

      ComboBox.Items.AddObject(trim(str),Ldata);
    end;
    query1.Next;
  end;
  if trim(P_InTableName)<>'' then
  begin
    combobox.ItemIndex :=GetCodeIndex(combobox,trim(P_InTableName));
  end;
end;

procedure TFrm_ImportData.Panel4DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  accept:=true;   //允许拖放该控件
end;

procedure TFrm_ImportData.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin

⌨️ 快捷键说明

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