使用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;
(注: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;
解决方案 »
- 在线等~~~ access violation at address问题!
- expected end but invalid character 什么问题阿?
- 如何用DELPHI实现隧道监控类的软件
- 布尔型变量
- 怎么在Memo中添加文本内容又不会产生闪烁呢?
- 高手进!
- 一个难题,救救我...
- 如何编程实现网络共享功能(不用其它代理软件)?即一台没有Modem的机器共享另一台有Modem的机器上网。或像SocksOnline软件一样,SocksOnline是怎么实现的?注是
- 想让你的参与分暴涨吗?请进来
- cxgrid 怎么判断鼠标点到数据行下方的空白区域
- 求tcpsever 函数sendto和ReceiveFrom函数的参数说明!
- 使用listview 自绘 文字的时候,像素后移出现一个奇怪的问题
解决办法一: 导入后改 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 去包裹就可以了..需要其它字段直接添加.
这个你可能改的不是Access表的类型中... 不要搞混了.. 如果在Excel里改格式. 那是不行的.. 因为Excel里设置的格式只是做显示用的.. 解决方法二. 这里在读Excel中所有列的时候,每个单元格的数据都是按字符串去处理的.. 所以就不会出现科学计数法显示的问题.