掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Accessのテキスト型とメモ型の識別 (ID:147287)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> あたりを使った方が正確な情報を得られる気がします(未確認)。 試してみました。やはりスキーマ経由の方が良さそうです。 Dim con As New OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\db1.mdb") con.Open() Dim cmd As OleDbCommand = con.CreateCommand() cmd.CommandText = "CREATE TABLE TEST (COL1 AUTOINCREMENT(100, 1) PRIMARY KEY, COL2 TEXT(20), COL3 CHAR(20), COL4 MEMO, COL5 NUMERIC(5, 2), COL6 INTEGER )" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO TEST (COL2, COL3, COL4, COL5, COL6) VALUES ( 'aaa', 'bbb', 'ccc', 123.45, 12345 )" cmd.ExecuteNonQuery() Dim ds As New DataSet() Dim da As New OleDbDataAdapter("SELECT * FROM TEST", con) da.SelectCommand.Prepare() da.Fill(ds, "TEST") Dim tbl As DataTable = ds.Tables("TEST") Dim reader As OleDbDataReader = da.SelectCommand.ExecuteReader() Dim schema As DataTable = reader.GetSchemaTable() reader.Close() con.Close() Console.Clear() '既存の方式 Console.WriteLine("=== DataColumn 経由での取得 ===") For Each col As DataColumn In tbl.Columns Console.WriteLine("No={0}", col.Ordinal) Console.WriteLine("Name={0}", col.ColumnName) Console.WriteLine("Type={0}", col.DataType.FullName) Console.WriteLine("MaxLength={0:#,0}", col.MaxLength) Console.WriteLine() Next '★本題★ Console.WriteLine("=== スキーマ 経由での取得 ===") For Each row As DataRow In schema.Rows Console.WriteLine("No={0}", row("ColumnOrdinal")) Console.WriteLine("Name={0}", row("ColumnName")) Console.WriteLine("Type={0}", row("ProviderType")) Console.WriteLine("Size={0:#,0}", row("ColumnSize")) Console.WriteLine("Precision={0}", row("NumericPrecision")) Console.WriteLine("Scale={0}", row("NumericScale")) Console.WriteLine() Next MsgBox("完了", vbSystemModal) なお、row("ProviderType") で得られる値については、 ADODB.DataTypeEnum 列挙体で示されています。 http://msdn.microsoft.com/en-us/library/ms675318.aspx
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.