• ベストアンサー

条件分に数値型は可能?

ACCESS97を使用しています。 SQLの中で 数値型の場合、条件式に適用できないのでしょうか? 例えば 下記の場合 Set DB = CurrentDb() strSQL = "SELECT * FROM テーブルA WHERE " strSQL = strSQL + "コード ='" & YU(i) & "'" strSQL = strSQL + " AND ラベルNO='" & RA(i) & "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) YU(i)は、文字型、RA(i)は数値型です。 RA(i)で"抽出条件でデータ型が合いません"と出ます。 コードは文字型、ラベルNOは数値型です。数値型では条件として適用できないのでしょうか? 可能な場合、上のような表現ではできないのでしょうか?

  • cdma
  • お礼率36% (91/247)

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

strSQL = strSQL + " AND ラベルNO='" & RA(i) & "';" シングルクォーテーションでRA(i)を囲むからエラーになります。 こうしましょう strSQL = strSQL + " AND ラベルNO=" & RA(i) & ";"

cdma
質問者

お礼

上手くいきました ありがとうございました。

その他の回答 (1)

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.2

はじめまして。 strSQL = strSQL + " AND ラベルNO='" & RA(i) & "';" ↓ strSQL = strSQL + " AND ラベルNO=" & RA(i) でやってみてください。数値タイプの場合はシングルクォーテションはいりませんし、最後のセミコロンもAcessなら要らないと思いますが…。

