Microsoft Access 掲示板

レコードの取得について

6 コメント
views
4 フォロー

 Set rs = db.OpenRecordset("SELECT * FROM T_設計_作業名情報 WHERE 作業名No = " & i2)
でテーブルのレコードを取得しています

今回やりたい事が
 Set rs = db.OpenRecordset("SELECT * FROM Q_設計_実績伝票処理_作業別時間集計 WHERE 作業名No = " & i2)
とクエリのレコードの取得も可能なのでしょうか? 
上記のだとエラーが発生し取得できないので、、、

できないのであれば 別の方法ありませんでしょうか?

たく
作成: 2023/02/12 (日) 22:06:31
通報 ...
2
たく 2023/03/05 (日) 07:32:13 5acda@0a7dd

パラメータ設定しているクエリだったのでエラー?がでたみたいでした。。

試行錯誤しテーブルから抽出条件、グループ化のパラメータ設定をしているのですが、
『パラメーターが少なすぎます2を指定してください。』と出てきます。
どこが間違っているか教えてほしいです。画像1

db.OpenRecordset("SELECT~~~のように記述したいのですが
このクエリのSQLをベースに考えた時どうVBAにしたらよいか教えてほしいです画像1

3
hatena 2023/03/05 (日) 13:40:32 修正 >> 2

コードは画像ではなく実際のものをコピーして貼り付けてください。その場合、マークダウンのコードブロックにしてください。詳細は下記を参照ください。

Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa

あと、貼り付けるコードは、変数の宣言部分、代入部分を含めて貼り付けてください。画像のコードでは FirstDayの宣言、代入のコードがありません。

作業No、作業分類 のフィールドのデータ型も提示してください。

4
たく 2023/03/06 (月) 01:58:45 修正 5acda@0a7dd

申し訳ありません 使い方、確認不足でした。

Dim FirstDay As Date

'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset, zissagyou As String
    zissagyou = "実作業"
    For i = 1 To 42
        Me("T" & i).Caption = ""
    Next
    Set rs = CurrentDb.OpenRecordset( _
        "SELECT 作業日時,時間,SUM(時間の合計) FROM T_設計_日報入力 WHERE " & _
        "日時>#" & FirstDay & "# AND 日時<=#" & FirstDay + 42 & "# AND 作業No = '" & Me.txb作業No & "' AND 作業分類 = " & zissagyou & " GROUP BY 日時,時間,作業分類", _
     dbOpenForwardOnly, dbReadOnly)

    Do Until rs.EOF
        With Me("T" & rs!日時 - FirstDay)
            .Caption = .Caption & rs!時間の合計 & "H" & vbCrLf
        End With
        rs.MoveNext
    Loop
    rs.Close: Set rs = Nothing
End Sub

になります
作業No、作業分類は短いテキストです

SELECT T_設計_日報入力.作業No, T_設計_日報入力.作業名No, Sum(T_設計_日報入力.時間) AS 時間の合計
FROM T_設計_日報入力
WHERE (((T_設計_日報入力.日時)>=[Forms]![F_設計_実績確認_伝票処理]![FROM] And (T_設計_日報入力.日時)<=[Forms]![F_設計_実績確認_伝票処理]![TO]))
GROUP BY T_設計_日報入力.作業No, T_設計_日報入力.作業名No
HAVING (((T_設計_日報入力.作業No)=[Forms]![F_設計_実績確認_伝票処理]![txb伝票No検索]));

このクエリのSQLをベースに考えた時どうVBAにしたらよいか教えてほしいです

5
りんご 2023/03/06 (月) 09:16:36 935bc@0e907

 もしも、外部サイトのカレンダー形式のスケジュール管理フォームを参考にしているのであれば、何を参考にどこまで取り入れていますか?中途半端に真似していないと、情報開示したほうが解決に近づくと思います。

6

作業No、作業分類は短いテキストです

ということなら、

    Set rs = CurrentDb.OpenRecordset( _
        "SELECT 作業日時,時間,SUM(時間の合計) FROM T_設計_日報入力 WHERE " & _
        "日時>#" & FirstDay & "# AND 日時<=#" & FirstDay + 42 & "# AND 作業No = '" & Me.txb作業No & "' AND 作業分類 = " & zissagyou & " GROUP BY 日時,時間,作業分類", _
     dbOpenForwardOnly, dbReadOnly)

の部分は、下記に修正してください。

    Set rs = CurrentDb.OpenRecordset( _
        "SELECT 作業日時,時間,SUM(時間の合計) FROM T_設計_日報入力 WHERE " & _
        "日時>#" & FirstDay & "# AND 日時<=#" & FirstDay + 42 & "# AND " & _
        "作業No = '" & Me.txb作業No & "' AND 作業分類 = '" & zissagyou & "' " & _ 
        "GROUP BY 日時,時間,作業分類", _
     dbOpenForwardOnly, dbReadOnly)

テキスト型のフィールドのSQL条件式は値を引用符(')で囲む必要があります。(あと、読みやすくするために改行も入れてます。)

コード中での引用符の使い方については下記で解説していますので、参照して内容をよく理解しておくことをお勧めします。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips