ExcelへのOracleからのデータ抽出条件の書式とエラーの解消方法

このQ&Aのポイント
  • ExcelへのOracleデータ抽出の条件書式を教えてください。エラーが発生しています。
  • Oracleからのデータを抽出してExcelに表示する際の条件書式とエラー解消方法を教えてください。
  • Oracleデータ抽出時の条件書式にエラーが発生しています。Excelへのデータ表示方法を教えてください。
回答を見る
  • ベストアンサー

whereで変数込みの抽出条件

office2010,oracle 11g oracleからexcelへの抽出条件で、(1)と(2)は、それぞれで動作します。 (1)と(2)をor条件で接続したいのですが、どの様な書式になるか教えていただきたく。 Dim t As String t = Mid(Sheets("macro").Range("I1").Value, 1, 8)  I1セルには式=TEXT(NOW(),"yyyymmdd")が入っています。 (1) rs.Open "select * from USER where (A ='B' and C ='D' and E <>'F' and E <>'G' and not E like '使用不可%') or ( A ='B' and C ='H') ", cn, adOpenDynamic, adLockOptimistic, adCmdText (2) rs.Open "select * from USER where K ='L' and M >" & t, cn,adOpenDynamic,adLockOptimistic, adCmdText where (…) or (…) or (…) , cn,adOpenDynamic,adLockOptimistic, adCmdText という構成でエラーになるのです。 ※なお、条件分は、本来のものと変えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは rs.Open "select * from USER where ((A ='B' and C ='D' and E <>'F' and E <>'G' and not E like '使用不可%') or ( A ='B' and C ='H') or (K ='L' and M >" & t & ") ", cn, adOpenDynamic, adLockOptimistic, adCmdText では、ダメだったという事でしょうか?

3620313
質問者

お礼

いけました。 ありがとうございます。 rs.Open "select * from USER where ((A ='B' and C ='D' and E <>'F' and E <>'G' and not E like '使用不可%') or ( A ='B' and C ='H') or (K ='L' and M >" & t ") ", cn, adOpenDynamic, adLockOptimistic, adCmdText の様に、tの後ろの&がなくてコンパイルエラーと表示されていました、

