请问这样依次取出一个库中的每个表名 以及怎样从所取出的表中依次取出表的中每一个字段名以及其类型

解决方案 »

  1.   

    看看对应数据库的系统表,你就明白了:)syscolumns,sysobjects
      

  2.   

    什么数据库?
    要是SQL Server 你用select a.name 表名,
           case when d.keyno is null then null else d.keyno end 主外键顺序,
           b.name 字段名,
           c.name 字段类型,
           case when b.name in (N'nchar', N'nvarchar') then b.length/2 else b.length end 数据长度,
           case when c.name in (N'decimal',N'numeric') then ColumnProperty(object_id(a.name), b.name, N'Precision') else NULL end 精度,
           case when c.name in (N'decimal',N'numeric') then ColumnProperty(object_id(a.name), b.name, N'Scale') else NULL end 小数位,
           ColumnProperty(object_id(a.name), b.name, N'IsIdentity') 标识,
           case when (ColumnProperty(object_id(a.name), b.name, N'IsIdentity') <> 0) then CONVERT(nvarchar(40), ident_seed(a.name)) else null end 标识种子,
           case when (ColumnProperty(object_id(a.name), b.name, N'IsIdentity') <> 0) then CONVERT(nvarchar(40), ident_incr(a.name)) else null end 标识自增量,
           b.isnullable [允许空],
           f.text 默认值
    from dbo.sysobjects a
    left join dbo.syscolumns b on a.id=b.id
    left join dbo.systypes c on b.xtype=c.xtype
    left join dbo.sysindexkeys d on a.id=d.id and b.colid=d.colid and d.indid=2
    left join dbo.syscomments f on b.cdefault=f.id
    where a.xtype='U'
    order by a.name,b.colid
      

  3.   

    dim snp as new adodb.recordset
    dim str as string
    dim i as long 
    str=" select * from 表名"
    snp.open str,连接
    for i=0 to snp.fields.count-1     pring snp.fields(i)next 
    snp.close
      

  4.   

    首先从sysobject表里的name字段可以取得表的名字,然后找到对应的id值
    再根据找到的id值去syscolumns里查找是id的name,这些就是该表所有的字段
    最后再根据字段后的xtype,去systypes里查找该字段所属的类型。
      

  5.   

    form1.Session1.GetTableNames();  //BDE
    form1.ADOConnection1.GetTableNames(); //ADO上面的两个方法即为BDE AND ADO的取表名的方法,其参数请参阅帮助文件。。取出字段类型为:procedure TForm1.Button1Click(Sender: TObject);
    begin
    case form1.Table1.Fields[1].DataType of
      ftString:showmessage('str');
      ftInteger:showmessage('int');
      end;
    end;
    关于DATATYPE类型在帮助文件中这样定义:
    Delphi syntax:type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd);
    只需要把所有的类型添加进CASE语句中即可。。取字段名也很简单:
    方法名取属性:
    property FieldName: String;
    可以取出字段名。如果想取出所有的字段名和类型,只需要循环一下即可,基本功能例程如:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
    for i:=0 to form1.Table1.FieldCount-1 do
    case form1.Table1.Fields[i].DataType of
      ftString:showmessage('str');
      ftInteger:showmessage('int');
      end;
    end;。。
      

  6.   

    var    if pfun.pbIsLocalDataOk then
          Form_Login.AdoConn_Local.GetTableNames(sstrLocalTable);
      

  7.   

    谢谢各位
    我用的是interbase
      

  8.   

    Session1.GetAliasNames(ListBox1.Items); // 列出连接名称。
    Session1.GetDatabaseNames(); //列出数据库名
    Session1.GetTableNames();
     Session1.GetFieldNames();
      

  9.   

    在窗体上放入一个TSESSION(BDE中),一个Tlistbox.
      

  10.   

    var
      sstrRemoteTable : Tstrings;
      sstrFieldName   : TStrings;
      i, nCount : integer;
    begin
        sstrRemoteTable:=TStringList.create;
        if pbIsRemoteLinkOk then
            AdoConn_Remote.GetTableNames(sstrRemoteTable);
       ....
        AdoTable1.tablename:=sstrRemoteTable.strings[i];
        AdoTable1.GetFieldNames(sstrFieldName);
       .... 
    end;
    end;