掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プログラムからテーブル定義情報を取得するには? (ID:42017)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> TADOTableを利用したもので、 dbGo(ADO)、或いは BDE でも ODBC 経由だと、先の URL にあったように、 型が別のものになってしまう事があります。 (BDE でも dBASE 形式は Float と Number を区別できなかった気がします) 折角ですので、Paradox / Database Desktop のフィールド定義表示準拠なコードを置いておきますね。 uses ... , StrUtils, DB, DBTables; procedure TForm1.Button1Click(Sender: TObject); const ParadoxFieldTypeChars: array[TFieldType] of string = ( '' , 'A', 'S', 'I', '' , 'L', 'N', '$', '#', 'D', 'T', '@', 'Y', '' , '+', 'B', 'M', 'G', 'F', 'O', '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , '' , ''); ParadoxFieldTypeStrings: array[TFieldType] of string = ( '', 'Alpha', 'Short', 'Long Integer', '', 'Logical', 'Number', 'Money', 'BCD', 'Date', 'Time', 'TimeStamp', 'Bytes', '', 'AutoIncrement', 'Binary', 'Memo', 'Graphic', 'Formatted Memo', 'OLE', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''); var Table: TTable; i: Integer; dFieldName, dStrDataSize, dFieldTypeStr, dIndexField: string; dFieldType: TFieldType; dFieldNo, dFieldSize: Integer; begin Memo1.Lines.Clear; Table := TTable.Create(nil); try Table.TableName := 'paradoxtest.db'; Table.Open; for i:=0 to Table.FieldCount-1 do begin // フィールド No dFieldNo := Table.Fields[i].FieldNo; // フィールド名 dFieldName := Table.Fields[i].FieldName; // フィールドの型 dFieldType := Table.Fields[i].DataType; dFieldTypeStr := ParadoxFieldTypeChars[dFieldType]; // dFieldTypeStr := ParadoxFieldTypeStrings[dFieldType]; // フィールドのサイズ dFieldSize := Table.Fields[i].Size; dStrDataSize := ifthen(dFieldSize = 0, '', IntToStr(dFieldSize)); // インデックス dIndexField := ifthen(Table.Fields[i].IsIndexField, '*', ''); // TMemo に表示 Memo1.Lines.Add(Format('%d, %s, %s, %s, %s', [dFieldNo, dFieldName, dFieldTypeStr, dStrDataSize, dIndexField])); end; Table.Close; finally Table.Free; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.