VBの実行中にSQL*LOADERを実行させたいのですけど、
どのようにパラメータを渡せばよろしいのでしょうか?
よろしくお願いします。
SHELL関数を利用してDOSプロンプトからコマンドを発行するのと同様の
ことを実現することができます。
Shell(コマンド,ウィンドウ形式)
てな感じで。
SQL*LOADERなら、たとえば
SHELL("sqlldr.EXE userid=GOTO/GOTO@SERVER010control=…",vbMinimizedNoFocus)
でできます。(vbMinimizedNoFocus=実行中ウィンドウは最小化表示)
しかし、Shell関数はコマンドを発行後に該当のPGが終了するまで待ち合わせる
といったことをしません。たとえばSQL*LOADERでデータをInsertし、COMMITがきられた後に次の処理を行いたいという場合(おそらくそうでしょう)はAPI関数でプロセスハンドルを取得し、終了するまでループする等の工夫が必要でしょう。
ありがとうございます。
ハナクソース様のコメントを参考させていただきます。
データのファイルがTAB区切りなんですけど、問題なく読めるのでしょうか?
追加の質問をしてしまい申し訳ありません。
よろしくお願いします。
TAB区切りうんぬんはVBではなく、SQL*LOADERでの話になってきますね。
Shell関数はあくまでも”Dosプロンプトでコマンドを発行する”という関数だと
思ってください。
さて、SQL*LOADERでTAB区切りデータのロードですが…
私がCSVファイル(つまりカンマ区切り)でやったときのSQL*LOADERのコントロールファイルの記述です。よかったら参考にしてみてください
load data
infile "D:\テストデータ.CSV"
append
into table テストデータマスタ
fields terminated by "," ←この部分にデータの区切り文字を指定する
(
COLUMN_A,
COLUMN_B,
COLUMN_C
)
ちょっとVBからはそれましたが、がんばってみて下さい。参考になれば幸いです。
ハナクソース様何度もありがとうございます。
TAB区切りで読むことができました。
でも、nullデータ場合(A,,B区切りは「,」)nullの値を飛ばして読んでしまいます・・・。
いろいろ調べてみたんですけれどもダメでした。
preserve blanksを使えばいいのでしょうか?
よろしくお願いします。
preserve blanksを使って、
optionally enclosedを削除したところ
無事実行することができました。
ありがとうございました。