関連するQ&A

  • Oracleからexcelへの抽出条件

    office2010 oracle11g Oracleデータベースから、excelマクロで条件を満たすデータを抽出したいです。 macroシートのI1に =TEXT(NOW(),"yyyymmddhhmm") が設定されています。 oracleのUSERというテーブルで、V_HELP_END_DTの列に日付としてのデータが入っています。 20170327 20160609 の様に西暦月日、8桁のデータです。 今日の日付 < V_HELP_END_DT のデータを抽出する条件で下記の様に設定しました。 Dim t As String t = Sheets("macro").Range("I1").Value rs.Open "select * from USER where V_HELP_END_DT >" & t, cn, adOpenDynamic, adLockOptimistic, adCmdText 上記のマクロで、エラーは発生しないのですが、何も抽出されません。 何が悪いのか、訂正いただきたく、よろしくお願いします。 なお、下記の場合は、2017から始まるデータが抽出されます。 rs.Open "select * from USER where V_HELP_END_DT > '2017%' ", cn, adOpenDynamic, adLockOptimistic, adCmdText

  • WHERE レコードが抽出されない

    ADOでSQL文を作ってるのですが WHERE句がうまくできません。 rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "URL like '#*'" なら、うまくいくのですが、 Filterを使うのをやめて、WHEREに書きかえると、エラーにはならないのですが 取得レコードが0件になります。 rs.Open "T_テーブル WHERE [URL] like '#*';", cn, adOpenKeyset, adLockOptimistic も rs.Open "T_テーブル WHERE URL like '#*';", cn, adOpenKeyset, adLockOptimistic も、0件が返ります。 何がおかしいのでしょうか? URLフィールドで、#で始まるレコードを抽出したいです。

  • WHERE句だと抽出できない VBA ADO

    アクセスのADOについて質問があります。 SQL文の中でWHERE句を使ってフィルタをすると返り値が0件になるのに、 rs.Open strSQLした後に、 rs.Filterで抽出すると、適切な数値が返ります。 具体的に言うと 【1】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名 WHERE (((T_会社名.住所) Like ""*埼玉*""));" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic i = rs.RecordCount 【2】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名;" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic rs.Filter = "T_会社名.住所 like '%埼玉%'" i = rs.RecordCount だと、【2】が、適切な数値が返ります。 なぜ【1】はダメなのでしょうか?

  • WHERE と Filter

    アクセスのADOで rs.Open "SELECT * FROM テーブル1 WHERE フィールド1=あ", cn, adOpenStatic, adLockOptimistic とするのと、 rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.Filter = "フィールド1゛ = 'あ'" とするのでは、 どちらの方が処理速度が速いですか?

  • 【ADO】「Filter」を使うか「WHERE」を使うか

    こんばんは。 アクセス2003です。 「Filter」を使うか「WHERE」を使うかべきかわからないので教えてください。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Sub test1() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル WHERE 'フィールド1'='りんご", cn, adOpenKeyset, adLockOptimistic rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub Sub test2() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'" & "りんご" & "'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上のふたつのステートメントは Tテーブルのフィールド1にりんごの文字が入力されているレコート゛を抽出します。 いくつかこのような動作をするプログラムを書くのですが どちらのほうがコート゛として適していますか? WHEREを使うtest1の方がコート゛が短くなるからいいのでしょうか? というのもいつかこのファイルを引き継ぐので他人が見てもわかりやすくしたいです。 よろしくお願い致します。

  • 「オブジェクトが開いている場合は操作は許可され

    vbaループしながらマクロを実行しているのですが、 2度目のループで rs.Open "SELECT * FROM T明細", cn, adOpenStatic, adLockOptimistic の場所で 「オブジェクトが開いている場合は操作は許可されません」 となってしまいます。 エラーになって中断中に rs.Open "SELECT * FROM T明細", cn, adOpenStatic, adLockOptimistic の一つ前に、rs.Closeを入れて、 rs.Close rs.Open "SELECT * FROM T明細", cn, adOpenStatic, adLockOptimistic としてみましたが、 rs.Close の部分で 実行時エラー 3219 このコンテキストで操作は許可されていません。 となります。 マクロを停止せず、コードを修正して続行する方法と エラー発生の原因を教えてください。

  • SQL文のWHERE

    VB6.0 ACCESSで開発しています。 下記のように日付で検索をしているのですが 社員コードでも検索をしたいのですがうまくいきません。 rst.Source = "SELECT * FROM t_nyuryoku Where 日時 = '" & Text3.Text & "'の部分を rst.Source = "SELECT * FROM t_nyuryoku Where 日時 = '" & Text3.Text & "' AND 社員コード = '" & Label1.Caption & "' としたのですがうまく検索できません。 よくわかりません。 Dim cn As New ADODB.Connection Dim rst As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\temp\db2.mdb" cn.Open Set rst = New ADODB.Recordset rst.Source = "SELECT * FROM t_nyuryoku Where 日時 = '" & Text3.Text & "' rst.ActiveConnection = cn rst.CursorType = adOpenStatic rst.LockType = adLockOptimistic rst.Open

  • whereの使い方が分からないのですが…

    foodテーブルの全ての項目内から「りんご」「みかん」というのキーワードをAND検索させたいのですが、 select * from food where ("りんご" AND "みかん"); select * from food where * "りんご" AND "みかん"; select * from food where *="りんご" AND *="みかん"; select * from food where *=("りんご" AND "みかん"); 思いつく限り試しましたが、どれもうまく行きません。 select * from food where (a="りんご" AND a="みかん") or (b="りんご" AND b="みかん") or (c="りんご" AND c="みかん") or… と、延々と続いて書くしかないのでしょうか? 何か方法はありますか?

    • ベストアンサー
    • MySQL
  • MSFlexGridでデータの追加の方法は?

    VB6.0 WINXP DB:Oracle10g  よろしくお願いします。 SELECT文でデータベースからデータを取ってきてMSFlexGridにデータを送ったのですが、そのデータに更に追加したいと思います。 ' ADOのオブジェクト変数を宣言する Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim STRSQL As String 'Oracleとの接続 cn.Open "Provider=MSDAORA;" & _ "Data Source=NT;", "scott", "tiger" ' SQLステートメントを指定してレコードセットを作成する re.Open STRSQL = "select * from TOKUI WHERE A01 = 100" rs.CursorLocation = adUseClient rs.Open STRSQL, cn, adOpenDynamic, adLockBatchOptimistic 'グリッドに送る Set MSFlexGrid1.DataSource = rs 'ここからのSELECT文を追加したいと思います。 STRSQL = "SELECT TOKUI FROM WHERE A01 = 200" Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open STRSQL, cn, adOpenDynamic, adLockBatchOptimistic よろしくお願いします。

  • RE: [Excel ADO]未登録データの抽出法

    以前質問した内容↓で、一旦解決したかに思えたのですが http://okwave.jp/qa/q9185441.html Set CN = New ADODB.Connection CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.FullName & ";" & _ "Extended Properties='Excel 8.0;HDR=YES'" CN.CursorLocation = adUseClient Sql = "SELECT * FROM T_訪問者 WHERE NOT EXISTS " & _ "( SELECT * FROM T_名簿 WHERE T_名簿.登録者名 = T_訪問者.訪問者名 )" Set RS = CN.Execute(Sql) Debug.Print RS.RecordCount 以上のようなコード(疑似です)で、 未登録データがないにもかかわらず、RS.RecordCountが1を返す場合があります Sql = "SELECT COUNT(*) FROM T_訪問者 WHERE NOT EXISTS " & _ "( SELECT * FROM T_名簿 WHERE T_名簿.登録者名 = T_訪問者.訪問者名 )" として、件数を出した場合も同様です。 RS.fields(0)などはNULLのままで何も入っていません 未登録データがある場合の抽出は全く問題ないのですが、 抽出数が0(登録済みデータだけ)なら通常処理、といきたいのに うまくいかず困っています。 何が悪いのでしょうか。

専門家に質問してみよう