17

MS Access テーブルのすべてのフィールド名を一覧表示できるかどうか教えてください。

4

14 に答える 14

20

私はミリ秒アクセスであまりにも多くの作業をしています。

これを行う唯一の方法は、vba を使用し、たとえばレコードセットを定義し、フィールドをループすることです。

例えば:

Sub ListFields()

dim rst as new adodb.recordset
rst.open "SELECT * FROM SomeTable", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
' Note: adOpenForwardOnly and adLockReadOnly are the default values '
' for the CursorType and LockType arguments, so they are optional here '
' and are shown only for completeness '

dim ii as integer
dim ss as string
for ii = 0 to rst.fields.count - 1
    ss = ss & "," & rst.fields(ii).name
next ii

Debug.Print ss

End Sub

文字列変数ssには、"SomeTable" という名前のテーブル内のすべての列名のコンマ区切りリストが含まれます。

ロジックを少し再フォーマットすることで、必要に応じてこのデータを別のテーブルに挿入し、クエリを実行できるようになります。

これは役に立ちますか?

于 2012-07-18T23:27:06.617 に答える
5

Documenter ツールを使用するだけです。Database Tools > Database Documenterに進み、テーブルを選択して [OK] を押します。

于 2012-07-18T19:44:55.937 に答える
2

手っ取り早く汚い方法に Excel が関係しています。以下をせよ:

  1. テーブルをデータシート ビューで開きます。
  2. Access バージョンの特定の手順を使用して、Excel ファイルにエクスポートします。
  3. Excel ファイルを開きます (まだ開いていない場合)。
  4. ヘッダーを含む最初の行を選択してコピーします。
  5. ワークブックに別のシートを追加します (存在しない場合)。
  6. A1をクリックします。
  7. 形式を選択して貼り付け > 転置

フィールドは 1 つの列に貼り付けられます。フィールド インデックス番号を調べるには、セル B1 に「0」と入力し、フィールド番号の最後の行までシリーズを入力します。

さらに、特に数十のフィールドを含む従来のフラット ファイルの場合、列をアルファベット順に並べ替えることができます。フラットファイルをリレーショナル モデルに変換しようとしているとき、これは本当に多くの時間を節約します。

于 2014-07-30T23:52:53.717 に答える
0

私は同じ要件を探してここに来て、このスレッドを参照した後、要件のコードの下にドラフトしました。ソース テーブルのフィールド名が配列に追加され、後でフィールド名が 2 番目のテーブルに割り当てられます。ここで共有するだけで、後で誰かを助けるかもしれません..

Public Sub FieldName_Change()
Dim intNumberOfFields, intX As Integer
Dim txtTableName,txttmpTableName txtFieldName() As String

intNumberOfFields = GetFieldNames(txtTableName, txtFieldName())
For intX = 1 To intNumberOfFields
  CurrentDb.TableDefs(txttmpTableName).Fields("F" & intX).Name = txtFieldName(intX)
Next intX
End Sub


Public Function GetFieldNames(ByVal txtTableName As String, ByRef txtFiledName() As String) As Integer
Dim rs As DAO.Recordset
Dim n As Long
Dim sResult As String

Set rs = CurrentDb.OpenRecordset(txtTableName)
ReDim txtFiledName(rs.Fields.Count)
With rs
    For n = 0 To .Fields.Count - 1
        txtFiledName(n + 1) = .Fields(n).Name
    Next n
    .Close
    GetFieldNames = n
End With
Set rs = Nothing
End Function
于 2020-04-03T06:08:03.123 に答える
-1

これを試してみてください...

    private void Button_OldDDLDump_Click(object sender, EventArgs e)
    {
        string _cnstr = "connectionstringhere";
        OleDbConnection _cn = new OleDbConnection(_cnstr);
        try
        {
            _cn.Open();
            System.Data.DataTable _dt = null;            
            try
            {
                _dt = _cn.GetSchema("tables");
                m_msghelper.AppendArray( DataTableHelper.DataTableToString(_dt) );                               
            }
            catch (Exception _ex)
            {
                System.Diagnostics.Debug.WriteLine(_ex.ToString());
            }
            finally
            {
                _dt.Dispose();
            }
        }
        catch (Exception _ex)
        {
            System.Diagnostics.Debug.WriteLine(_ex.ToString());
        }
        finally
        {
            _cn.Close();
        }
    }

ここでデータベース構造を文字列配列にダンプするヘルパー メソッド..

public static class DataTableHelper
{
    public static string[] DataTableToString( System.Data.DataTable dt )
    {
        List<string> _retval = new List<string>();

        foreach (System.Data.DataRow row in dt.Rows)
        {
            foreach (System.Data.DataColumn col in dt.Columns)
            {
                _retval.Add( string.Format("{0} = {1}", col.ColumnName, row[col]) );
            }
            _retval.Add( "============================");
        }
        return _retval.ToArray();
    }
}
于 2016-03-16T23:06:32.500 に答える
-1

この作業は昔の方が簡単だったようです。おそらく、この答えはバージョンに大きく依存しています。Access 2007 DB に対する簡単なテストで動作します。

select 
Specs.SpecName AS TableName,
Columns.FieldName
from
MSysIMEXColumns Columns
inner join MSysIMEXSpecs Specs on Specs.SpecID = Columns.SpecID
order by
Specs.SpecName,
Columns.FieldName
于 2012-07-19T02:34:39.233 に答える
-2

table_name='table' である information_schema.columns から column_name を選択します

于 2016-06-06T18:42:16.817 に答える