Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


913 / 2272 ツリー ←次へ | 前へ→

【9556】フォームでの抽出データをテーブルに出力 メイ子 07/6/10(日) 18:22 質問[未読]
【9559】Re:フォームでの抽出データをテーブルに出力 小僧 07/6/10(日) 22:44 回答[未読]
【9561】Re:フォームでの抽出データをテーブルに出力 メイ子 07/6/11(月) 15:52 質問[未読]
【9562】Re:フォームでの抽出データをテーブルに出力 小僧 07/6/12(火) 0:07 発言[未読]
【9563】Re:フォームでの抽出データをテーブルに出力 メイ子 07/6/12(火) 13:30 お礼[未読]

【9556】フォームでの抽出データをテーブルに出力
質問  メイ子  - 07/6/10(日) 18:22 -

引用なし
パスワード
   こんにちは、メイ子と申します。
あちこち探して、下記のようなコードを作りましたが、
「1つ以上の必要なパラメータの値が設定されていません」とエラーが出ます。
どなたがご教示お願いいたします。
ちなみに名簿一覧はフォームのテキストボックスから抽出条件を設定しているクエリーです。

  Dim CN As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim rs2 As ADODB.Recordset
  Dim SQL As String
 
  Set CN = CurrentProject.Connection
  
  Set rs = New ADODB.Recordset
  SQL = "SELECT * FROM 名簿一覧 WHERE クラス ='" & Me.クラス選択 & "'and 曜日='" & Me.曜日選択 & "'"
  rs.Open SQL, CN, adOpenKeyset, adLockOptimistic
    
  Do Until rs.EOF

    If rs!出欠 = -1 Then
      rs2!生徒番号 = rs!生徒番号
      rs2!氏名 = rs!氏名
      rs2!クラス = rs!クラス
      rs2!曜日 = rs!曜日
      rs2!出席日 = Date
      rs2!出欠 = -1

    Else
      rs2!生徒番号 = rs!生徒番号
      rs2!氏名 = rs!氏名
      rs2!クラス = rs!クラス
      rs2!曜日 = rs!曜日
      rs2!出席日 = Null
      rs2!出欠 = 1
    End If

    rs.MoveNext
  Loop

【9559】Re:フォームでの抽出データをテーブルに出...
回答  小僧  - 07/6/10(日) 22:44 -

引用なし
パスワード
   ▼メイ子 さん:
こんばんは。


> ちなみに名簿一覧はフォームのテキストボックスから
> 抽出条件を設定しているクエリーです。

このクエリをそのまま使うとなると
ADODB.Command オブジェクトを使い
パラメータを指定してからレコードセットを開く事になると思います。


Dim CN As ADODB.Connection
Dim CMD As New ADODB.Command
Dim RS As New ADODB.Recordset
 
  Set CN = CurrentProject.Connection

  With CMD
    .ActiveConnection = CN
    .CommandText = "SELECT * FROM 名簿一覧 " _
           & "WHERE クラス ='" & Me.クラス選択 & "' " _
            & "AND 曜日='" & Me.曜日選択 & "'"
    .CommandType = adCmdText
    .Parameters(0) = Forms![フォーム名]![コントロール名]
  End With
    
  Set RS = CMD.Execute

  Do Until RS.EOF




クエリ:名簿一覧にいくつパラメータがあるのかが解りませんが、
上記の様にパラメータをセットしてから開けば
お望みのような操作ができるかと思われます。

【9561】Re:フォームでの抽出データをテーブルに出...
質問  メイ子  - 07/6/11(月) 15:52 -

引用なし
パスワード
   ▼小僧 さん
丁寧にお教え頂いて、ありがとうございます。
教えていただいたとおりに記述しましたら、ファイルのオープンはできたのですが、「Do Until RS.EOF」以降のデータの書込みのところがなにもせずに終了してしまいます。
ウォッチウィンドウで確認しましたら、Statusのところに
<BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。>
と表示されているのですが、どうしてでしょう?
フォームの画面では、確かに2つのパラメータで2件のデータが表示されています。
よろしくご教示お願いいたします。

Dim CN As ADODB.Connection
Dim CMD As New ADODB.Command
Dim RS As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset

  Set CN = CurrentProject.Connection

  Set rs2 = New ADODB.Recordset
  rs2.Open "出欠", CN, adOpenStatic, adLockOptimistic

  With CMD
    .ActiveConnection = CN
    .CommandText = "SELECT * FROM 名簿一覧 " _
           & "WHERE クラス ='" & Me.クラス選択 & "' " _
            & "AND 曜日='" & Me.曜日選択 & "'"
    .CommandType = adCmdText
    .Parameters(0) = Forms![出欠一覧]![クラス選択]
    .Parameters(1) = Forms![出欠一覧]![曜日選択]
    
  End With
  
  Set RS = CMD.Execute

  Do Until RS.EOF

    If RS!出欠 = -1 Then
      rs2!生徒番号 = RS!生徒番号
      rs2!氏名 = rs!氏名
      rs2!クラス = rs!クラス
      rs2!曜日 = rs!曜日
      rs2!出席日 = Date
      rs2!出欠 = -1

    Else
      rs2!生徒番号 = RS!生徒番号
      rs2!氏名 = rs!氏名
      rs2!クラス = rs!クラス
      rs2!曜日 = rs!曜日
      rs2!出席日 = Null
      rs2!出欠 = 1
    End If

    RS.MoveNext
  Loop

【9562】Re:フォームでの抽出データをテーブルに出...
発言  小僧  - 07/6/12(火) 0:07 -

引用なし
パスワード
   ▼メイ子 さん:
こんばんは。


> <BOF と EOF のいずれかが True になっているか、
> または現在のレコードが削除されています。
> 要求された操作には、現在のレコードが必要です。>
> と表示されているのですが、どうしてでしょう?


そのメッセージの通り、レコードが0件な為だと思われます。

メイ子さんのご提示された情報を基に
当方も適当なテーブル・クエリを作り試してみましたが、
ちゃんと期待通りのレコード数をループする事ができました。

ご提示されていない情報の中に何かヒントが隠されているかもしれませんね。

【9563】Re:フォームでの抽出データをテーブルに出...
お礼  メイ子  - 07/6/12(火) 13:30 -

引用なし
パスワード
   ▼小僧 さん

ご丁寧なご回答ありがとうございました。
何かほかのところに問題がありそうですね。
今一度調べてみます。
また、わからないことがありましたら、どうぞよろしくお願いいたします。


>そのメッセージの通り、レコードが0件な為だと思われます。
>
>メイ子さんのご提示された情報を基に
>当方も適当なテーブル・クエリを作り試してみましたが、
>ちゃんと期待通りのレコード数をループする事ができました。
>
>ご提示されていない情報の中に何かヒントが隠されているかもしれませんね。

913 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free