C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 >>
■69613  Re[1]: LNK2019エラー
□投稿者/ しま -(2014/01/13(Mon) 16:43:25)
    No69611 (OROCHI さん) に返信
    > (etime.h)
    > #include <sys/types.h>
    >
    > class CETime
    > {
    > time_t m_time;
    > unsigned short m_millitm;
    > public:
    > inline void Reset();
    > inline double Sec()const;
    > CETime(){Reset();}
    > };
    >
    > (etime.cpp)
    > #include "stdafx.h"
    > #include "etime.h"
    > #include <sys/timeb.h>
    >
    > void CETime::Reset()
    > {
    > timeb tb;
    > ftime(&tb);
    > m_time = tb.time;
    > m_millitm = tb.millitm;
    > }
    >
    > double CETime::Sec()const
    > {
    > timeb tb;
    > ftime(&tb);
    > return double(tb.time - m_time) + 0.001*(tb.millitm - m_millitm);
    > }
    >
    > これを実行すると
    > エラー 2 error LNK2019: 未解決の外部シンボル "public: void __thiscall CETime::Reset(void)" (?Reset@CETime@@QAEXXZ) が関数 _wmain で参照されました。
    > エラー 1 error LNK2019: 未解決の外部シンボル "public: double __thiscall CETime::Sec(void)const " (?Sec@CETime@@QBENXZ) が関数 _wmain で参照されました。
    > というエラーが出て実行不能になります。よくある外部リンクエラーらしいのでスペルミス、実態未定義、パブリックメンバーではないので参照不可も疑ってみたのですが、いずれも特に問題がないようでした
    >
    > 実行環境はWindows 7 64bit、Visual C++ 2010です
    >
    > 原因わかる型いらっしゃいますでしょうか?

    原因わかる「型」はいないでしょう。
    ヒントです
    .cpp に inline 関数の定義(実装)がかけるコンパイラーもありますが全てのコンパイラーではない
    また、キーワード "inline" の使い方も適切とはいえない(宣言で使っているが、定義で使うのではないでしょうか?)
    参考:
    http://msdn.microsoft.com/ja-jp/library/78t98006(v=vs.100).aspx
    http://funini.com/kei/c/prototype.shtml
記事No.69611 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69615  Re[1]: LNK2019エラー
□投稿者/ OROCHI -(2014/01/13(Mon) 20:06:59)
    774RRさん
    ありがとうございました。inline使えないことあるのは初めて知りました

    しまさん
    最初のは誤植です(汗)失礼しました
    コンパイラ側の問題もあるのですね。ありがとうございました
記事No.69611 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■69616  Re[2]: LNK2019エラー
□投稿者/ επιστημη -(2014/01/13(Mon) 20:41:16)
    > inline使えないことあるのは初めて知りました

    inlineと宣言したからには、その定義はヘッダに置いとかないとinlineになれんです。
