DOBON.NET DOBON.NETプログラミング掲示板過去ログ

vb.net と accessの互換性

環境/言語:[VB.NET]
分類:[.NET]

VB.net2010で、access 2003へのDBアクセスは出来るのでしょうか。

年の差があり不安に思いました。
またそれを確認できる方法はありますか。
■No32314に返信(グリムさんの記事)
> VB.net2010で、access 2003へのDBアクセスは出来るのでしょうか。

「アクセス」というのがどういう意味か不明ですが、Windows OS 付属の
JET プロバイダと ADO.NET で CRUD を実現するアプリなら作れます。
2014/04/28(Mon) 21:33:30 編集(投稿者)

■No32315に返信(WebSurferさんの記事)


DBに接続が出来るかどうかです。

入力された、名前や年齢等を蓄積する為に、access経由で利用したいです。
accessのバージョンが古すぎると無理なのかなと思いまして。

mdbファイルを用いるんですよね。
自分のPCには office access 2003は入ってないので現時点では試せませんが。
■No32318に返信(グリムさんの記事)
> DBに接続が出来るかどうかです。

接続は当然できます。何故そういう質問が出るのでしょう?

ただ、Office 2003 のサポートは 2014 年 4 月 9 日に終了しています。今
から Access 2003 を使うアプリを作るのは止めた方がいいかも。
■No32318に返信(グリムさんの記事)
> DBに接続が出来るかどうかです。

Access 2003 がサポートするデータベース形式は、大きく分けて
 adp 形式
 mdb 形式
があります。(細かく言えば、ade / mde などの派生形式もありますが)


> mdbファイルを用いるんですよね。

今回は、mdb 形式を用いるのですか?

だとしたら、ADO.NET が最初の選択肢として挙げられます。
いわゆる、
 System.Data.OleDb + "Microsoft.JET.OLEDB.4.0"
という組み合わせですね。
他の接続方法もありますが、今は気にしなくとも良いかと思います。

なお、アプリケーションは、x86 ビルドでコンパイルする必要があります。


> 入力された、名前や年齢等を蓄積する為に、access経由で利用したいです。

Microsoft.JET.OLEDB.4.0 を使ったアクセス手法では、
実行環境に Microsoft Access は不要です。

もしもこれが「Access 経由で」となると話が変わってきます。

Access 経由で処理する場合は、Access をオートメーション操作で
処理することになりますが、この場合のデータの読み書きには、
ADO.NET ではなく ADO もしくは DAO 3.6 を使う事になります。

Access 固有の機能(SQL からの自作関数呼び出し、レポート機能など)が
必要なのであれば別ですが、通常は「Access を経由せず」に
利用したほうが良いと思いますよ。
2014/04/30(Wed) 17:02:28 編集(投稿者)

■No32321に返信(魔界の仮面弁士さんの記事)


> 今回は、mdb 形式を用いるのですか?

はい。mdbファイルでやります。


Microsoft.JET.OLEDB.4.0 を使ってます。
接続し、レコードの中身を表示してみるサンプルを作りました。

接続は出来たっぽいのですが、追加質問です。
お手数お掛けします。


---------------------------------------------

Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim St As String
        Dim Cn As New System.Data.OleDb.OleDbConnection
        Dim SQL As System.Data.OleDb.OleDbCommand
        Dim UserID As String = "Admin"
        Dim Password As String = "****"
        Dim MDBFile As String = "C:\Sample.mdb"

        St = "Provider=""Microsoft.Jet.OLEDB.4.0"";"
        St &= "Data Source=""" & MDBFile & """;"
        St &= "User ID=" & UserID & ";"
        St &= "Jet OLEDB:Database Password=" & Password

        Cn.ConnectionString = St

        SQL = Cn.CreateCommand

        SQL.CommandText = "SELECT * FROM Test_Table"


        Cn.Open()

        MsgBox(SQL.ExecuteScalar)

        Cn.Close()
        SQL.Dispose()
        Cn.Dispose()

    End Sub
End Class

-----------------------------------------------------------


テーブルには

code 数値型
namae テキスト型


がありまして、

只今上記のコードでは
メッセージボックスに

1

の表記だけとなってます。
両方をメッセージボックスに出す場合どうコーディングするのでしょうか。



1 氏名

の様な形で出力したいです。
■No32325に返信(グリムさんの記事)
> Dim MDBFile As String = "C:\Sample.mdb"

Cドライブのルートにファイルを配置するのは止めましょう。

mdb を開く際には、同じ場所に ldb ファイルが作成されますが、
権限上の問題から、mdb/ldb ファイルの作成・編集が行えなかったり、
UAC 環境下では、仮想ストアにリダイレクトされてしまったりします。


> ここで、「"は既に使用されているので、使用できません」

その mdb に対して、データベースレベルのロックがかかっていた場合、
(たとえば、Microsoft Access が「排他モード」で開いていた場合など)
『"は既に使用されているので、使用できません』と表示されることになります。


他に開いているアプリケーションが見当たらない場合は、
一度、Windows を再起動してから、改めて試してみて下さい。
2014/04/30(Wed) 17:20:32 編集(投稿者)
2014/04/30(Wed) 17:17:58 編集(投稿者)

■No32326に返信(魔界の仮面弁士さんの記事)
> ■No32325に返信(グリムさんの記事)
>>Dim MDBFile As String = "C:\Sample.mdb"
> 
> Cドライブのルートにファイルを配置するのは止めましょう。

サンプル出来次第パスの指定先変更します。
了解しました。


> その mdb に対して、データベースレベルのロックがかかっていた場合、
> (たとえば、Microsoft Access が「排他モード」で開いていた場合など)
> 『"は既に使用されているので、使用できません』と表示されることになります。


仰るとおり開いてました。ありがとうございます。

現状修正しまして、接続は出来ました。

投稿修正により重複しますが、


テーブルには

code 数値型
namae テキスト型


がありまして、

只今上記のコードでは
メッセージボックスに

1

の表記だけとなってます。
両方をメッセージボックスに出す場合どうコーディングするのでしょうか。



1 氏名

の様な形で出力したいです。
  • 題名: Re[7]: vb.net と accessの互換性
  • 著者: 魔界の仮面弁士
  • 日時: 2014/04/30 18:27:10
  • ID: 32328
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No32327に返信(グリムさんの記事)
> code 数値型
こっちは英語で

> namae テキスト型
こっちは日本語ローマ字ですか…。(^^;


> 只今上記のコードでは
ExecuteScalar は、「先頭行の最初の列」の値を取得するものです。


> 両方をメッセージボックスに出す場合どうコーディングするのでしょうか。

(案1) 「SELECT code & ' ' & namae FROM Test_Table」
 のように、code 列と namae 列を結合して取得する。

(案2) ExecuteScalar の代わりに、DataAdapter を用いて DataSet に格納する。

(案3) ExecuteScalar の代わりに、ExecuteReader を用いて DataReader を読み取る。

DOBON.NET | プログラミング道 | プログラミング掲示板