2012-03-25 3 views
1

私はこの新しいAccessデータベース(2000形式)を新しい.accdb 2007形式に変換します。私はアクセスに関する基本的なことを知っているので、それはちょっとした挑戦だったと思っていました。Microsoft Access 2010 - dbnameと拡張子の変更後に新しいconnectionStringを使用して再コンパイル

2つのファイルがあり、1つはすべてのテーブル「WOSS_Tables.mdb」(duh)を持つように見え、もう1つ(WOSS.mdb)はフォームとモジュールの束を持ち、多くのコードを持っていますデータベースツール/ Visual Basic。

私はAccess 2010で両方を開いて、「保存して公開する」、「保存する.accdb」を実行しました。

だから私はWOSS.mdbがログインフォームで開いたときにポップアップする最初の事が、私はそれにログインしようと言う:

Error message http://i43.tinypic.com/a73tz.png

をだから私はそれを得る、それはしていません新しいファイルを探します。 WOSS.mdbファイル(今WOSS.accdb)私はたconnectionStringという名前ルタ(スペイン語でのルート)の並べ替えを持っているモジュールを見つけるに掘り はので、私は今の私のデスクトップにそれを指して、それを変更:

Option Compare Database 
Option Explicit 

Public xdescripcion As String 
'** Ruta para abrir la base de datos 
'Public Const Ruta = "\\the_super_secret_old_route\" 
Public Const Ruta = "C:\Users\AlexXPS\Desktop\Woss" 
Public M 

とフォームの束で見つかった、これらのような行:

Set dbs = DBEngine.Workspaces(0).OpenDatabase(Ruta + "WOSS_Tables.mdb", False, False, "") 
Set dbs = OpenDatabase(Ruta + "WOSS_Tables.mdb", False, False, "") 

は "WOSS_Tables.accdb" aswellを有するものを更新しました。

ここで、[保存]をクリックし、[デバッグ]メニューの[コンパイル]をクリックして、閉じてから再度開き、上記と同じエラーが表示されます。

フォームとモジュールコードをチェックすると、私はRutaがデスクトップを正しく指していて、他の変更も正しく保存されています。

私は間違っていますか?

PS:長い記事のために申し訳ありません:(


EDIT !!!!!!!

さて、コードをいじり私は何かを見つけた:

ログオン画面では、ユーザーテーブルのすべてのユーザー名を表示するはずのComboBoxが表示され、ComboBoxには「行ソース」データプロパティの簡単なクエリが表示されます

SELECT DISTINCTROW [Usuarios].[Name], [Usuarios].[Name] FROM Usuarios ORDER BY [Usuarios].[Name]; 

"Ruta"変数とは関係がありません。

ここで問題は、ソースdbの場所が変更されたことをどのようにComboBoxに伝えることができますか?

ComboBoxがデータベースを見つけられないため、以前のエラーメッセージが表示されました: )、他のコードではありません(どちらももちろん変更する必要があります)

私は自分自身を説明することを願っています、そうでなければ、スクリーンショットをheres!

Properties Window of ComboBox http://i44.tinypic.com/qn7e47.png

+1

最初のdb(WOSS.accdb)にテーブルをリンクしていますか? – Steve

+0

いいえ、テーブルはありません。 WOSS_Tables.accdbファイルにUsersテーブルがあり、すべてのユーザー/パスワード/その他の情報を持っています –

答えて

1

あなたはルタ定数への変更で再度確認してください。

'Public Const Ruta = "\\the_super_secret_old_route\" 
Public Const Ruta = "C:\Users\AlexXPS\Desktop\Woss" 

以前のバージョンはバックスラッシュで終わっています。新しいバージョンはありません。 ...だからあなたのOpenDatabase()文で、あなたは...このようなデータベースに

"C:\Users\AlexXPS\Desktop\WossWOSS_Tables.mdb" 

をフルパスを与えているか、多分それはあなたの他の変更と、このようなものだ

"C:\Users\AlexXPS\Desktop\WossWOSS_Tables.accdb" 

いずれかの方法で、ファイル名の前にバックスラッシュがありません。

編集:更新された質問は、コンボボックスの行ソースとしてこれを持って示しています

SELECT DISTINCTROW [Usuarios].[Name], [Usuarios].[Name] 
FROM Usuarios ORDER BY [Usuarios].[Name]; 

を開き、ナビゲーションペイン、そのヘッダーを右クリックし、[ナビゲーションオプション]を選択します...隠しオブジェクトを表示するチェックボックスをの横に置きます。次に、という名前のリンクテーブルがあることを確認します。Usuarios実際のUsuariosソーステーブルを含むdbの場所を更新する必要があります。リボンのデータベースツールセクションを選択し、リンクテーブルマネージャを選択して、リンクの場所を更新します。

EDIT2:あなたは、ソーステーブルを含むDBファイルの場所を決定するためにUsuariosリンクの.Connect性質を調べることができます。あなたはルタ定数を取り除くと、コードがOpenDatabase()を呼び出すどこでもその定数を更新する必要があり、データベースファイルの名前を避け得ることができるかもしれません

Public Function BackEndLocation() As String 
    BackEndLocation = Split(CurrentDb.TableDefs("Usuarios").Connect, "=")(1) 
End Function 

その方法。 リンクテーブルマネージャを使用して、ファイル名または場所が変更されたときにリンクを更新してから、BackEndLocation()関数を使用してコードをどこに伝えるかを頼りにしてください。

+0

あなたの権利は正しいです!それは間違っていた、それを変更しました。ありがとうございました! 上記の私の編集をご覧ください! :) –

+1

データベースに* Usuarios *テーブルがあります。おそらくローカルテーブルですが、おそらく他のデータベースのテーブルへのリンクです。たぶんあなたはそれが隠されているので、それを見ることはできません。リンクの更新に関するガイダンスについては、私の答えのアップデートを参照してください。 – HansUp

+0

優秀!リンクされたすべてのテーブルを新しいディレクトリに更新しました。ありがとうHansUp :)! PS:Steveがリンクテーブルがあると私に尋ねたとき、そのaccdbファイルの通常のテーブルを意味すると仮定していました。そのスティーブについてはごめんなさい。最初から正しい答えがありました! もう一度お手伝いいただきありがとうございます。 –

関連する問題