在用Ado打开Excel文件时,
excel中的每一张sheet则做为一个表来处理,
当sheet的名称出现中文时,
adoConnection读出的该excel文件中表名则为
   '5月份$', 其中含有单引号
 
   非中文名称的sheet表则映射为   sheet5$  并不包含单引号
问题就在于使用Adoquery查询时,若将'5月份$'作为表名代入SQL查询语句
一律报错, 非中文表名例如sheet5$, 则可以正常查询!请问各位,这个问题该如何解决?!

解决方案 »

  1.   

    有没有$这个是表示Range(范围),在存取Excel文件的时候就是要这个范围,而没有这个$是表示Sheet表示的工作表,所以查询不出来。其他的就是一样的。
      

  2.   

    把5月份$用双引号括起来select * from "5月份$"如果表名或列名不是合法的标志符则用“”括起来,好像forxpro和oracle都是,双引号里的字母一律大写但也不是绝对,access就不需要括,总之自己试一下,我用过access,excel,mysql,mssql,oracle,sybase还没碰到读不出来的情况
      

  3.   

    使用excelapplication啊!procedure TForm7.Button5Click(Sender: TObject);
    var
      Range:excelrange;
      i,j,k:integer;
      letter:char;
    begin
    if datasource1.DataSet=nil then showmessage('没有内容可以导入Excel!')
    else begin
      try
        try
        excelapplication1.Connect;
        except
        showmessage('您的机器没有安装Excel!');
        abort;
        end;
        excelapplication1.Visible[0]:=true;
        excelapplication1.Caption:='送修内容';
        excelapplication1.Workbooks.Add(NUll,0);    k:=datasource1.DataSet.FieldCount-4;    if datasource1.DataSet.Fields[k].DisplayLabel='COUNT OF 局名' then
         k:=4
        else k:=0;    i:=65+datasource1.DataSet.FieldCount-1-k;
        letter:=char(i);    range:=excelapplication1.Range['A1',letter+'1'];    for i:=0 to datasource1.DataSet.FieldCount-1-k do
          begin
          range.Value:=datasource1.DataSet.Fields[i].DisplayLabel;
          range:=range.Next;
          end;
        if k=4 then begin
        range.Value:='数量';
        dec(k);
        end;
        datasource1.DataSet.First;    for i:=1 to datasource1.DataSet.RecordCount do begin
          range:=excelapplication1.Range['A'+inttostr(i+1),letter+inttostr(i+1)];
          for j:=0 to datasource1.DataSet.FieldCount-1-k do begin
            range.Value:=datasource1.DataSet.Fields[j].AsString ;
            range:=range.Next;
            end;
          datasource1.DataSet.Next;
          end;  except
      excelapplication1.Disconnect;
      end;  end;
    end;