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

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

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

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

SQL Server

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

Access

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

SQL

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

Q&A

解決済

2回答

4184閲覧

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

nekomura

総合スコア132

VBA

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

SQL Server

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

Access

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

SQL

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

1グッド

0クリップ

投稿2016/03/14 04:23

編集2016/03/14 04:27

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

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

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

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

Option

1 2'##################################################################### 3'# Name : データ取得_Click 4'# Description : 入力の画面に対し管理システムより指定したデータの取込 5'##################################################################### 6Private Sub データ取得_Click() 7 ' On Error GoTo Err_データ取得_Click 8 9 '*****DB接続変数定義***** 10 Dim DB As Database 11 Dim q1 As Recordset, q2 As Recordset 12 Dim SQLCommand As String 'データベース接続文字列を取得するSQL文 13 Dim strConnection As String 'データベース接続文字列 14 Dim strCount As Integer 'データ件数 15 Dim objCon As New ADODB.Connection 16 Dim objRs As New ADODB.Recordset 17 Dim dbCom As ADODB.Command 18 19 Set DB = CurrentDb() 20 21 'データベース接続文字列を取得するSQL文 22 SQLCommand = "SELECT ID, Value FROM AccessTable WHERE ID = 1" 23 Set q1 = DB.OpenRecordset(SQLCommand) 24 25 '取得したデータベース接続文字列 26 strConnection = q1!Value 27 28 29 'データ件数を取得するSQL文(500という数字が入っています) 30 SQLCommand = "SELECT ID, Value FROM AccessTable WHERE ID = 2" 31 Set q2 = DB.OpenRecordset(SQLCommand) 32 33 '取得したデータ件数 34 strCount = q2!Value 35 36 37 '*****フォーム変数定義***** 38 Dim invNo As Variant 'invoiceNo 39 Dim invDisp As Variant 'invoiceDisplay 40 41 42 invNo = Me.invoiceNo 43 invDisp = Me.invoiceDisplay 44 45 '検索条件が未入力の場合 46 If IsNull(invNo) And IsNull(invDisp) Then 47 MsgBox "検索条件を指定してください" 48 Exit Sub 49 End If 50 51 'テキストボックスに値が両方、またはいずれかが入力されている場合 52 53 If Not IsNull(invNo) Or Not IsNull(invDisp) Then 54 55 56 '接続文字列を取得しSQLサーバーへ接続 57 objCon.ConnectionString = strConnection 58 59 objCon.Open 60 61 //ここでエラー 記述の仕方が不明 62 objRs.Open "SELECT COUNT CountryCode, FROM tbmCountry WHERE CountryCode LIKE '_%' ", objCon, adOpenKeyset, adLockOptimistic 63 64 65 66 67 objRs.Close 68 objCon.Close 69 70 Set objRs = Nothing 71 Set objCon = Nothing 72 73 74 75End If 76 77 78 79 80
hato_pato👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

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

投稿2016/03/14 04:36

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/03/14 04:50

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

2016/03/14 05:15

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

2016/03/14 08:14

tkturbo様 一旦、エラーは出なくなりました。 ありがとうございます。 また、次の問題にぶつかってしまった為、つぎの質問に移ります。 どぞよろしくお願いいたします。
guest

0

まず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 08:06

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/03/14 08:12

dojikko様 いつもありがとうございます。 はい、アドバイスどおり先にクエリを作ってから試してみようと思います。 >あとどこまでがSQL文だとか、VBAでの値の渡し方を根本的に間違えてるんじゃないですか? はい、やりたいことは頭にあるのですが、細かい文法がわからずエラーばかり出て根本的に解決できません。 なにかご教示いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問