那你应该用ADOConnection1.OpenSchema()

解决方案 »

  1.   

    那我想把表名显示在listbox中,如何把英文名改为中文名呢?
    datamodule1.ADOConnection1.GetTableNames(listbox1.Items,false);
    其中的我需要的一些英文表名我已知道了。
      

  2.   

    不要调用GetTableNames,直接从DataBase Server的系统表Object中取出用户表(SQL Server),你也可以重载GetTableNames;
      

  3.   

    GetTableNames不错,可是他提的东东太多了,我只想要Table, 不要view,怎么办?
    例如在SQL server中如何区分用户表和视图?
      

  4.   

    找到解决办法了,给我加分吧!procedure TfrmMain.GetViewNamesOnly(List: TStrings);
    var
      TypeField, NameField: TField;
      TableType: string;
      DataSet: TADODataSet;
    begin
      DataSet := TADODataSet.Create(nil);
      try
        DM.adoConnect.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 = 'View') then { do not localize }
              List.Add(NameField.AsString);
            DataSet.Next;
          end;
        finally
          List.EndUpdate;
        end;
      finally
        DataSet.Free;
      end;
    end;……………………………………………………………………
    上面唯一引用的外部变量就是DM.adoConnect,也就是你用的ADO connect,自己在uses重处理吧。