質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • SQL

    3158questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • VBA

    2469questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • SQL Server

    757questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • Access

    642questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Access VBA  フォーム作成 検索条件 前方一致のwhere句

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,601

nekomura

score 124

よろしくお願いいたします。

フォーム画面にボタンとテキストボックスを用意して、   
'invoiceNo と'invoiceDisplay としたテキストボックスに検索条件を入力し、   
ボタンを押下すると、accessで作ったテーブル(AccessTable )のデータ(接続文字列)を使って、  
SQLサーバにあるテーブル(tbmCountry)の内容を取得し、フォーム上のリストに反映されるようにしています。

テキストボックスのいずれかに値が入っていれば、前方一致のWHERE句を作って件数を表示したいのですが、
私が書いたSQL文では実行されません。
※CountryCodeは、key列です。

誤り箇所が不明のため、有職者の方にご教示いただきたく存じます。

'#####################################################################
'# Name         : データ取得_Click
'# Description  : 入力の画面に対し管理システムより指定したデータの取込 
'#####################################################################
Private Sub データ取得_Click()
      '  On Error GoTo Err_データ取得_Click

 '*****DB接続変数定義*****
 Dim DB                 As Database
 Dim q1                 As Recordset, q2 As Recordset
 Dim SQLCommand         As String   'データベース接続文字列を取得するSQL文
 Dim strConnection      As String       'データベース接続文字列
 Dim strCount           As Integer      'データ件数
 Dim objCon             As New ADODB.Connection
 Dim objRs              As New ADODB.Recordset
 Dim dbCom              As ADODB.Command

    Set DB = CurrentDb()

    'データベース接続文字列を取得するSQL文
    SQLCommand = "SELECT ID, Value FROM AccessTable WHERE ID = 1"
    Set q1 = DB.OpenRecordset(SQLCommand)

    '取得したデータベース接続文字列
    strConnection = q1!Value


    'データ件数を取得するSQL文(500という数字が入っています)
    SQLCommand = "SELECT ID, Value FROM AccessTable WHERE ID = 2"
    Set q2 = DB.OpenRecordset(SQLCommand)

    '取得したデータ件数
    strCount = q2!Value


 '*****フォーム変数定義*****
  Dim invNo     As Variant         'invoiceNo
  Dim invDisp   As Variant         'invoiceDisplay


    invNo = Me.invoiceNo
    invDisp = Me.invoiceDisplay

   '検索条件が未入力の場合
   If IsNull(invNo) And IsNull(invDisp) Then
        MsgBox "検索条件を指定してください"
       Exit Sub
   End If

   'テキストボックスに値が両方、またはいずれかが入力されている場合

   If Not IsNull(invNo) Or Not IsNull(invDisp) Then


           '接続文字列を取得しSQLサーバーへ接続
           objCon.ConnectionString = strConnection

           objCon.Open

           //ここでエラー 記述の仕方が不明
          objRs.Open "SELECT COUNT CountryCode, FROM tbmCountry WHERE  CountryCode LIKE '_%' ", objCon, adOpenKeyset, adLockOptimistic




           objRs.Close
           objCon.Close

           Set objRs = Nothing
           Set objCon = Nothing



End If
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

「SELECT COUNT CountryCode, FROM tbmCountry 」
↑カンマいらんすね。

「WHERE  CountryCode LIKE '_%'」
↑なにの前方一致にしたいのかわかりませぬ。
たとえば「先頭文字がAのデータ」としたいなら「where countrycode like 'A%'」とかになりますが。
「_」(アンダーバー」)は普通のSQLなら「任意の一文字」を意味しますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/14 13:50

    tkturbo様
    いつもありがとうございます。
    ご指摘のとおり、SQL文を
    ’’’    strSql = "SELECT COUNT CountryCode FROM tbmCountry WHERE CountryCode LIKE 'A%' " objCon, adOpenKeyset, adLockOptimistic ’’’
    と書き直してみたのですが、コンパイルエラーとなります。
    どこかおかしいところがあれば、再度ご教示いただけませんでしょうか。

    よろしくお願いいたします。

    キャンセル

  • 2016/03/14 14:15

    「Set objRs = objCon.Execute (SQL文)」とかじゃだめですかね?

    キャンセル

  • 2016/03/14 17:14

    tkturbo様
    一旦、エラーは出なくなりました。
    ありがとうございます。

    また、次の問題にぶつかってしまった為、つぎの質問に移ります。
    どぞよろしくお願いいたします。

    キャンセル

+1

まずSQL Management Studioなどのビジュアルなクエリビルダで意図するクエリを作ってからの方が近道だと思いますよ

あとどこまでがSQL文だとか、VBAでの値の渡し方を根本的に間違えてるんじゃないですか?

strSql = "SELECT COUNT CountryCode FROM tbmCountry WHERE CountryCode LIKE 'A%' "
objRs.Open strSql, objCon, adOpenKeyset, adLockOptimistic


※SQL文が正しいかはご自分で確認してください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/14 17:12

    dojikko様
    いつもありがとうございます。
    はい、アドバイスどおり先にクエリを作ってから試してみようと思います。

    >あとどこまでがSQL文だとか、VBAでの値の渡し方を根本的に間違えてるんじゃないですか?
    はい、やりたいことは頭にあるのですが、細かい文法がわからずエラーばかり出て根本的に解決できません。
    なにかご教示いただければ幸いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • SQL

    3158questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • VBA

    2469questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • SQL Server

    757questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • Access

    642questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。