|
2014/01/10(Fri) 17:09:32 編集(投稿者)
魔界の仮面弁士 さん 回答ありがとうございます。
■No69594 (魔界の仮面弁士 さん) に返信 > ■No69588 (G さん) に返信 >>ネットワーク管理者等に確認したところ 実行ユーザは、Adminの権限があるので問題ないそうです。 > ネットワーク権限があることは分かりましたが、それはもしかして、 > 管理者権限が無いと動かないようなアプリになっている、ということなのでしょうか。 > > Vista 以降の OS では、UAC の働きにより、 > ・%SystemRoot% … C:\ > ・%ProgramFiles% … C:\Program Files > ・HKEY_LOCAL_MACHINE\Software > などへの書き込みが仮想化されており、実際とは異なる場所が操作されたりします。 > こうした場所への書き込み(iniなど)があると、たとえ管理者ユーザーで > あったとしても影響があります。 > > EXE を右クリックして、管理者モードにて実行した場合に、 > 動作に差が生じるかも確認した方が良いかもしれません。 > 管理者モードで起動してもエラーが発生します。 > > >> ・exe自体をclientに持ってきた場合(動作環境A)、処理は正常に行われる。 >>上記処理もエラーが発生しました。 > 環境1 では、ローカル実行できるけれども、ネットワーク上の EXE からは実行できない状態。 > 環境2 では、EXE がローカルでもネットワーク上でも、いずれも正常動作していない、ということですね? > はい。 > >>また、Oracleへの接続もありました。 > 何の話でしょうか? Access ではなく、突然 Oracle という言葉が出てきましたが…。 > 最初の投稿時には見つからなかった ドキュメントがその後みつかり、 それベースで oracleへの接続が分かりました。
このアプリが動いてるPCには、odbcの設定が行われていたことを確認しています。
> Oracle Database も併用しているとしたら、それはどうやって接続していますか? > DAO の ODBCDirect なのか、パススルークエリーなのか、あるいは ODBC リンクテーブルなのか、 > それとも DAO とは無関係に、別途 oo4o や ADO や RDO などで接続しているのか。 > > > 環境 2が Win7x64 で、Oracle Client あるいは ODBC Dirver も 64bit 版しか入っていなかった場合、 > 64bit Access からは繋がりますが、VB6 や 32bit Access からは繋がらない、ということはありますね。 > > win7 / odbc 32bitです。
> > >> エラー内容:エラーです。処理を中断します(ユーザメッセージ) > このエラーが、不正データ検出などのための、意図的な論理エラーなのか、 > あるいは VB ランタイムが発しているものなのか、DAO/JET が発しているものなのか、 > Oracle 関連のエラーなのかはわかりますか? > > 発生元が分からないのであれば、まずはそれが、何のエラーなのかを特定する作業が必要でしょう。 > いわゆる「Err.Source」「Err.Number」「Err.Description」の調査です。 > > VB6 なり VBScript なりで、mdb を開くようなコードを書いて、 > それを実行してみた場合にも、何らかのエラーになりますか? > > 実験コードで動くのであれば、実際には、mdb は直接関係ないという可能性もあります。 > (ini ファイルやレジストリの設定ミスなど) > > >>Dim dblocal As DAO.Database >>Set dblocal = Workspaces(0).OpenDatabase(ローカルパス指定) > DBEngine の初期化はせず、暗黙の Global object を操作するタイプのコードですね。 > OpenDatabase の第2引数以降は未指定なのですね? > > >>dblocal.OpenRecordse("HOGE",1) > 『OpenRecordse「t」』の間違いとは思いますが、 > 何故にマジックナンバー 1 が…。dbOpenTable を使いましょう。(^_^; > > >>ここで 3011/3078エラーが発生していると思うのです。 > 「3011/3078エラー」とは何のことですか? エラー番号まで分かっていたのでしょうか。 > そういう重要な情報は最初に出してほしいです…。 > > 手持ちの Access 2010 で、 > Debug.Print AccessError(3011) > Debug.Print AccessError(3078) > を確認してみました。 > > 3011 の方は、 > ・The Microsoft Jet database engine could not find the object <name>. Make sure the object exists and that you spell its name and the path name correctly. > ・オブジェクト '<オブジェクト名>' が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。'<オブジェクト名>' がローカル オブジェクトでない場合は、ネットワークの接続を確認するか、サーバー管理者に問い合わせてください。 > > 3078 の方は、 > ・The Microsoft Jet database engine cannot find the input table or query <name>. Make sure it exists and that its name is spelled correctly. > ・入力テーブルまたはクエリ '<クエリ名>' が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。 > ですね。 > > 誤って、別の mdb を開いているという可能性はありませんか?
以下の実験コードで 今回の3011エラーが出ることが判明しました。
Public rdoConnect As rdoConnection Dim dblocal As DAO.Database
'sqlは select * from HOGE set rdoResult = rdoConnect.OpenResultset(sql, rdOpenForwardOnly + rdOpenStatic, rdConcurReadOnly)
If Err.Number = 0 Then Set dblocal = Workspaces(0).OpenDatabase("C:\\TEST.mdb") '第二引数は指定なし Workspaces(0).BeginTrans dblocal.OpenRecordset("HOGE", dbOpenTable) if Err.Number > 0 then 'ここで 3011エラーが発生 WinXP上では エラーは 発生しなかったのですが、 win7上でエラーが発生します。 引き続き実験コードで 調査を行っています。
|