C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: アクセステーブルの更新日を取得したい


(過去ログ 114 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■67477 / inTopicNo.1)  アクセステーブルの更新日を取得したい
  
□投稿者/ パル (10回)-(2013/08/06(Tue) 02:10:25)

分類:[C#] 

VS2010 C# ACCESS2007 or2010 MDBファイル

お世話になります。
MDBファイル内に含まれるテーブルの更新日を取得したく、以下のようにしてみました。
※テーブルの更新日付はMSysObjectsテーブルからとろうとしている。

string strCon = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", strOutFile);
OleDbConnection oleCon = new OleDbConnection(strCon);
oleCon.Open();

OleDbCommand command = new OleDbCommand("select * from MSysObjects where Name='TB1' or Name='TB2'", oleCon);
OleDbDataReader reader = command.ExecuteReader();

最後の行を実行したところで以下のエラーがでます。

 'MSysObjects' の読み取り権限がないので、レコードを読み取ることができません。

不特定多数のMDBファイルを扱うため、アクセルよりファイルを開いて個別にアクセス権限を付与することは作業上難しい
です。

どちら様かご教示いただけませんでしょうか。

よろしくお願いします。


引用返信 編集キー/
■67478 / inTopicNo.2)  Re[1]: アクセステーブルの更新日を取得したい
□投稿者/ daive (13回)-(2013/08/06(Tue) 04:44:04)
2013/08/06(Tue) 04:57:23 編集(投稿者)
2013/08/06(Tue) 04:45:25 編集(投稿者)

MDBに接続して、開けるのであれば、
ODBC 接続をして GetSchema にて、
MetaDataCollections スキーマ コレクション やら、データタイプ、Catalog、Tableなどは、取得できます。
同様に、OLE-DB 接続でも、GetSchema にて各種情報が取得できますが、
それぞれに、取得できる情報などが、異なります。
同一DBに対する接続方法の違い( ODBC / OLE-DB )で、取得できる内容が異なります。
MS-SQL Server 2012からは、OLE-DB接続は無くなった様です。
⇒で、ACCESS2013からは、Access プロジェクト (ADP)の廃止
Provider Factory class にて
Native / ODBC / OLEDB 接続を出来るように、作っておくと、
接続文字列だけで、DB、CSV、EXCELなどまで接続出来るようになります。
今なら、LINQ の方が便利で、当たり前かも。

検索ワード:
System.Data 名前空間
System.Data.SqlClient 名前空間
System.Data.Odbc 名前空間
System.Data.OleDb 名前空間
System.Data.OracleClient 名前空間:Oracle製ドライバを使うので、現在は非推奨、
                  Oracleドライバ用に書替えるのは、面倒なだけで、難しくは無い。
GetSchema メソッドの使用
GetSchema メソッドによるスキーマ メタデータの取得

まったく、意味不明だという方は、以下のサイトなどで、
早い人は、1日、遅い人でも、1週間もあれば、理解できるかもしれません。
すぐ使えるADO.NET(Visual Basic .NET)
やさしいVB 2010 / 2008 ADO.NET:すぐ使えるの姉妹サイト
引用返信 編集キー/
■67479 / inTopicNo.3)  Re[2]: アクセステーブルの更新日を取得したい
□投稿者/ WebSurfer (35回)-(2013/08/06(Tue) 08:09:58)
アクセス権の問題でプロバイダの問題ではないかもしれませんが、Access 2007/2010 なら ACE プロバイダを使うのがよろしいかと。

Access 2007 の DB を利用するアプリ開発
http://surferonwww.info/BlogEngine/post/2011/11/08/Development-of-application-which-uses-accdb-file-of-Access-2007.aspx
引用返信 編集キー/
■67480 / inTopicNo.4)  Re[1]: アクセステーブルの更新日を取得したい
□投稿者/ 魔界の仮面弁士 (285回)-(2013/08/06(Tue) 09:44:56)
No67477 (パル さん) に返信
> MDBファイル内に含まれるテーブルの更新日を取得したく、以下のようにしてみました。

DAO を用いる場合:
 tbl = db.TableDefs["TBL1"];
 dt1 = tbl.Properties["DateCreated"].Value; // テーブルの作成日時
 dt2 = tbl.Properties["LastUpdated"].Value; // テーブルレイアウトの最終更新日時
 ※実際にはReleaseComObject への対応のため、各オブジェクトを変数に受けて処理する必要があります。


System.Data.OleDb.OleDbConnection を用いる場合(その1):
 tbl = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, "TBL1"});
 if( tbl.Rows.Count > 0 ) {
  dt1 = tbl.Rows[0]["DATE_CREATED"]; // テーブルの作成日時
  dt2 = tbl.Rows[0]["DATE_MODIFIED"]; // テーブルレイアウトの最終更新日時
 }


System.Data.OleDb.OleDbConnection を用いる場合(その2):
 tbl = con.GetSchema("Tables", new string[] { null, null, "TBL1"} );
 if( tbl.Rows.Count > 0 ) {
  dt1 = tbl.Rows[0]["DATE_CREATED"]; // テーブルの作成日時
  dt2 = tbl.Rows[0]["DATE_MODIFIED"]; // テーブルレイアウトの最終更新日時
 }


ADODB を用いる場合:
 rs = con.OpenSchema(SchemaEnum.adSchemaTables, new object[] {null, null, "TBL1"} );
 if( !rs.EOF ) {
  dt1 = rs.Collect["DATE_CREATED"]; // テーブルの作成日時
  dt2 = rs.Collect["DATE_MODIFIED"]; // テーブルレイアウトの最終更新日時
 }
 rs.Close();
 ※別途、ReleaseComObject への対応が必要です。


ADOX を用いる場合:
 tbl = cat.Tables["TBL1"];
 dt1 = tbl.DateCreated; // テーブルの作成日時
 dt2 = tbl.DateModified; // テーブルレイアウトの最終更新日時
 ※実際には ReleaseComObject への対応のため、各オブジェクトを変数に受けて処理する必要があります。


>  'MSysObjects' の読み取り権限がないので、レコードを読み取ることができません。
OleDbConnection に対して、"User ID=Admin;" を追加してみるのはどうでしょうか。
引用返信 編集キー/
■67488 / inTopicNo.5)  Re[2]: アクセステーブルの更新日を取得したい
□投稿者/ パル (11回)-(2013/08/06(Tue) 13:10:48)
daive 様、WebSurfer 様、魔界の仮面弁士様

お世話になります。アドバイス、ありがとうございます。


魔界の仮面弁士様の下記の方法で実現できました。

> ADOX を用いる場合:
>  tbl = cat.Tables["TBL1"];
>  dt1 = tbl.DateCreated; // テーブルの作成日時
>  dt2 = tbl.DateModified; // テーブルレイアウトの最終更新日時

> OleDbConnection に対して、"User ID=Admin;" を追加してみるのはどうでしょうか。
こちらでは参照することができませんでした。

どうもありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -