
ExcelからSQL Serverの外部取り込みを行う際に
VBAの条件文の1部にWHERE(JOBTBL.BATCHID Like '12%')と書き
実行すると12から始まるデータの取得が正常に行われます。
実際には'12%'の箇所に当日日付を取得するようなものを書きたいので
変数T_DAY=format(Now,"mmdd")を入れて
WHERE(JOBTBL.BATCHID Like 'T_DAY%')で実行すると
エラーは出ませんが結果が表示されません。
変数を使用することは出来ないのでしょうか?
その場合、当日日付4桁から始まる列を含むテーブルを取得したい場合
どのようにすればよいでしょうか?
ご教授ください。
No.1ベストアンサー
- 回答日時:
"WHERE(JOBTBL.BATCHID Like '12%')"
も変数に入っているものですよね?
strSQL = "(略)..WHERE(JOBTBL.BATCHID Like '12%')"
これなら SQL Server 側で認識されるSQLは
(書くまでもないと思いますが)
(略)..WHERE(JOBTBL.BATCHID Like '12%')
になります。
では、質問者様の書かれたSQLではどうでしょうか?
T_DAY=format(Now,"mmdd")
strSQL = "(略)..WHERE(JOBTBL.BATCHID Like 'T_DAY%')"
SQL Server側で認識されるSQLは
(略)..WHERE(JOBTBL.BATCHID Like 'T_DAY%')
です。
つまり、『BATCHID が文字列「T_DAY」で始まるもの』となってしまいます。
VBA側の変数T_DAYの内容で渡したいわけですから、以下のようにします。
strSQL = "(略)..WHERE(JOBTBL.BATCHID Like '" & T_DAY & "%')"
これなら、T_DAY が 1202 だとしたら、SQL Server 側で認識されるSQLは
(略)..WHERE(JOBTBL.BATCHID Like '1202%')
となります。
この回答では簡便な方法で書きましたが、上記の方法は、本来は、プレースホルダによるパラメータバインドを使うべきです。
手入力の値ではないと言う事で、大丈夫だとは思いますが、SQLインジェクションを起こし易いセキュリティレスな方法なので好ましくないです。
一応、MSDNの例が載っているところをリンクしておきます。
SqlCommand.Prepare メソッド
http://msdn.microsoft.com/ja-jp/library/system.d …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ストアド内で動的にSQLを作る際のLIKE演算子シングルクォーテーションの数
SQL Server
-
ストアドプロシージャ_カーソルのヒット件数
その他(データベース)
-
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
-
4
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
5
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
6
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
7
2つの列が同じ値の行を取得するSQL
Oracle
-
8
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
9
引数によってwhere句を切り替える方法
Oracle
-
10
オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
SQL Server
-
11
Excel 例A(1+9) のように番地のたし足し算の方法を教えてください
その他(Microsoft Office)
-
12
カーソルを使って、最終行レコードの判断はどうすればよいのでしょうか。
SQL Server
-
13
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
14
副問合せにLIKE文を使う方法はないでしょうか?
Oracle
-
15
AccessのWHERE句において、変数は使用できますか?
Access(アクセス)
-
16
SQLのエラー(~付近に不適切な構文があります)
SQL Server
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
利用者側のMACアドレスを取得し...
-
VB.NETでルータのグローバルIP...
-
ListView 項目の選択/選択解除...
-
EnumWindowsのコールバック関数
-
ドロップダウンリストの初期表...
-
郵便番号検索APIにてget Elemen...
-
Excel VBA でログインしてい...
-
LINQで取得したときの順序
-
現在時刻をミリ秒まで取得
-
PHP8でWarning:Undefined varia...
-
COMポート 名前を取得する方法
-
VB.NETで DataRow()を利用して...
-
テキストボックスのvalueとtext...
-
Excel VBAのリストボックスの値...
-
マクロで奇数と偶数の値を2か所...
-
Application.Matchで特定行の検索
-
VBAでページ番号、ページ最終行...
-
RC表示に変数を入れる
-
VBA 配列に格納した値の平均の...
-
ACCESSテーブルを RecordSet以...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
PHP8でWarning:Undefined varia...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
VBAでActiveDirectoryのユーザ...
-
VBA:小数点以下の数字を取得で...
-
JSP+Servletでのページングの常識
-
データ数をカウントしたいのですが
-
Flexgridで選択行の列の値を取...
-
利用者側のMACアドレスを取得し...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
JavaScriptにおいてコンピュー...
-
郵便番号検索APIにてget Elemen...
-
DataGridView 複数選択で行番...
-
URIでのページの移動について
-
Spreadの選択行の取得について
-
指定のURLのタイトルを取得...
-
EXCELのリストボックスを選択し...
-
ListViewで複数選択された項目...
おすすめ情報