起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: 刺青

【结贴】TExcelToTable导入问题

[复制链接]
发表于 2009-9-25 14:03:18 | 显示全部楼层
可以
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-25 15:06:39 | 显示全部楼层
请问跳出图片这个是什么意思?
代码:
procedure CopyRecord(T1, T2: TDataSet);
var
  I: Integer;
  T2ColName: string;
begin
  for I := 0 to T2.FieldCount - 1 do
  begin
    T2ColName := T2.Fields[I].FieldName;
    if (T1.FindField(T2ColName) = nil) then  continue;
      T2.FieldByName(T2ColName).Assign(T1.FieldByName(T2ColName));
  end;
end;


procedure CopyDataSet(T1, T2: TDataSet);
begin
  T1.DisableControls;
  try
    T1.First;
    while not T1.Eof do
    begin
      T2.Append;
      CopyRecord(T1, T2);
      T1.Next;
    end;
  finally
    T1.EnableControls;
  end;
end;

procedure CopyStuct(T1: TDataSet; T2: TUserDataSet);
var
  uf: TUserField;
  i: Integer;
begin
  for i:=0 to T1.FieldCount-1 do
  begin
    uf := TUserDataField.Create(T2);
    uf.DataSet := T2;
    uf.ID := T1.Fields.FieldName;
    uf.Precision := T1.Fields.Size;
    uf.DisplayName := T1.Fields.FieldName;
  end;
end;



procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
  ADOConnection1.ConnectionString := 'Provider=MSDASQLersist Security Info=False;Data Source=EX;Extended Properties="DSN=EX;DefaultDir=C:11.xls;DriverId=27;FIL=text;MaxBufferSize=2048ageTimeout=5;"';
  ADOTable1.Open;
  if DataSetZDYSJJ1.BizFields.Count=0 then
  begin
    CopyStuct(TDAtaSet(ADOTable1), DataSetZDYSJJ1);
  end;
  DataSetZDYSJJ1.Open;
  DataSetZDYSJJ1.EmptyDataSet;
  CopyDataSet(TDataSet(ADOTable1), DataSetZDYSJJ1);
end;

1222.gif

190.82 KB, 下载次数: 150

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-25 15:08:21 | 显示全部楼层
错误信息如图:

111222.gif

177.65 KB, 下载次数: 142

回复 支持 反对

使用道具 举报

发表于 2009-9-25 15:09:11 | 显示全部楼层
如果不想出来,取消adocontion控件的 loginprompt属性。
回复 支持 反对

使用道具 举报

发表于 2009-9-25 15:09:35 | 显示全部楼层
你没有设置adotable的数据表名字吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-25 15:31:07 | 显示全部楼层
adotable的数据表名字是指什么?我写成这样,提示如图:
ADOTable1.TableName := 'EX';

o1.gif

573.51 KB, 下载次数: 144

回复 支持 反对

使用道具 举报

发表于 2009-9-25 15:33:45 | 显示全部楼层
不是EX,应该是你excel的sheet名称,类似于 [Sheet1$]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-25 15:51:14 | 显示全部楼层
改成这样ADOTable1.TableName := '11$'; 就OK了
但是ADOTable1.Open; 时,又提示如图的错误,要不远程,帮我看一下。

o2.gif

241.37 KB, 下载次数: 143

回复 支持 反对

使用道具 举报

发表于 2009-9-25 16:12:08 | 显示全部楼层
在tablename的两边加上“[]”就是'[11$]'
看看呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-25 17:02:06 | 显示全部楼层
procedure CopyRecord(T1, T2: TDataSet);
var
  I: Integer;
  T2ColName: string;
begin

  for I := 0 to T2.FieldCount - 1 do
  begin
    T2ColName := T2.Fields[I].FieldName;

    if (T1.FindField(T2ColName) = nil) then  continue;
      T2.FieldByName(T2ColName).Assign(T1.FieldByName(T2ColName));
  end;
end;


procedure CopyDataSet(T1, T2: TDataSet);   //CopyDataSet(TDataSet(ADOTable1), DataSetZDYSJJ1);
begin
  T1.DisableControls;
  try
    T1.First;
    while not T1.Eof do
    begin
      T2.Append;
      CopyRecord(T1, T2);
      T1.Next;
    end;
  finally
    T1.EnableControls;
  end;
end;

procedure CopyStuct(T1: TDataSet; T2: TUserDataSet);
var
  uf: TUserField;
  i: Integer;
begin
  for i:=0 to T1.FieldCount-1 do
  begin
    uf := TUserDataField.Create(T2);
    uf.DataSet := T2;
    uf.ID := T1.Fields.FieldName;
    uf.Precision := T1.Fields.Size;
    uf.DisplayName := T1.Fields.FieldName;
  end;
end;

procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
  ADOConnection1.ConnectionString := 'Provider=MSDASQLersist Security Info=False;Data Source=EX;Extended Properties="DSN=EX;DefaultDir=C:\Documents and Settings\Administrator\桌面\T001.xls;DriverId=27;FIL=text;MaxBufferSize=2048ageTimeout=5;"';
  ADOTable1.TableName := '[T001$]';
  ADOTable1.Open;
//  dialogs.ShowMessage(TDAtaSet(ADOTable1).Fields[1].FieldName);

  if DataSetZDYSJJ1.BizFields.Count=0 then
  begin
    CopyStuct(TDAtaSet(ADOTable1), DataSetZDYSJJ1);
  end;

  ADOTable1.First;
  while not ADOTable1.Eof do
  begin
    dialogs.ShowMessage(TDAtaSet(ADOTable1).Fields[0].AsString);     //现在还有数据
    ADOTable1.Next;
  end;

  DataSetZDYSJJ1.Open;                                 //-----------打开了自定义数据集,下面的就没有数据了!!
  DataSetZDYSJJ1.EmptyDataSet;

  ADOTable1.First;
  while not ADOTable1.Eof do
  begin
    dialogs.ShowMessage(TDAtaSet(ADOTable1).Fields[0].AsString);    //现在没有数据了
    ADOTable1.Next;
  end;

  CopyDataSet(TDataSet(ADOTable1), DataSetZDYSJJ1);
end;

为什么打开了自定义数据集之后,ADOTable1中就没有数据了呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-15 22:45 , Processed in 0.044599 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表