本帖最后由 bjcx994 于 2010-01-25 17:31:43 编辑

解决方案 »

  1.   

    OLE的不喜欢,因为用OLE的话,电脑一定要装EXCEL,好像装了精简版的都会出问题!
      

  2.   

    通过OLE取当前Sheet名
    ExcelApp.Workbooks[1].ActiveSheet
      

  3.   

    用这个
    dm.ADOConnUser.GetTableNames我就是这么取的
      

  4.   


    你的连接串请问是如何写的,我现在也用这个,但是问题是我在用一楼所写的连接串时取不出表,但是如果自己写SQL是能查询出来的。
      

  5.   

    其实让客户装个EXCEL倒没什么,常用办公软件而已,我们都是这样要求的。
      

  6.   

    Delphi syntax:procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);应该能取得所有的sheet.
      

  7.   

    正在研究用BIFF8格式来直接读EXCEL的方法,这样就可以不装EXCEL了,也比OLE方式快
      

  8.   

    是这个吗,如果是就取不到
    procedure TADOConnection.GetTableNames(List: TStrings;
      SystemTables: Boolean);
    var
      TypeField,
      NameField: TField;
      TableType: string;
      DataSet: TADODataSet;
    begin
      CheckActive;
      DataSet := TADODataSet.Create(nil);
      try
        OpenSchema(siTables, EmptyParam, EmptyParam, DataSet);
        TypeField := DataSet.FieldByName('TABLE_TYPE'); { do not localize }
        NameField := DataSet.FieldByName('TABLE_NAME'); { do not localize }
        List.BeginUpdate;
        try
          List.Clear;
          while not DataSet.EOF do
          begin
            TableType := TypeField.AsString;
            if (TableType = 'TABLE') or (TableType = 'VIEW') or     { do not localize }
               (SystemTables and (TableType = 'SYSTEM TABLE')) then { do not localize }
              List.Add(NameField.AsString);
            DataSet.Next;
          end;
        finally
          List.EndUpdate;
        end;
      finally
        DataSet.Free;
      end;
    end;
      

  9.   


    原来是参数问题dm.ADOConnUser.GetTableNames(lsttablename.Items ,False ); 就不行
    dm.ADOConnUser.GetTableNames(lsttablename.Items ,True );就可以了