- 未記入
- 会議室デビュー日: 2006/07/10
- 投稿数: 5
|
投稿日時: 2006-07-10 19:19
環境[VB.NET 2002 + DB:ACCESS 2003 + odbc]
お世話になります。
複数外部MDBを1つにする方法を探しています。
パスワード設定されていないMDBファイルは参照元記事URLより実装できるのですが
パスワード設定しているMDBファイルの設定がうまくいきません。
Dim stCmd As OdbcCommand
Dim strSql As String
Dim inCmdResults As Integer
strSQL = "INSERT INTO a SELECT * FROM a in 'c:\\\\c.mdb'" ⇒OK
stCmd.CommandText = strSql
inCmdResults = stCmd.ExecuteNonQuery()
パスワード設定時のstrSQLの記述方法がわかりません。
"INSERT INTO a SELECT * FROM a in 'c:\\\\c.mdb;pwd=aaa'"
⇒エラー ファイル 'c:\\\\c.mdb;pwd=aaa' が見つかりませんでした。
色々な記述方法を試しましたがわかりませんでした。
どなたか御存知の方、ご教授宜しくお願い致します。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-07-10 19:40
引用: |
|
未記入さんの書き込み (2006-07-10 19:19) より:
パスワード設定時のstrSQLの記述方法がわかりません。
"INSERT INTO a SELECT * FROM a in 'c:\\c.mdb;pwd=aaa'"
⇒エラー ファイル 'c:\\c.mdb;pwd=aaa' が見つかりませんでした。
|
パスワードは、SQL コマンドに指定するのではなく、接続文字列 (ConnectionString) に指定するものです。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- unibon
- ぬし
- 会議室デビュー日: 2002/08/22
- 投稿数: 1532
- お住まい・勤務地: 美人谷 良回答(20pt)
|
投稿日時: 2006-07-10 20:26
引用: |
|
未記入さんの書き込み (2006-07-10 19:19) より:
パスワード設定時のstrSQLの記述方法がわかりません。
"INSERT INTO a SELECT * FROM a in 'c:\\c.mdb;pwd=aaa'"
⇒エラー ファイル 'c:\\c.mdb;pwd=aaa' が見つかりませんでした。
|
http://www7.big.or.jp/~pinball/discus/access/93933.html
から引用すると
引用: |
|
Dim strSQL As String
strSQL = "insert into [C:\test_out.mdb;pwd=test02].data_out select * from [C:\test_in.mdb;pwd=test01].data_in"
CurrentDb.Execute strSQL
|
は出来るみたいです。
DAO だからできるのかも?良く分かりません。Jet の仕様だったと思うので、DAO か ODBC なのかには依存しなかったような気もするのですが。
自分でも昔、試しにやってみて ODBC ドライバーからでも出来たような気もしますが、覚えていません。
ただ、あまり強い意見ではないのですが、もしこれができるにしても、あまりやらないほうが良いと思います。普通にソースとデスティネーションのレコードセットをオープンして、ソースからデスティネーションへレコード単位でコピーしたほうが確実のように思います。
--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
|
- ue
- ぬし
- 会議室デビュー日: 2005/05/07
- 投稿数: 581
- お住まい・勤務地: 広島市
|
投稿日時: 2006-07-10 20:28
こんばんは。ueです。
Jet エンジンの機能を使ってこういう書き方ができます。
コード: |
|
Dim strSQL As String
strSQL = "INSERT INTO a SELECT * FROM a IN '' [MS Access; DATABASE=C:\\c.mdb;PWD=aaa;];"
CurrentDb.Execute strSQL
|
なんというか、ややこしい書き方なのでお薦めの方法じゃないです。
じゃんぬさんのご意見のとおり、接続文字列を使う方法をおすすめします。
接続文字列を使う方法に慣れておくと後々が楽です。
私は外部の mdb と連携するときには 外部 Jet データベースとの接続方法 というコンテンツのお世話になっています。
_________________ 上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-07-10 20:37
引用: |
|
未記入さんの書き込み (2006-07-10 19:19) より:
環境[VB.NET 2002 + DB:ACCESS 2003 + odbc]
|
うーん、ODBC ですか...
せっかくだから、以下のように OleDb を選びたいところです。
コード: |
|
Private Shared Sub せっかくだから、俺はこの赤の扉を選ぶぜ()
Dim stConnectionString As String = ( _
"Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = C:\MakiUehara.mdb;" & _
"Jet OLEDB:Database Password = MakiMakiLove;" _
)
Dim oConnection As System.Data.OleDb.OleDbConnection
Try
oConnection = New System.Data.OleDb.OleDbConnection(stConnectionString)
Dim oCommand As System.Data.OleDb.OleDbCommand
Try
oCommand = New System.Data.OleDb.OleDbCommand("SELECT * FROM MosaMosaAA", oConnection)
oConnection.Open()
oCommand.ExecuteNonQuery()
oConnection.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString(), "ダニー、グレッグ、生きてるか?")
Throw
Finally
If Not oCommand Is Nothing
oCommand.Dispose()
End If
End Try
Finally
If Not oConnection Is Nothing Then
oConnection.Dispose()
End If
End Try
End Sub
|
OleDb では、ダメでしょうか? (;^-^)
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- ue
- ぬし
- 会議室デビュー日: 2005/05/07
- 投稿数: 581
- お住まい・勤務地: 広島市
|
投稿日時: 2006-07-10 20:48
ueです。
引用: |
|
じゃんぬねっとさんの書き込み (2006-07-10 20:37) より:
うーん、ODBC ですか...
せっかくだから、以下のように OleDb を選びたいところです。
|
あ、未記入さんは ODBC を指定されてたんですね。
DAO のコードを書いてしまいました。
_________________ 上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
|
- 未記入
- 会議室デビュー日: 2006/07/10
- 投稿数: 5
|
投稿日時: 2006-07-11 09:28
おはようございます。
じゃんぬねっと様、ue様回答ありがとうございます。
ODBC接続でその他のソース記述がある為、unibonさんの記述方法で試しました。
Dim strSQL As String
strSQL = "insert into [C:\\\\b.mdb;pwd=aaa].a select * from [C:\\\\c.mdb;pwd=aaa].a"
stCmd.CommandText = strSql
inCmdResults = stCmd.ExecuteNonQuery()
で上手くいきました。unibon様ありがとうございました。
本当にお世話になりました。助かりました!! m(__)m
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-07-11 10:28
引用: |
|
未記入さんの書き込み (2006-07-11 09:28) より:
じゃんぬねっと様、ue様回答ありがとうございます。
ODBC接続でその他のソース記述がある為、unibonさんの記述方法で試しました。
|
うーん、ConnectionString で指定した方が素直だと思いますけどね。
(SQL コマンドを投げるまで、正当に実行できるのか評価できませんし)
OleDb でソースを書いたのは、直接的な回答をしたくなかったからですが、
今後閲覧される第三者のためにサンプル ソースを書いておきます。
コード: |
|
Private Shared Sub 遭えてODBCを選ぶぜ()
Dim stConnectionString As String = ( _
"Driver = {Microsoft Access Driver (*.mdb)};" & _
"DBQ = C:\Hoge.mdb;" & _
"PWD = MakiMakiLove;" _
)
Dim oConnection As System.Data.Odbc.OdbcConnection
Try
oConnection = New System.Data.Odbc.OdbcConnection(stConnectionString)
Dim oCommand As System.Data.Odbc.OdbcCommand
Try
oCommand = New System.Data.Odbc.OdbcCommand("SELECT * FROM MosaMosaAA", oConnection)
oConnection.Open()
oCommand.ExecuteNonQuery()
oConnection.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString(), "ボスケテ")
Throw
Finally
If Not oCommand Is Nothing
oCommand.Dispose()
End If
End Try
Finally
If Not oConnection Is Nothing Then
oConnection.Dispose()
End If
End Try
End Sub
|
ConnectionString と、使用クラス名が若干変わっているくらいです。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|