
現在、VB.NET上で操作し、Accessのテーブルのリンクをしているのですが、
リンク処理の直後に、最後にテーブルのリンク処理をしたテーブルを
開こうとすると、
「要求された名前、または序数に対応する項目がコレクションで見つかりません。」という
エラーが出ます。
なお、リンクしたテーブルには、きちんと正しいリンクで開こうとしたテーブルが登録されています。
それで、最後にリンクしたのが悪いのかと思い、順番を変えると、
そのエラーは起こらずに通常に起動しました。
ですが、順番を変えただけで普通に動く、というのが
なんだか腑に落ちません。(まあ、無事に動いているのでいいのですが(汗 )
以下にリンク処理を記載します。
何故、このようなことが起こるのかわかる方いらっしゃいましたら、ご教授お願い致します。
予想でもかまいません。
Public Sub DBLink()
LFlag = False
Dim rs As ADODB.Recordset = New ADODB.Recordset
Dim Sql As String = String.Empty
Dim dbPName As String = String.Empty
Dim tName() As String
'リンク先のパスを指定
Dim f As New frmLinkPath
f.ShowDialog()
f.Close()
f = Nothing
'パスを指定したか否か
If LFlag Then
'TMPのパスは固定
dbPName = PathLast(Application.StartupPath) & "TMP.mdb"
'リンクするテーブル名を取得
'mdbLには、テーブル名がカンマ区切りで入っています
tName = mdbL.Split(",")
'リンク先のテーブルを削除
For i = 0 To tName.Length - 1
Sql = "DROP TABLE " & tName(i)
rs.Open(Sql, cn)
Call SLink(tName(i), dbPName)
Next
dbPName = PathLast(DBPath) & "MST.mdb"
'リンクするテーブル名を取得
tName = mdbS.Split(",")
'リンク先のテーブルを削除
For i = 0 To tName.Length - 1
Sql = "DROP TABLE " & tName(i)
rs.Open(Sql, cn)
Call SLink(tName(i), dbPName)
Next
Else
MsgBox("リンク先が指定されなかったので、" & vbCrLf & "テーブルの再リンクをキャンセルします", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "")
End If
End Sub
''' <summary>
''' データベース再リンク
''' </summary>
''' <param name="psNm">リンクするテーブル名</param>
''' <param name="psMdb">リンク元データベース名</param>
''' <remarks></remarks>
Public Sub SLink(ByVal psNm As String, ByVal psMdb As String)
Try
Dim lodDb As dao.Database
Dim ltDef As dao.TableDef
Dim lsSource As String
Dim lsTarget As String
Dim daoE As New dao.DBEngine
'リンク先データベースとリンクデータベース名を指定
lsSource = psMdb
lsTarget = PathLast(Application.StartupPath) & "DATA.mdb"
'既存のデータベースの場合は OpenDatabase を使用する)
lodDb = daoE.OpenDatabase(lsTarget)
'任意の名前でテーブル定義を作成する
ltDef = lodDb.CreateTableDef(psNm)
'リンク先のテーブル名を指定する
ltDef.SourceTableName = psNm
'リンク先のデータベースを指定する(対象がMDBの場合セミコロンの前は省略)
ltDef.Connect = ";Database=" & lsSource
'定義したテーブルをアペンド(追加)する
lodDb.TableDefs.Append(ltDef)
lodDb.Close()
lodDb = Nothing
Catch ex As Exception
Debug.Print(ex.Message)
'Throw
End Try
End Sub
No.1ベストアンサー
- 回答日時:
Access2010のヘルプには
////////////////////
TableDefs.Refresh メソッド
指定されたコレクション内のオブジェクトを更新して、データベースの現在のスキーマを反映させます。
構文
式.Refresh
式 TableDefs オブジェクトを表す変数。
(以下割愛、続きはAccessのヘルプを。)
というのが有りますので
ここいら辺か
lodDb.TableDefs.Append(ltDef)
lodDb.TableDefs.refresh
この辺のどちらかに
Call SLink(tName(i), dbPName)
Next
lodDb.TableDefs.refresh
と追加してみたらどうでしょう?
保証の限りではございませぬ。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?
-
【お題】動物のキャッチフレーズ
【お題】「百獣の王 ライオン」「実は動物界最強 カバ」は分かるけど、それはちょっとピンと来ないなと思った動物のキャッチフレーズ
-
最速怪談選手権
できるだけ短い文章で怖がらせてください。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
かっこよく答えてください!!
あなたは今にも別れそうなカップルの彼女の恋愛相談に乗っています。
-
ADO&mdbで、リンクテーブルの作り方
Visual Basic(VBA)
-
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
ExcelVBAからAccessMDB内のテー...
-
テーブル作成時のプロパティー...
-
[ASP+SQLsrv]データベース内の...
-
SQL同時実行違反
-
COBOLのINVALID KEYが理解でき...
-
【ADO】「Execute」を使うと...
-
CSVファイルのエクスポートでソ...
-
Accessで宛名ラベルに同一宛先...
-
同一セッションIDのブラウザを...
-
VBとアクセスでSQL文に変...
-
SQL文で在庫推移を得る。
-
SQLを発行とは?クエリの作成と...
-
ACCESS2010 実行時エラー 2766
-
AccessVBAコミットとロールバッ...
-
.net 複数の主キーを設定する方法
-
他のMDBのテーブルに追加したい
-
ADOからSQLのEXISTSの結果(もし...
-
エクセルのテーブルを解除する...
-
AccessからExcelへエクスポート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLを発行とは?クエリの作成と...
-
『列名 '担当者CD' があいま...
-
ExcelVBAからAccessMDB内のテー...
-
他のMDBのテーブルに追加したい
-
AccessからExcelへエクスポート...
-
VBとアクセスでSQL文に変...
-
エクセルのテーブルを解除する...
-
手動または分散トランザクショ...
-
CSVファイルのエクスポートでソ...
-
ACCESS2010 実行時エラー 2766
-
Accessで別mdbのテーブルをコピー
-
COBOLのINVALID KEYが理解でき...
-
[C#] DataGridViewでコンボボッ...
-
アクセステーブル、リンクとロ...
-
.net 複数の主キーを設定する方法
-
HTMLのテーブルの行数が多くな...
-
DataGridの中身をDataSetにテー...
-
ワークテーブルの作成について
-
DataGridViewに複数テーブルの...
-
【ADO】「Execute」を使うと...
おすすめ情報