わかる方いらっしゃいましたら、ご教授願います。
現在、フォーム起動時にOracleのSQL*Plusを起動させて特定の
SQL文を実行させる物を作成しています。
SQL*Plusの起動は問題なくできるのですが、その後のSQL文が発
行できなくて困っています。
何かよい方法はないでしょうか?
ちょっと強引な気もしますが・・・
AppActivate "Oracle SQL*PLUS"
SendKeys "SQL文"
SendKeys "{ENTER}"
で出来ました。
こんちは
SQL*PLUSをshell等を利用して起動してるなら STARTまたは@を利用して
PL/SQLファイル(拡張子:sql)を起動したら如何でしょう?
例:sqlplus ユーザー名[/パスワード] @ファイルパス(c:\test.sql)
ぽー様、だっちゃん様
ありがとうございます。
PL/SQLファイルの起動も考えさせていただきましたが、単純なSQL文なので
今回はSendKeysを使用させてもらう事にしました。
一応以下のプログラムで動作する事を確認したのですが…。
----------------------------------------
Private Sub Form_Load()
Dim lret As Long
lret = Shell("C:\orawin95\BIN\PLUS80W.EXE user/pass@sid", vbNormalFocus)
End Sub
Private Sub Form_GotFocus()
AppActivate "Oracle SQL*Plus"
SendKeys "SQL文" 'SQL文発行
SendKeys "{ENTER}" '実行
SendKeys "EXIT" 'SQL*Plus終了
SendKeys "{ENTER}" '実行
End Sub
----------------------------------------
最初、Form_LoadイベントでSendKeysを使用していたのですがこの場合
正常に動作しませんでしたのでForm_GotFocusにて行うことになったの
ですが、Form_Loadでは無理なのでしょうか?
また、SQL*Plusを終了させた後Formが残るのですが、これも自動的に終
了させたいのですが、自分なりに調べてUnloadを使ってみたのですが、
うまく動作しませんでした。
何か良い方法はありますでしょうか?
超初心者的な質問で申し訳ないのですが、よろしくお願いいたします。
やりたい事がよくわかりませんが、作成されているフォームを
SQL*PLUSの起動にしか使わないのであればVBを使う必要もないのでは?
Windowsのショートカットを使うとか。
それから、SendKeysよりもだっちゃんさんの方法の方が安定すると思います。
s様
このプログラムの目的なんですけど、AとBのサーバーがあります。
Aは本番DBサーバーで、BがバックアップDBサーバーです。
ちなみにDBはOracleです。
Aで作成されたアーカイブREDOログをBに定期的に転送し、B
はこのログを適用させなくてはなりません。
で、この適用部分を自動化させたいと言う事をやりたかったのです。
ちなみに、Aは東京にBは大阪に設置され私は東京にいるので自動化
は必須なのです。
とりあえず、SendKeysとPL/SQLファイルを起動させる方法の2種類
を作ってみて、検討してみます。
すいません、ちょっと質問させてください。
だっちゃん様が言われている、PL/SQLファイルを起動させる方法とは
SQL*Plusでの作業と言う事でしょうか?
それとも、VBでと言うことなのでしょうか?
もし、SQL*Plusでと言う事であればやはりSendKeysを利用せざるを
得ないかも…。
よろしくお願いいたします。
こんちは。
私がイメージしてるのはVBからsqlplusを呼び出して処理をする方法です。
簡単に説明するとPL/SQLファイル(拡張子:sql)にSendKeysで発行している
SQL文を記述し任意のフォルダに保存しておきます。
sqlplusの起動時に、保存したファイルまでパスを引数にしてあげれば
自動実行でファイル内のSQL文を発行してくれます。
詳しくはsqlplusのマニュアルを参照してください。
動きを確認したいならば簡単なSQL文をファイルに保存して
コマンドプロンプトから発行してくだい。
下記の例は、ファイルをc:\test.sqlとした場合です。
sqlplus user/passwd@sid @c:\test.sql
だっちゃん様
>sqlplusの起動時に、保存したファイルまでパスを引数にしてあげれば
>自動実行でファイル内のSQL文を発行してくれます。
SQL*Plusでuser、pass、sidを引数にできる事は知っていましたが
ファイルまで引数にできるなんて知りませんでした。
VBははじめて一ヶ月程度ですが、SQL*Plusはそれなりにやってき
ていたのでそれなりにできると自負していたのですが…。
お恥ずかしい限りです…。
とりあえず、この方法で仕様を実現させます。
ぽー様、だっちゃん様、s様、他少しでも考えてくださった方々。
皆さんのおかげで、何とかなりました。
ありがとうございました。
今後また分からないことがありましたら、また質問させていただくか
もしれませんがその時はよろしくお願いいたします。
ツイート | ![]() |