关于将excel导入access后身份证号自动变为科学计数法的问题如何解决

vodown 2012-07-23 06:00:10
使用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;




...全文
779 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaikai_kk 2012-07-25
  • 打赏
  • 举报
回复
随便找个文员,应该都知道excel中怎么把单元格存储格式数字变文本

选中这一列->菜单->数据->分列->下一步->下一步->列数据格式->选中"文本"->完成
jiajiajing6 2012-07-25
  • 打赏
  • 举报
回复
解决方法一,试过了,改成文本后还是显示科学计数法


这个你可能改的不是Access表的类型中... 不要搞混了.. 如果在Excel里改格式. 那是不行的.. 因为Excel里设置的格式只是做显示用的..

解决方法二. 这里在读Excel中所有列的时候,每个单元格的数据都是按字符串去处理的.. 所以就不会出现科学计数法显示的问题.
jiajiajing6 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
解决方法一: 导入 之后, 身份证号这一列数据类型应该是数字类型, 你有Access中把这一列改成文本类型就可以了

解决方法二: 自己写一个对Excel的扫描函数,事先建好表,, 从Excle里读数据,写到Access里..


解决方法一,试过了,改成文本后还是显示科学计数法
解决方法二: 这个难度有点大,超出个人能力
[/Quote]

解决办法一: 导入后改 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 去包裹就可以了..需要其它字段直接添加.
vodown 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
解决方法一: 导入 之后, 身份证号这一列数据类型应该是数字类型, 你有Access中把这一列改成文本类型就可以了

解决方法二: 自己写一个对Excel的扫描函数,事先建好表,, 从Excle里读数据,写到Access里..

[/Quote]
解决方法一,试过了,改成文本后还是显示科学计数法
解决方法二: 这个难度有点大,超出个人能力
ysai 2012-07-24
  • 打赏
  • 举报
回复
导入前 在内容前面加上`这个字符(数字1左边那个)
vodown 2012-07-24
  • 打赏
  • 举报
回复
我把EXCEL的身份证字段改成文本型后,反而变成科学计数法了,设置成特殊或者自定义后,EXCEL的身份证号全部显示了,但是导入到ACCESS后又变为科学计数法
jiajiajing6 2012-07-24
  • 打赏
  • 举报
回复
解决方法一: 导入 之后, 身份证号这一列数据类型应该是数字类型, 你有Access中把这一列改成文本类型就可以了

解决方法二: 自己写一个对Excel的扫描函数,事先建好表,, 从Excle里读数据,写到Access里..
kaikai_kk 2012-07-23
  • 打赏
  • 举报
回复
身份证最少都15位,新的18位,用数字类型字段是存不下的

可以肯定的是,你的excel格式已经是科学记数法了,所以你要把excel中那一列变成字符型存储才行,这是excel的问题
vodown 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
只要将EXCEL文件中身份证一栏改成文字类型就可以了。
[/Quote]

改了,试过不行,还是保存为科学计数法了
Oraclers 2012-07-23
  • 打赏
  • 举报
回复
只要将EXCEL文件中身份证一栏改成文字类型就可以了。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