excel导入数据问题

zswqyj521 2010-08-14 12:04:20
用的是MySQL数据库,将表里的数据导出是可以的,但是导入的时候,就某一个字段的值无法导入,在MySQL的那张表里该字段的值是null,但是在excel的表里这个字段是有值的,也就是说是导入出了问题。
MySQL中该字段的属性是char5,允许空值,求解释
...全文
79 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
appley 2010-08-18
  • 打赏
  • 举报
回复
可以把EXCEL表全部用TEXT格式,格式话一下。
天牌 2010-08-17
  • 打赏
  • 举报
回复
可能有些值的长度超过了字段长度
lovewjp 2010-08-17
  • 打赏
  • 举报
回复
关于数据导入的问题,我说一些自己的想法,因为我在自己的项目中也是这么用的,感觉灵活性还是不错的.
1 首先定义目标表需要导入的字段列表以及一些相关的属性如类型 长度 等.
2 导入可以用向导方式,这样可以做成通用的数据导入模块.
3 源表可以是任务数据表,只要在导入前配置好和目标表的字段的对应关系.
4 可以添加异常数据的处理机制,如出现无法导入的记录跳过,再加上事务控制,基本上可以实现通用的导入方法.


kye_jufei 2010-08-14
  • 打赏
  • 举报
回复
導入的時候判斷處理一下即可。。。我提供一段excel導入sql的代碼,拋磚引玉,供參考之:

procedure TRES_DCC_ECRN_F.cxButton1Click(Sender: TObject);
var
ExcelApp,WorkBook:Olevariant;
ExcelSheetCount,i,k:Integer;
begin
inherited;
if RzButtonEdit1.Text <>'' then
begin
if (ExtractFileExt(RzButtonEdit1.Text)<>'.xls') then
begin
MessageDlg('請選擇要導入的Excel檔案!',mtWarning,[mbOK],0);
RzButtonEdit1.Clear;
end
else
begin
try
Application.ProcessMessages;
ExcelApp:=CreateOleObject('Excel.Application');
WorkBook:=ExcelApp.WorkBooks.Open(RzButtonEdit1.Text);
ExcelApp.Visible:=False;
ExcelSheetCount:=WorkBook.WorkSheets.Count;
for i:=1 to ExcelSheetCount do
begin
Screen.Cursor:=crSQLWait;
WorkBook.WorkSheets[i].Activate;
a:=ExcelApp.Cells[4,2].Value;
b:=ExcelApp.Cells[8,2].Value;
c:=ExcelApp.Cells[14,2].Value;
d:=ExcelApp.Cells[21,2].Value;
e:=ExcelApp.Cells[22,2].Value;
f:=ExcelApp.Cells[23,2].Value;
if ((Copy(Trim(a),1,3)<>'ECR') and (b<>'')) and ((Copy(Trim(a),1,3)<>'DCR') and (b<>'')) then
begin
MessageDlg('檔案格式錯誤!',mtWarning,[mbOK],0);
InsertErrorLOG;
Screen.Cursor:=crDefault;
Exit;
end;

with adoq_ecrn do
begin
Close;
SQL.Text:='select * from RES_ECR_TYPE where ECRNO='''+ a+'''';
Open;
if RecordCount=1 then
begin
MessageDlg('請檢查:導入檔案時編號"'+ a+'"的記錄重復!',mtWarning,[mbOK],0);
InsertRepeatLOG;
Screen.Cursor:=crDefault;
Exit;
end;
end;

with adoq_ecrn do
begin
Close;
SQL.Clear;
SQL.Add('insert into RES_ECR_TYPE(ECRNO,DESOFCHANGE,RELEASEDATE,RESPEOPLE,ISSUEDEPT,MODEL) values(:a,:b,:c,:d,:e,:f)');
Parameters.ParamByName('a').Value:=a;
Parameters.ParamByName('b').Value:=b;
Parameters.ParamByName('c').Value:=Trim(Copy(c,1,19));
Parameters.ParamByName('d').Value:=d;
Parameters.ParamByName('e').Value:=e;
Parameters.ParamByName('f').Value:=f;
ExecSQL;
end;
InsertECRLOG;

ProgressBar1.Min:=0;
ProgressBar1.Max:=ExcelSheetCount;
for k:=33 to WorkBook.WorkSheets[i].usedrange.rows.count do
begin
g:=ExcelApp.Cells[K,1].Value;
q:=ExcelApp.Cells[k,2].Value;
w:=ExcelApp.Cells[k,3].Value;
v:=ExcelApp.Cells[k,4].Value;
r:=ExcelApp.Cells[k,5].Value;
t:=ExcelApp.Cells[k,6].Value;
y:=ExcelApp.Cells[k,7].Value;
u:=ExcelApp.Cells[k,8].Value;
o:=ExcelApp.Cells[k,9].Value;
if (q<>'')and(w<>'') then
with adoq_item do
begin
Close;
SQL.Clear;
SQL.Add('insert into RES_ECR_ITEM(GROUPID,ECRNO,ITEMNO,ITEMDESPTION,FZRELATION,CHANGETYPE,BEFORECHANGE,AFTERCHANGE,PROPOSE,REMARK) values(:g,:p,:q,:w,:v,:r,:t,:y,:u,:o)');
Parameters.ParamByName('g').Value:=g;
Parameters.ParamByName('p').Value:=a;
Parameters.ParamByName('q').Value:=q;
Parameters.ParamByName('w').Value:=w;
Parameters.ParamByName('v').Value:=v;
Parameters.ParamByName('r').Value:=r;
Parameters.ParamByName('t').Value:=t;
Parameters.ParamByName('y').Value:=y;
Parameters.ParamByName('u').Value:=u;
Parameters.ParamByName('o').Value:=o;
ExecSQL;
ProgressBar1.Position:=ProgressBar1.Position+1;
end;
end;
Screen.Cursor:=crDefault;
Application.ProcessMessages;
ProgressBar1.Position:=0;
RefreshECRN;
RefreshGroupItem;
SendToEmail;
Zt:=1;
end;
finally
ExcelApp.ActiveWorkBook.Saved:=True;
WorkBook.Close;
ExcelApp.Quit;
end;
end;
end
else
begin
MessageDlg('請選擇要導入的Excel檔案!',mtWarning,[mbOK],0);
Exit;
end;
end;

2,507

社区成员

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

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