ShellExecute で

解決


しもぢ  2005-07-25 21:20:25  No: 91064

VB6.0からアクセスファイルを開きたくて以下のソースで起動させようとしました。

DaraMDB = ファイルパス

Dim Ret As Long
 Ret = ShellExecute(hwnd, "open", DataMDB, vbNull, vbNull, SW_SHOW)

このとき一瞬  アクセス2000って起動時に出る画面がでますが、すぐ終了してしまい、その後は手動でmdbを開くこともできなくなります。

再起動すれば,mdbファイルは手動で開けるように戻りました。
何が原因なのでしょうか?よろしくお願い致します。


ガッ  2005-07-25 21:29:25  No: 91065

DB&Access使ったこと無いから分からないけど、
とりあえず、vbNullが怪しいかと。
宣言見たいのもの:
ShellExecute(
  ByVal hwnd As Long,
  ByVal lpOperation As String,
  ByVal lpFile As String,
  ByVal lpParameters As String,
  ByVal lpDirectory As String,
  ByVal nShowCmd As Long) As Long


しもぢ  2005-07-25 22:03:03  No: 91066

vbNull ⇒  Null にすると、Nullの使い方が不正でエラーになりました。


しもぢ  2005-07-25 22:06:49  No: 91067

⇒vbNullString でうまくいきました。


しもぢ  2005-07-25 22:12:27  No: 91068

今度は、さらにmdbファイルのマクロにAutoexec を作成し、起動時にレポートのプレビューを表示させようとしたのですが、ShellExecute で起動させるとただ単にファイルがオープンされるだけなんです。  最終的にはVBからマクロにパラメータを渡して、そのパラメータによってレポートを区別できるようにしたいのですが、技術的には可能なのでしょうか?


魔界の仮面弁士  2005-07-26 02:24:32  No: 91069

案1) データを/cmdパラメータで渡して、Access側ではCommand()関数にて
  受け取って判定。実行は、/xパラメータか AutoExec マクロで処理。

案2) ShellExecuteで起動するのではなく、オートメーションで操作する。


たくみ  2005-07-26 16:00:49  No: 91070

> 技術的には可能なのでしょうか?
当然できます。(私は普通によく使ってます)

# たいがいShell系の話しは山ほど出つくしてて
# いっぱいころがってるはずなんですけど・・
# まめに検索されましたか?

結局、私も魔界の仮面弁士のおっしゃっているパターンになっちゃうので
かぶってなんなのですが、その場合
「案1」が比較的書きやすいのでよいのではと。

で、もって今回は引数を伴うパターンですし、かつShellExecuteに
あまりなれてらっしゃならい?ようですので、ここはあえてShell()で
「案1」をやられたほうが、
(あんまり神経を使わなくともとりあえず動かせるレベルになる
という意味においては)無難だと思います。(経験談)

で、どういうコードを書くのか?  ですが、まずはご自身で
調べていただくことが前提なので、そこまではあえて書きません。
(下記のイメージを参考にされてください)

> そのパラメータによってレポートを区別できるようにしたいのです
あ、当然ながらAccess側でその引数を(ひとつに合体された文字列
として受け取りそれを)分解させます。
例えば、その引数の文字列の前半部がMDBのフルパス名、
後半部がレポートの種類名(あるいはレポートの種別フラグ)など
というイメージです。
もちろんその前半部後半部の区切り目はご自身でデリミタとなる
文字(例えば/とか,とか)を決め指定すればよいのです。


たくみ  2005-07-26 16:11:02  No: 91071

誤解されそうなので、つけたし。

Shell()でやるのなら・・
最後のくだりの前半部、後半部うんぬんのイメージですが
その前半部のMDB名のさらにその前にMSACCESS.EXEの
フルパスを書いておきます。
で、それを含めてひとつの文字列としてShell()の引数に
渡します、という感じです。


たくみ  2005-07-26 23:34:47  No: 91072

あっ、あろうことか大先生を、、、
呼び捨てにしておりました。>魔界の仮面弁士さま
未明からずっとナチュラルハイ状態だったもので。。
本当にお許しください。


横槍  2005-07-27 00:25:50  No: 91073

よこやりすいません。詳しい方が集まっておられるようで。
私も ShellExecute  を使用してmdbファイルを開くことをしています。
私の場合はオープン後、Docmd.RunMacro マクロ名  で任意のマクロを実行してみてうまくいったのですが、うまくいくのは1回目だけで2回続けると何も起こりません。しかもしもぢさんと同じく一度その処理を行なうと、手動でもmdbファイルが開けません。  何かが足りないのでしょうか?ご教授よろしくお願い致しますです。


魔界の仮面弁士  2005-07-27 02:30:08  No: 91074

横槍さん宛:

人の質問に割り込む事は控えて下さい。話の流れが追いにくくなります。
(しかもここは、すでに[解決]マークが付けられたスレッドですし)

下記のV友掲示板で、同様の質問をされておられるようなので、
こちらの質問は取り下げて、V友の方で話を続けませんか?
http://www.gizshare.com/vbtomo/boards/vbdatabase.php?do=spread&num=1720#1722


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加