関連するQ&A

  • SQLの条件分に ( ) が入っている場合

    Access97を使用しています。 SQLの条件で、項目名に '(' が入っている場合 どうすればいいのでしょうか? 例えば 下記の場合 " 式に未定義関数 '出荷日'があります " と出てきます。 Set DB = CurrentDb() strSQL = "SELECT SUM(数量) AS A FROM GAH100 WHERE " strSQL = strSQL + "出荷日(新)='" & Me.日付入力 "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) 項目名に() が無いようにするしかないのでしょうか?

  • 条件によって、Where分のキーを変更させたい

    ACCESS97を使用しています。SQL文の中で、変数?を使用したいのですが、 その扱いがわかりません。 例) 下記のようなテーブルがあります。 項目(1) 項目(2) 項目(3) 項目(4) 項目(5) 1 A 100 EE RR 2 B 200 EE RR 3 A 100 EE RR 4 A 100 CC EE 5 B 300 RR EE 6 A 100 RR EE 7 B 200 CC RR フォーム上で、項目(2)を入力します。(入力_1) また、もう1つ、データを入力します。(入力_2、EE,CC,RR) 項目(2)の値によって、 Aの時、項目(4) Bの時、項目(5)をみにいくようにしたいのです。 例えば、入力_1=A、入力_2=EEの時、 合計値200 (項目(1)は、1,3)     入力_1=B、入力_2=EEの時、 合計値300 (項目(1)は、5) この時、下記のようなロジックを組んでみたのですが パラメーターが少なすぎます と出てきます。  (SELECT対象は、一旦 * にしています) Dim KEY As String If (ME.入力_1 = "A") Then  '条件は別入力です。 KEY = "項目(4)" Else KEY = "項目(5)" End If Set RS = Nothing Set DB = Nothing Set DB = CurrentDb() strSQL = "SELECT * FROM テーブル WHERE " strSQL = strSQL + "KEY='" & Me.入力_2 & ";" strSQL = strSQL + "AND 項目(2)='" & Me.入力_1 & "'" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) KEY をどのようにすればいいのかがわかりません。 宜しくお願いします。

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • AccessSQL COUNT文で該当レコード抽出したい

    初心者です。 Access2000であるテーブルの条件に一致した レコード件数を抽出するSQLを作成しました。 条件に該当しない場合も1件で件数が戻ってきてしまいます。 AccessクエリでSQLを貼り付けて 検証した場合はちゃんと0件になるのですが VBAのコードではうまく件数が抽出されません。 簡単なことだったらごめんなさい。 いろいろなサイトで探した末、 どうしても解決できないので ご教授よろしくお願いします。 Dim strSQL As String Dim db As DAO.Database Dim rs As DAO.Recordset  Dim IntCount As integer 'SQL文を生成 strSQL = "SELECT COUNT(*) AS 件数 FROM テーブル名 " strSQL = strSQL & "WHERE テーブル名.コード = '" strSQL = strSQL & Forms![フォーム名]![txtコード] strSQL = strSQL & "' AND Left([テーブル名]![区分],1) = '" strSQL = strSQL & Forms![フォーム名]![cnb種類].Column(0) strSQL = strSQL & "' AND テーブル名.名称 = '" strSQL = strSQL & Forms![フォーム名]![txt名称] strSQL = strSQL & "';" Set db = CurrentDb Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) IntCount =  rs.RecordCount rs.Close Set db = Nothing Set rs = Nothing

  • "カレントレコードがありません"とでてきます

    Access97を使用しています。 データは テーブルAの項目B、項目Cが下記のようにあるとします。 フォーム上のText"B"に項目Bを入力します。 項目B 項目C 11 a 11 b 22 aa 22 bb 22 cc 33 aaa 33 ccc この時 Set DB = CurrentDb() strSQL = "SELECT * FROM A WHERE " strSQL = strSQL + "B='" & Me.B & "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) RS.MoveFirst RS.MoveLast m = RS.RecordCount For i = 1 To m COIL_N = RS.Fields("C") Call RS.MoveNext Next i 上記のようなモジュールですが、例えば 項目Bの"11"を選んだ時、項目Cの二番目のデータbが 取得できません。 "カレントレコードがありません"とでてきます。何故でしょうか?

  • Recordcountについて

    ACCESS97を使用しています。 テーブルAの項目1の中で、テキスト1に入力した値をキーに SELECTし そのデータ件数を知りたいのです。 しかし、下記のようにすると、0件の時はintcountは 0 になるのですが 1以上の場合、複数でも intcountは 1になります。 1件と 2件以上が区別できません。 何故でしょうか? Set db = CurrentDb() strSQL = "SELECT * FROM テーブルA WHERE " strSQL = strSQL + "項目1='" & Me.テキスト1 & "';" Set RS1 = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) intcount = RS1.RecordCount If (intcount = 0) Then Me.テキスト2 = "使用無し" ElseIf (intcount = 1) Then Me.テキスト2 = "1件使用" ElseIf (intcount > 1) Then Me.テキスト2 = "複数使用" End If

  • Yes/Noフラグの値をコピーできない

    すいません。ACCESS2003 VBAで下記の問題で困っています。 新たに作成したmdbファイル(テーブルの中身は空)に既存のmdbファイルのテーブル内容をコピーしたいのですが、Yes/Noフラグ型だけ移行できません。一応サンプルのソースです↓ Dim db As DAO.Database Dim RS As DAO.Recordset Dim strsql As String コピー元のmdbファイルをオープン Set db = OpenDatabase("コピー元mdb") 'SQLの生成 strsql = "" strsql = strsql & " SELECT * FROM テーブル名" 'レコードセット生成 Set RS = db.OpenRecordset(strsql, dbOpenSnapshot, dbReadOnly) 'コピー元テーブルにデータがあるか判定 If RS.RecordCount = 0 Then msgbox "データがありません" Else RS.MoveFirst 'コピー先のデータベースを設定 Set db = OpenDatabase("コピー先mdb") 'レコードの初期化 db.Execute (DELETE FROM コピー先テーブル名) Do While RS.EOF = False strsql = "" strsql = strsql & " INSERT INTO コピー先テーブル名(" strsql = strsql & " ,コピー先のYes/Noフラグ値" ' strsql = strsql & ")VALUES(" strsql = strsql & " ,'"コピー元のYes/Noフラグ値 "' " strsql = strsql & ")" db.Execute (strsql) RS.MoveNext Loop End If RS.Close db.Close

  • Access97 SQLでINSERT されない

    Access97を使って下記のようなモジュールを作成しました。  が、接続DAT にはデータが追加されません。  何故でしょうか?   j = 10 i = 1 strSQL = "" Do Until i = j JIJI = JI(i) strSQL = "INSERT INTO 接続DAT (重複ID,区別記号" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "'" & JIJI & "'" strSQL = strSQL & ", '" & D & "'" strSQL = strSQL & ")" Set DB = CurrentDb() DB.Execute strSQL Set DB = Nothing Set RS = Nothing i = i + 1 Loop

  • 変数に入った値を追加したい

    Access97を使用しています。SQLで変数に入った値を追加したいのです。 Dim strSQL, NO3, NO2 As String Dim i As Integer Dim db As DATABASE Dim SN As Variant If (C_Flag = 0) Then SN = 0 Else SN = 1 End If strSQL = "INSERT INTO 連続印刷 (Nフラグ" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "', 'SN'" strSQL = strSQL & ")" Set db = CurrentDb() db.Execute strSQL Set db = Nothing End Sub 上記のようにすると、"SN"のデータが入ります。 'SN'をSNのようにすると、パラメータが少なすぎますと出てきます。 どうすれば、上記 0や1の値を取得することができるのでしょうか?

  • SQLとDAOで取得するレコード件数が違う?

    Access2007でSQLで実行した結果と、レコードセットで取得した件数が一致せずに困っています。 いろいろ調べてはみたのですが、なぜかわかりません。 よろしくお願いします。 ○TableA 型 Code1 数値型(主キー) Text テキスト型 Code2 数値型 ○TableA データ Code1 Text Code2 111 AAA 10 112 BBB 15 113 CCC 20 114 DDD 20 ○VBAコード Dim strSQL As String Dim db As DAO.Database Dim rstFind As DAO.Recordset strSQL = "SELECT * FROM TableA Where Code2 = 20" Set db = CurrentDb() Set rstFind = db.OpenRecordset(strSQL, dbOpenSnapshot) MsgBox rstFind.RecordCount この状態でSQLビューから実行すると2件が抽出され、上記VBAを実行するとMsgBoxには「1」と表示されます。

専門家に質問してみよう