記事No.69611 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■69532  ウィンドウクラス
□投稿者/ C# -(2014/01/07(Tue) 01:19:46)

    分類:[C#] 

    Visual Studio 2010 & Windows 7

    ウィンドウクラスについて質問させて下さい。

    ウィンドウのハンドルを以下のように取得しています。

    FindWindow("WindowsForms10.Window.8.app.0.378734a", null);

    アプリケーションのクラス名(引数1)はアプリケーションをビルドし直した場合は変更される可能性がありますが、
    作成したアプリを起動・終了しても変更されない、またパソコンを変更しても変更はされない認識でいます。

    ※ いくつかのノートパソコンで確認済みですが、正しい理解でしょうか?

    その上でデスクトップ型パソコンでそのアプリを起動するとクラス名が変更されてしまうことを確認しています。
    同一のアプリでPCによってクラス名が変更される場合はどのようなことが予測されますでしょうか?

    ご存知の方いましたら、ご教示よろしくお願いいたします。
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■69535  Re[1]: ウィンドウクラス
□投稿者/ とっちゃん -(2014/01/07(Tue) 10:59:54)
>
    No69532 (C# さん) に返信

    > ウィンドウクラスについて質問させて下さい。
    >
    > ウィンドウのハンドルを以下のように取得しています。
    >
    > FindWindow("WindowsForms10.Window.8.app.0.378734a", null);
    >
    > アプリケーションのクラス名(引数1)はアプリケーションをビルドし直した場合は変更される可能性がありますが、
    > 作成したアプリを起動・終了しても変更されない、またパソコンを変更しても変更はされない認識でいます。
    >
    > ※ いくつかのノートパソコンで確認済みですが、正しい理解でしょうか?
    >
    > その上でデスクトップ型パソコンでそのアプリを起動するとクラス名が変更されてしまうことを確認しています。
    > 同一のアプリでPCによってクラス名が変更される場合はどのようなことが予測されますでしょうか?
    >
    Form クラスのウィンドウクラス名は固定されていません。
    実行環境にインストールされている .NET Framework のバージョンや
    実行時の動作状況などによって、先頭あるいは末尾2つが変化します。

    どこが変わっているかは、ご自身で確認していると思いますが、
    おそらく後続2つのいずれか(あるいは両方)が変わっていると思います。
記事No.69532 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69536  Re[2]: ウィンドウクラス
□投稿者/ 魔界の仮面弁士 -(2014/01/07(Tue) 11:20:46)
    No69535 (とっちゃん さん) に返信
    >>FindWindow("WindowsForms10.Window.8.app.0.378734a", null);
    > Form クラスのウィンドウクラス名は固定されていません。
    > 実行環境にインストールされている .NET Framework のバージョンや
    > 実行時の動作状況などによって、先頭あるいは末尾2つが変化します。

    公式資料は見当たりませんでしたが、一説によれば
     WindowsForms10.<character sequence>.app<hash code of appdomain>
    というルールだそうで。
    http://www.codeproject.com/Articles/4814/A-simple-Windows-forms-properties-spy
記事No.69532 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69548  Re[3]: ウィンドウクラス
□投稿者/ とっちゃん -(2014/01/07(Tue) 16:20:02)
>
    No69536 (魔界の仮面弁士 さん) に返信
    > ■No69535 (とっちゃん さん) に返信
    > >>FindWindow("WindowsForms10.Window.8.app.0.378734a", null);
    >>Form クラスのウィンドウクラス名は固定されていません。
    >>実行環境にインストールされている .NET Framework のバージョンや
    >>実行時の動作状況などによって、先頭あるいは末尾2つが変化します。
    >
    > 公式資料は見当たりませんでしたが、一説によれば
    >  WindowsForms10.<character sequence>.app<hash code of appdomain>
    > というルールだそうで。
    > http://www.codeproject.com/Articles/4814/A-simple-Windows-forms-properties-spy

    おっと。。。実は、先のコメントを書くときに、手持ちのソースをチェックしていたりします。

    手持ちのソース(NativeWindow.cs)では、
    StringBuilder b = new StringBuilder(50);

    b.Append(Application.WindowsFormsVersion);
    b.Append('.');
    b.Append(className);
    b.Append(".app.");
    b.Append(domainQualifier);
    b.Append('.');
    String appDomain = Convert.ToString(AppDomain.CurrentDomain.GetHashCode(), 16);
    b.Append(VersioningHelper.MakeVersionSafeName(appDomain, ResourceScope.Process, ResourceScope.AppDomain));

    b.ToString();

    となっています。

    Application.WindowsFormsVersion はinternal 属性の付いたプロパティ(文字列を返す)で実装は
    return "WindowsForms10";
    となっています。
    固定なのは、互換性の問題だそうです(ソースのコメント(超絶意訳モード)に、書き換えたやつは死刑って書いてありましたw)。

    className は、デフォルトではこの部分の手前で "Window." + Convert.ToString( CreateParams.ClassStyle, 16 ); という値で作成されたものです。
    CreateParams.ClassStyle はデフォルトでは、8(CS_DBLCLKS という定義値)です。

    domainQualifier は、内部的にカウンタになっている値で、ウィンドウクラスの登録に失敗した場合にカウントアップするように作られています。

    あとは、ヘルプを見ればわかるものなので割愛(値に意味があるわけではないので)。


    さて。。。このウィンドウクラス名ですが、これで検索は全く意味をなさないということが改めて調査した結果わかりました。

    実験は、
    App1(2010/5/5 に作成したアプリケーション)と、App2(11月のわんくま勉強会のために作成したデモアプリ)を両方起動した状態でSpy++ でクラス名を取得しただけですが。
    実行環境ではどちらのクラス名も
    WindowsForms10.Window.8.app.0.2bf8098_r9_ad1
    となっており、FindWindow の結果からはこれがどのプログラムであるかを特定することが不可能であることを立証してしまいました。

    一応。。。実行環境を記載しておきます。
    Windows 8.1 Pro 64bit版でActiveDirectoryドメイン環境です。
    インストールされているVSは、2010/2012 で、アップデートは現時点で最新の状態です。
    #2013が入ってないのは、もうじき新マシンに乗り換えるため

    ちなみに、ほかにどこかで使われていないか?と調査したところ、VSの子ウィンドウなどいろいろなところで使われていることもわかりました。
    まぁ、おまけの部分については何の意味もありませんが。。。

    ということで、クラス名を特殊化するなどの特別な行為を行っていない場合
    FindWindow にウィンドウクラス名を与えて検索する行為は事実上不可能であるということを追記しておきます。

    じゃぁどうするか?については、なぜ検索するのかという部分がないと適切な回答を得ることは難しいのでとりあえず割愛します。
記事No.69532 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69617  Re[4]: ウィンドウクラス
□投稿者/ C# -(2014/01/13(Mon) 21:09:39)
    とっちゃん、魔界の仮面弁士さん

    ご連絡が遅くなって申し訳ありません。

    クラス名ですが、先頭・末尾以外すべての値が変わっていました。

    >FindWindow にウィンドウクラス名を与えて検索する行為は事実上不可能であるということを追記しておきます。

    内容理解しましたが対処方法が分かりません。検索する理由としてはアプリ1(自作)からアプリ2(既存)を
    動かすことが目的です。
    Findwindow関数を使用してアプリ2のクラス名を取得して、アプリ2のtoolstrip内にアプリ2の操作ボタンが
    あるのですがショートカットキー(F1)に対応しているため、postmessage関数を使用してアプリ2を実行しています。
    PostMessage(hWndWorkPtr, (uint)WM_KEYDOWN, (int)Keys.F1, 0);

    別PCでも問題なく動作するにはどのようにしたらよろしいでしょうか?
    お手数おかけ致しますが、ご教示お願い致します。
記事No.69532 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69618  Re[5]: ウィンドウクラス
□投稿者/ Azulean -(2014/01/13(Mon) 22:48:49)
    ウィンドウクラス名が特定に使えないのですから、

    1.ウィンドウのキャプションを用いて特定する
    2.プロセスから特定する

    といったように、ウィンドウクラスに頼らない方法を模索することになるでしょう。
    ウィンドウキャプションが十分にユニークなものであれば、クラス名は NULL(IntPtr.Zero) を渡してキャプションだけで FindWindow すればよいでしょう。
記事No.69532 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69576  ネットワーク越しのショートカットEXEの起動について
□投稿者/ G -(2014/01/09(Thu) 17:13:39)

    分類:[VB6 以前] 

    2014/01/09(Thu) 17:37:11 編集(投稿者)
    2014/01/09(Thu) 17:36:56 編集(投稿者)

    動作環境@
    client:winXP/Office2003
    DB:Access(mdb Access95形式)

    動作環境A
    client:win7/Office2010
    DB:Access(mdb Access95形式)

    サーバ上にあるVB6で作成された EXEのショートカットを(ショートカット自体をclientにもってきてます)
    client上で動作させたとき エラーが発生して困ってます。
    エラー内容:エラーです。処理を中断します(ユーザメッセージ)

    8年前のアプリケーションで、ソース自体も見つからない状態で、
    つくり直しで話は進めていますが、エラーの原因を知りたく。
    (ソース・情報も薄いので ぼんやりしたイメージが知りたく)

    こちらで確認・調査したこと。
    ・office2010では 互換性モードにチェックをいれないと mdb形式のファイルを開けない。
    ・exe自体をclientに持ってきた場合(動作環境A)、処理は正常に行われる。


    宜しくお願いします。
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■69580  Re[1]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 -(2014/01/09(Thu) 19:16:40)
    No69576 (G さん) に返信
    > サーバ上にあるVB6で作成された EXEのショートカットを(ショートカット自体をclientにもってきてます)
    > client上で動作させたとき エラーが発生して困ってます。
    > エラー内容:エラーです。処理を中断します(ユーザメッセージ)

    たとえば、ini ファイルあるいは mdb を開く先の ldb の書き込みなどのために、
    フォルダあるいはファイルへの書き込みアクセス権が要求されていて、
    ネットワーク越しだと、権限不足で書き込みエラーになっているとか…。

    その場合、基準フォルダを CurDir で得ているのか App.Path で得ているのかによって
    対応は変わってきますが、もしもカレントからの相対パスでの指定だとすれば、
    ショートカットのプロパティで「作業フォルダ」をローカルにしておくことで
    回避できる かも しれません。


    > DB:Access(mdb Access95形式)

    何を用いて接続されているかはわかりますか?

      (1) Data コントロール
      (2) RemoteData コントロール(MSRDC) + Access ODBC Driver
      (3) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.3.51 Provider
      (4) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.4.0 Provider
      (5) RDO 2.0 + Access ODBC Driver
      (6) DAO 3.0
      (7) DAO 2.5/3.5x Compatibility Library
      (8) DAO 3.5x
      (9) ADODB + Microsoft.Jet.OLEDB.3.51 Provider
     (10) ADODB + Microsoft.Jet.OLEDB.4.0 Provider
     (11) OLE オートメーション
     (12) 上記以外
記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69587  Re[2]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G -(2014/01/10(Fri) 09:27:01)
    回答ありがとうございます。

    No69580 (魔界の仮面弁士 さん) に返信
    > ■No69576 (G さん) に返信
    >>サーバ上にあるVB6で作成された EXEのショートカットを(ショートカット自体をclientにもってきてます)
    >>client上で動作させたとき エラーが発生して困ってます。
    >>エラー内容:エラーです。処理を中断します(ユーザメッセージ)
    >
    > たとえば、ini ファイルあるいは mdb を開く先の ldb の書き込みなどのために、
    > フォルダあるいはファイルへの書き込みアクセス権が要求されていて、
    > ネットワーク越しだと、権限不足で書き込みエラーになっているとか…。
    ネットワーク管理者等に確認したところ 実行ユーザは、Adminの権限があるので問題ないそうです。

    > その場合、基準フォルダを CurDir で得ているのか App.Path で得ているのかによって
    > 対応は変わってきますが、もしもカレントからの相対パスでの指定だとすれば、
    > ショートカットのプロパティで「作業フォルダ」をローカルにしておくことで
    > 回避できる かも しれません。
    >
    >
    >>DB:Access(mdb Access95形式)
    >
    > 何を用いて接続されているかはわかりますか?
    >
    >   (1) Data コントロール
    >   (2) RemoteData コントロール(MSRDC) + Access ODBC Driver
    >   (3) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.3.51 Provider
    >   (4) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.4.0 Provider
    >   (5) RDO 2.0 + Access ODBC Driver
    >   (6) DAO 3.0
    >   (7) DAO 2.5/3.5x Compatibility Library
    >   (8) DAO 3.5x
    >   (9) ADODB + Microsoft.Jet.OLEDB.3.51 Provider
    >  (10) ADODB + Microsoft.Jet.OLEDB.4.0 Provider
    >  (11) OLE オートメーション
    >  (12) 上記以外
    Microsoft DAO 3.5.1 Object Libraryです。
    (上記も 当時作成した アプリ(今回のアプリとは別)のソースで確認を行い、
    同一の規約でつくっていると想定しての回答です。

    宜しくお願いします。

記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69588  Re[3]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G -(2014/01/10(Fri) 11:16:59)
    途中報告です。

    > ・exe自体をclientに持ってきた場合(動作環境A)、処理は正常に行われる。
    上記処理もエラーが発生しました。

    また、Oracleへの接続もありました。

    色々調査してみたのですが、、、、処理の流れとして

    @Oracleへの接続/データ取得
    Aサーバからmdbファイルをローカルにコピー(ここまでは正常に行われている ファイルができてるので)
    Bmdbファイルをオープン(ここでエラーが発生しているはず)
    Cmdbにデータをadd
    D処理終了

    Bのところで
    Dim dblocal As DAO.Database
    Set dblocal = Workspaces(0).OpenDatabase(ローカルパス指定)
    dblocal.OpenRecordse("HOGE",1)
    上記のようなコードを記述していると思います。
    ここで 3011/3078エラーが発生していると思うのです。

    winXPとwin7での環境の違いなんでしょうか・・・。
記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69594  Re[4]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 -(2014/01/10(Fri) 15:23:24)
    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 Database も併用しているとしたら、それはどうやって接続していますか?
    DAO の ODBCDirect なのか、パススルークエリーなのか、あるいは ODBC リンクテーブルなのか、
    それとも DAO とは無関係に、別途 oo4o や ADO や RDO などで接続しているのか。


    環境 2が Win7x64 で、Oracle Client あるいは ODBC Dirver も 64bit 版しか入っていなかった場合、
    64bit Access からは繋がりますが、VB6 や 32bit Access からは繋がらない、ということはありますね。



    >> エラー内容:エラーです。処理を中断します(ユーザメッセージ)
    このエラーが、不正データ検出などのための、意図的な論理エラーなのか、
    あるいは 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 を開いているという可能性はありませんか?
記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69596  Re[5]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G -(2014/01/10(Fri) 17:08:17)
    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上でエラーが発生します。

    引き続き実験コードで 調査を行っています。
記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69597  Re[6]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 -(2014/01/10(Fri) 17:43:37)
    No69596 (G さん) に返信
    > Set dblocal = Workspaces(0).OpenDatabase("C:\\TEST.mdb") '第二引数は指定なし

    まず、パス名が不自然です。ルートなら "C:\TEST.mdb" になるはずです。

    次に、ルートフォルダーで処理を行わせるべきではありません。特に Vista 以降では。
    アプリケーション運用のために、専用のフォルダーを用意するか、
    ユーザー別フォルダ(Documents フォルダなど)を利用しましょう。

    ルートの場合、UAC が動いていると、実際のファイルのアクセス先が
     C:\Users\ユーザー名\AppData\Local\VirtualStore\TEST.mdb
    になってしまい、VB からは C:\TEST.mdb を見ているつもりでも、
    実際には、VirtualStore のパスが参照される可能性があります。
記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69599  Re[7]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G -(2014/01/10(Fri) 18:04:13)
    魔界の仮面弁士 さん回答ありがとうございます。

    > 次に、ルートフォルダーで処理を行わせるべきではありません。特に Vista 以降では。
    > アプリケーション運用のために、専用のフォルダーを用意するか、
    > ユーザー別フォルダ(Documents フォルダなど)を利用しましょう。
    >
    教えて頂いた情報をもとに、
    C:\Test.mdb→C:\KK\USERS\Test.mdbに変更してみても エラーの内容が変わりません。

    winXPでは Office2003 win7では office2010がインストールされており、
    このあたりも エラーの原因になっているのか 引き続き調査してみます。

記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69600  Re[8]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 -(2014/01/10(Fri) 18:32:51)
    2014/01/10(Fri) 18:39:36 編集(投稿者)

    No69599 (G さん) に返信

    社内事例を当たってみたところ、VB6製アプリの動作検証において、
    Server 2008 (R2 かどうかは不明)で OpenRecordset がエラーに
    なっていたが、互換モードを Windows XP (Service Pack 2) に
    したところ、エラーが解消したという話があったようです。又聞きですが。


    > winXPでは Office2003 win7では office2010がインストールされており、
    > このあたりも エラーの原因になっているのか 引き続き調査してみます。

    (質問 1) コンパイル機と、環境1 の OS / Office は同一ですか?

    (質問 2) 参照設定に、Microsoft Access X.X Object Library が含まれていますか?
     (互換性問題を考えると、含まれていない方が望ましいです)

    (質問 3) エラーとなる OpenRecordset(tableName, dbOpenTable) で指定した tableName は
     テーブルでしょうか。それとも選択クエリでしょうか。

    (質問 4) エラー 3011 は、指定したオブジェクト(tableName)が見つからないという意味かと思います。
     ためしに、その環境で .Execute "CREATE TABLE tableName (COL1 INT PRIMARY KEY)" を実行した場合、
     オブジェクト名の競合エラーになりますか? それともそのまま生成されますか?
記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69601  Re[9]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G -(2014/01/10(Fri) 19:31:00)
    No69600 (魔界の仮面弁士 さん) に返信
    > 2014/01/10(Fri) 18:39:36 編集(投稿者)
    >
    > ■No69599 (G さん) に返信
    >
    > 社内事例を当たってみたところ、VB6製アプリの動作検証において、
    > Server 2008 (R2 かどうかは不明)で OpenRecordset がエラーに
    > なっていたが、互換モードを Windows XP (Service Pack 2) に
    > したところ、エラーが解消したという話があったようです。又聞きですが。
    >
    確認してみます。
    >
    >>winXPでは Office2003 win7では office2010がインストールされており、
    >>このあたりも エラーの原因になっているのか 引き続き調査してみます。
    >
    > (質問 1) コンパイル機と、環境1 の OS / Office は同一ですか?
    >
    winXP/office2003 同一です。
    > (質問 2) 参照設定に、Microsoft Access X.X Object Library が含まれていますか?
    >  (互換性問題を考えると、含まれていない方が望ましいです)
    >
    含まれていないはずです。(ドキュメントベースを調査しての回答です)
    > (質問 3) エラーとなる OpenRecordset(tableName, dbOpenTable) で指定した tableName は
    >  テーブルでしょうか。それとも選択クエリでしょうか。
    >
    テーブル名です。
    > (質問 4) エラー 3011 は、指定したオブジェクト(tableName)が見つからないという意味かと思います。
    >  ためしに、その環境で .Execute "CREATE TABLE tableName (COL1 INT PRIMARY KEY)" を実行した場合、
    >  オブジェクト名の競合エラーになりますか? それともそのまま生成されますか?

    3010エラーが発生して、すでにテーブルが存在しているとのエラー情報です。

    引き続き調査します。

記事No.69576 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69620  Re[10]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G -(2014/01/14(Tue) 11:52:02)
    報告。

    APの動作が正常に動きました。

    今回の対応策。

    @DAO 3.5.1 → 3.6(参照設定)
    AAP(exe)とは別に、MSACCESS.EXEの互換性モード(XP SP2)にチェックを入れた。
      http://support.microsoft.com/kb/942394/ja
    上記を行ったことで無事に解決できました。

    魔界の仮面弁士さん・他調査して頂いた方 ありがとうございました。

    これで解決済みとさせてもらいます。
記事No.69576 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 >>

ヒット件数が多いので過去ログ1〜119 までの検索結果 / 過去ログ120からさらに検索→

パスワード/

- Child Tree -