使用ADO将excel的数据导入access后,身份证号自动变成科学计数法,如何解决?
(注:Excel的字段不固定,所显示身份证号的字段名称也不固定)相关代码如下;
procedure TFormConfig.Button1Click(Sender: TObject);
 var
   SQLStr:string;
   ms:TStringList;
 begin
      access:=ExtractFilePath(Application.ExeName)+'.\db.mdb'; //获取绝对路径
      adoconnection2.Connected:=false;
      ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+access+';'+'Persist Security Info=False';
      ms:=TStringList.Create;
      ADOConnection2.GetTableNames(ms);
         if ms.IndexOf(MyNumber.Text)<0 then
           begin
                  SQLStr:='select * into '+MyNumber.Text+' FROM [excel 8.0;database='+excel.Text+'].['+ComboBox1.Text+'$]';
                  ADOConnection2.Execute(SQLStr);
                  adoconnection2.Connected:=true;
                  showmessage('数据导入成功!');
           end
         else 
            showmessage('请输入正确数据!');
end;

解决方案 »

  1.   

    只要将EXCEL文件中身份证一栏改成文字类型就可以了。
      

  2.   

    身份证最少都15位,新的18位,用数字类型字段是存不下的可以肯定的是,你的excel格式已经是科学记数法了,所以你要把excel中那一列变成字符型存储才行,这是excel的问题
      

  3.   

    我把EXCEL的身份证字段改成文本型后,反而变成科学计数法了,设置成特殊或者自定义后,EXCEL的身份证号全部显示了,但是导入到ACCESS后又变为科学计数法
      

  4.   

    解决方法一: 导入 之后, 身份证号这一列数据类型应该是数字类型, 你有Access中把这一列改成文本类型就可以了解决方法二: 自己写一个对Excel的扫描函数,事先建好表,, 从Excle里读数据,写到Access里..
      

  5.   

    随便找个文员,应该都知道excel中怎么把单元格存储格式数字变文本选中这一列->菜单->数据->分列->下一步->下一步->列数据格式->选中"文本"->完成
      

  6.   


    解决办法一: 导入后改 Access表中字段的类型由"数字"改为"文本", 不是改Excel的. 这个绝对是可以的.因为我之前也遇到过类似问题解决办法二:其实很简单的.比如数据表这样定义
    create table TIdentify(
     iid integer, --标识列, 在Access中可以用 自增类型
     iIdCard varchar2(18)  --存储身份证号, 在Access中用 "文本"类型
    )var
     ExcelPath: string;
     ExcelId: TExcelApplication;
     ExcelWorkSheet: TExcelWorksheet;
     ExcelWorkBook: TExcelWorkbook;
     Row,i: Integer;
     bEmpty: Boolean;
    begin
      ExcelPath:= ExtractFilePath(Application.ExeName)+ 'ExcelName.xls';
      ExcelId:= TExcelApplication.Create(Application);
      ExcelWorkSheet:= TExcelWorksheet.Create(ExcelId);
      ExcelWorkBook:= TExcelWorkbook.Create(ExcelWorkSheet);
      ExcelId.Workbooks.Open(ExcelPath,null,null,null, null, null, null, null, null, null, null, null, null, 0);
      ExcelWorkSheet.ConnectTo(ExcelId.Worksheets[1] as _worksheet);
      //以上部分最好放在Try块中, 以防打开失败
      with queryId do begin
        close;
        sql.text:= 'select *  from TIdentify where 1=2';
        open;
      end;
      Row:= 1;
      while true do begin
        cellsval:= Trim(ExcelWorkSheet.Cells.Item[Row,1]); //这里假设只有身份证号一列
        //其它列可以自己加上
        if cellsval='' then break; 
        with queryId do begin
           append;
           FieldByname('iid').asinteger:= row; //如果字段是 自动增长类型, 就去掉这里的赋值(不建议有自增字段, 除非这个表是做日志之类的和其它表无关联的信息)
           FieldByname('iIdCard ').asString:= cellsval;
           post;
        end;    
      end; //end while true
      ExcelID.WorkBooks.Close(0);
      ExcelWorkbook.Free;
      ExcelWorkbook := nil;
      ExcelID.Disconnect;
      ExcelID.Quit;
      ExcelID.Destroy;
      //这些释放与关闭最好放在Try..finally后去处理..  showmessage('导入成功');
    end;
    //上边代码为大概逻辑, 用try..except 和try finally 去包裹就可以了..需要其它字段直接添加. 
      

  7.   

    解决方法一,试过了,改成文本后还是显示科学计数法
    这个你可能改的不是Access表的类型中... 不要搞混了.. 如果在Excel里改格式. 那是不行的.. 因为Excel里设置的格式只是做显示用的..  解决方法二. 这里在读Excel中所有列的时候,每个单元格的数据都是按字符串去处理的.. 所以就不会出现科学计数法显示的问题.