需要导入SQL的excel的列名出现空格,如何先批量去除这些空格再导入EXCEL。具体给出源代码吧谢谢

gyl1989113 2011-03-08 02:16:48
我的代码是这样的。。。(adoquery1是连接数据库的查询,adoquery2是连接excel的查询)

try
sFileName := OpenDialog1.FileName;
ADOConnection2.Connected := False; //注意这里 连接 EXCEL 的参数 //关键是这里
ADOConnection2.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' + sFileName + ';Extended Properties="Excel 8.0;IMEX=1";Persist Security Info=False';
ADOConnection2.Connected := True;
//showmessage('连接execl成功');
sl := TStringList.Create;
ADOConnection2.GetTableNames(sl); // 记住 Excel 文件的 底部 必须是 sheet1 否则不能导入
sTableName := sl[0];
//showmessage(sTableName);
if Pos('$', sTableName) > 0 then sTableName := '[' + sTableName + ']';

ADOquery2.Close;
ADOquery2.SQL.Clear;
ADOquery2.SQL.Text := 'SELECT * FROM ' + sTableName;
//showmessage(ADOquery2.SQL.Text);
ADOquery2.Open;
sl.Free;



ADOquery1.Close;
ADOquery1.Sql.Text := 'SELECT top 1 * FROM data2011 where 1=0'; //打开 空记录表....这里可以用 insert,不用append
//showmessage(ADOquery1.Sql.Text);
ADOquery1.Open; //根据自己习惯 做吧...
//该语句用来执行Query1中的SQL命令语句, 如果执行查询从数据库中获得查询结果,查询结果会在数据网格DBGrid1中显示出来。


if ADOquery2.RecordCount > 0 then
begin

ADOquery2.First;
for i := 1 to ADOquery2.RecordCount do //
begin
ADOquery1.Append;
ADOquery1.FieldValues['商户名']:=trim(ADOquery2.FieldValues['商户名']);
ADOquery1.FieldValues['分子公司']:=trim(ADOquery2.FieldValues['分子公司']);
ADOquery1.FieldValues['成功笔数(不含跨行)']:=trim(ADOquery2.FieldValues['成功笔数(不含跨行)']);
ADOquery1.FieldValues['成功金额(不含跨行)']:=trim(ADOquery2.FieldValues['成功金额(不含跨行)']);
ADOquery1.FieldValues['跨行发送银行笔数']:=trim(ADOquery2.FieldValues['跨行发送银行笔数']);
ADOquery1.FieldValues['跨行发送银行金额']:=trim(ADOquery2.FieldValues['跨行发送银行金额']);
ADOquery1.FieldValues['应收收入']:=trim(ADOquery2.FieldValues['应收收入']);


ADOquery1.Post;

ADOquery2.Next;
end;

end;



MessageBox(Handle,'导入完成!','完成!',MB_OK+MB_ICONINFORMATION);
except
MessageBox(Handle,'失败!','信息!',MB_OK+MB_ICONINFORMATION);

end;

end;



运行后没报错,但导入时出现ADOquery2.FieldValues['成功笔数(不含跨行)'])等均提示not found 成功笔数(不含跨行)等错误。跨行发送银行笔数'和跨行发送银行金额也是这个错误。我找了半天才发现需要导入的excel的列名不是前面有空格,就是后面有空格,请问如何预处理这些EXCEL的列名然后在导入。
...全文
1465 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
S_Slan 2011-03-16
  • 打赏
  • 举报
回复
你可以先再查询里处理,再导入
goodhj 2011-03-08
  • 打赏
  • 举报
回复
if ADOquery2.RecordCount > 1 then//第一行是标题列
begin

ADOquery2.First;
ADOquery2.Next;//第二行才是数据
for i := 1 to ADOquery2.RecordCount do //
begin
ADOquery1.Append;
ADOquery1.FieldByName('商户名').AsString:=trim(ADOquery2.FieldByName('F1').AsString);//F1就是字段1,是第一个字段,也就是'商户名'那一列;
ADOquery1.FieldByName('分子公司').AsString:=trim(ADOquery2.FieldByName('F2').AsString);//字段2['分子公司']);
ADOquery1.FieldByName('[成功笔数(不含跨行)]'):=trim(ADOquery2.FieldByName('F3').AsString);//字段3['成功笔数(不含跨行)']);你字段名里带有()所以需要有[]来确定字段名,你可以用你的方式导入,但是字段名是一定要有[]的
....

ADOquery1.Post;

ADOquery2.Next;
end;

end;


gyl1989113 2011-03-08
  • 打赏
  • 举报
回复
ADOquery1.FieldValues['商户名']:=ADOquery2.FieldValues['商户名'];换为ADOquery1.FieldValues['商户名']:=ADOquery2.FieldByName('商户名').asstring?

kye_jufei 2011-03-08
  • 打赏
  • 举报
回复
直接賦值。。
lovelymelon 2011-03-08
  • 打赏
  • 举报
回复
建议不要用fieldvalues['商户名']而是使用trim(filedbyname('商户名').asstring)这样应该可以处理掉数据中有空格的情况

字段名有空格的情况,最简单的方法就是采用1楼的方法,用fields[1].asstring,其中1就是字段的顺序号,这要求你的excel表列顺序是固定的
gyl1989113 2011-03-08
  • 打赏
  • 举报
回复
这个程序是公司同事要求做的。他一天要导入100多张表。。不可能每个EXCEL的列都去判断有没有空格,因为有空格无法进行运算等操作。。。现在还有新的问题。。不仅列名有空格,里面内容也有空格,我特意改好一个excel所有的列名,然后导入到数据库中出现
像“阳光人寿保险股份有限公司四川分公司??”,“?? 5,491.00”等这样的数据。。这些数据如果再导出到一张EXCEL,这个EXCEL根本没法用。。哎。。。请问下如何去除excel各列数据中的空格,谢谢。因为这些?号就是空格,导入到数据库后就成了?号。真悲剧。。谁能提供个处理excel空格的源代码格外加分吧。呵呵。。大家帮帮忙。谢谢。
gyl1989113 2011-03-08
  • 打赏
  • 举报
回复
大哥能说详细点吗?我的这段代码是根据excel字段名称来读入相应列的数据并导入到数据库中,
fields[1]是什么呢。。我没用过?这样改导入时程序如何知道该哪个字段导入哪个SQL的列中呢。。。还有我建数据库的时候所有的列都是nvarchar[255]型,转换为string会不会出现数据转换错误。。
谢谢。
dinoalex 2011-03-08
  • 打赏
  • 举报
回复
adoquery2.fields[1].asstring

2,507

社区成员

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

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