• 締切済み

全体の流れを教えてください。

foneraの回答

  • fonera
  • ベストアンサー率52% (38/72)
回答No.1

恐れ入ります。 前後の文脈が不明なのでいくつか推測しながらになりますが strSQL←SQL文が入っている cn ←DBの実態 intRecDataCt ←数を入れる変数 だとすると、 >Set rs = cn.dbSelect(strSQL) rsに、DBからSQL文でセレクトした内容を代入する。 >If Not rs.EOF Then もし、rsが終端でなければ(End of fileでなければ) >intRecDataCt = rs.RecordCount rsの結果が何件かを、intRecDataCtに代入する >End If Ifが正しいときは、End Ifまで実行。間違っていれば、実行しない。 となります。 ざっくりと言って、データベースからナニカの条件でデータを引っ張ってきて、それが何件あるかをintRecDataCtに入れる(1件も無ければ何もしない)という命令群ですね。

noname#71395
質問者

お礼

とてもわかりやすい解説でした。 ありがとうございます。 ASPを始めたばかりでわからないことだらけですが、 頑張ってモノにしたいです。

関連するQ&A

  • [VBA] ADOの Clone と AddNew

    Access VBA 学習中の初心者です。ADOについて教えて下さい。 RecordsetオブジェクトのCloneメソッドを使用してレコードのコピーを行う以下のプロシージャで、 If Not rs.EOF Then の存在意義がわかりません。 1. rsClone に対象のレコードがあった場合は次行からの処理をする、ということであれば If Not rsClone.EOF Then にすれば良いかと思うのですが、それでは違いますでしょうか? 2. とある人に聞いたところ、 「rsのカレントがEOFだとAddNewでエラーになるから、そのエラー回避のためそうなっている」 と言われたのですが、 テキストやヘルプで AddNewメソッド についてそのような注意事項を見つけられませんでした。 自分なりに試してみてもその条件下でエラーになりませんでした。(試し方に自信ないですが。) AddNewメソッドを使う際にEOFであるかどうか気にした方が良いものなのでしょうか? 質問が分かりづらく、ご回答頂くにあたり追加の情報が必要でしたらご指摘下さい。 「プロシージャをこうした方がわかりやすい、適切」などのご意見も歓迎です。 どうぞよろしくお願いいたします。 -------------------------- Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim rsClone As ADODB.Recordset Dim myField As Variant, cnt As Integer Set cn = CurrentProject.Connection rs.Open "名簿", cn, adOpenStatic, adLockOptimistic Set rsClone = rs.Clone(adLockReadOnly) rs.Clone.Bookmark = rs.Bookmark rsClone.Find "名簿 like '山田 太郎'" If Not rs.EOF Then                 ←★★★質問★★★ rs.AddNew cnt = 0 For Each myField In rsClone.Fields rs.Fields(cnt) = myField cnt = cnt + 1 Next End If rs.Update rs.Clone.Close Set rsClone = Nothing rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub

  • フォームの従業員番号と日付から該当レコードを

    フォームの従業員番号と日付から該当レコードを検索したいのですができません。 おそらくFilterの文法が間違えているのではと思いましたが、色々試した結果 自力ではダメでした。何卒よろしくお願いします Private Sub テスト() Dim CN As ADODB.Connection: Set CN = CurrentProject.Connection Dim RS As ADODB.Recordset: Set RS = New ADODB.Recordset RS.Open "勤怠表", CN, adOpenKeyset, adLockOptimistic RS.Filter = "従業員番号 = " & Me.TB_StaffID & " and 日付 = #" & Format(Me.TB_Date, "yyyy/mm/dd") & "#" If RS.RecordCount = 0 Then Debug.Print "ありません" Else Do Until RS.EOF Debug.Print RS!勤怠番号 RS.MoveNext Loop End If RS.Close: Set RS = Nothing CN.Close: Set CN = Nothing End Sub

  • VBAのデバックをどなたかお手伝いください。

    もちろん自分でも調べてはいるのですが、急いでいるため、もしどなたか教えてくだされば大変助かります。 この(下記の)Then 以降からがわかりません。 Do Until rs.EOF '該当レコードあり If rs!MCD = "3162" Then '--------------------------------------------- strcriteria = "CAT = '" & rs!CAT & "'" ' --- A rs2.Find strcriteria, 0, adSearchForward If rs2.EOF Then ' Else rs!仕入単価世代1 = rs!仕入単価 rs!仕入単価 = rs2!discount End If '--------------------------------------------- rs!更新日 = Now() rs.Update End If 情報が不足していればお答えします。どうぞ宜しくお願いいたします。 (補足)これより前に入力されているのは以下のものです。 Dim cn As ADODB.Connection Dim cn2 As ADODB.Connection Dim rs As ADODB.Recordset Dim rs2 As ADODB.Recordset Dim strmsg As String Dim lngRet As Long Dim strcriteria As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset Set cn2 = CurrentProject.Connection Set rs2 = New ADODB.Recordset rs.Open "商品2_T", cn, adOpenKeyset, adLockOptimistic rs2.Open "商品2_T25discountてすと", cn2, adOpenKeyset, adLockOptimistic

  • ADOを使用してExcelファイルをオープンした場合にリソースが解放されない

    こんにちは。 いつもお世話になっております。 Excelがインストールされていない環境でExcelファイルの中身を参照するために ADOを使用した処理を実装しています。 以下のようなコードで動作しましたが、一度処理を実行後に続けて処理を実行した場合に ファイルアクセスのエラー(ConnectionのOpen時)が発生してしまいます。 (実行時エラー'2147418113 (8000ffff)'「致命的なエラーです。」) EXEを終了し、再度処理を実行するとうまく動作します。 おそらくExcelファイルのインスタンスが解放できていないという類のエラーであると思いますが、原因が分かりません。 (EXE起動後の2回目の処理で必ず発生するわけではなく、3回目の場合があるのも謎です。) 何か分かりましたらご教示下さい。 --------------------------------------------------------------------------------- inputFileName = App.Path + "\test.xls" outPutFileName = App.Path + "\test.csv" On Error GoTo errorHdr Set cn = New ADODB.Connection With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" + inputFileName + ";" + "Extended Properties=Excel 5.0;" .Open End With strSQL = "SELECT * FROM [sheet1$]" Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open strSQL, cn, adOpenDynamic, adLockReadOnly, adCmdText On Error GoTo 0 x = FreeFile Open outPutFileName For Output As #x Do Until rs.EOF buff = "" For col = 1 To rs.Fields.Count If col < rs.Fields.Count Then buff = buff & rs.Fields(col - 1).Value & "," Else buff = buff & rs.Fields(col - 1).Value End If Next If Len(buff) = rs.Fields.Count - 1 Then Exit Do End If Print #x, buff rs.MoveNext Loop Close #x rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "完了しました。", vbInformation Exit Sub errorHdr: On Error GoTo 0 MsgBox "ファイルのオープンに失敗しました。", vbCritical If rs Is Nothing = False Then If rs.State = adStateOpen Then rs.Close End If Set rs = Nothing End If If cn.State = adStateOpen Then cn.Close End If Set cn = Nothing End Sub --------------------------------------------------------------------------------- <環境> Windows 2000(SP4), VB6.0(S6) ※ExcelファイルはExcel 95で作成(2500行×15列程度)

  • ACCESS クエリーから件数取得

    下記のような記述でクエリーより件数を取得したいのですがうまくいきません。 rstBufの指定が悪いのだとは思い、調べてはいるのですがうまくいかない状態です。 どなたかご助言をお願い致します。 Dim rstBuf As DAO.Recordset Dim qryBuf As DAO.QueryDef strSQL=select xx from xx Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL) Set rstBuf = qryBuf.OpenRecordset(strSQL,dbOpenDynaset) If rstBuf.EOF = False Then rstBuf.MoveLast count = rstBuf.RecordCount End If rstBuf.Close Set rstBuf = Nothing

  • フォーム上のテキストボックスにテーブル値を改行代入

    Access2013を使用しています。 フォーム上のテキストボックスにテーブルAの項目Bを複数レコード分を改行しながら 代入したいのです。 Set CN = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブルA", CN, adOpenStatic, adLockOptimistic Do Until rs.EOF   If rs!項目B <> "" Then    Me!テキストボックス = rs!項目B & vbLf   End If   rs.MoveNext Loop 上記ですと、当たり前ですが最終レコードの項目Bのみがセットされます。 検索ワードがよくないのか、同様の問合せを見つけることができません。 よろしくお願いします。

  • access 初心者です。

    Private Sub 患者番号_AfterUpdate() Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Set Cn = CurrentProject.Connection Set Rs = New ADODB.Recordset Rs.Open "[tbl個人情報]", Cn, adOpenKeyset, adLockOptimistic Rs.Find "[患者番号] = " & Me![患者番号] If Rs.EOF Then MsgBox "レコードが見つかりません。ID=" & Me![患者番号] Else Me![性] = Rs![性] End If Rs.Close: Set Rs = Nothing Cn.Close: Set Cn = Nothing End Sub 上記の式を見よう見まねで作成したのですが、エラーが出てしまします。          Me![性] = Rs![性]  が見つかりません どのように解釈すれば良いのでしょうか? ちなみに、サブフォームに入れているテキストボックスの「[性]を 同じサブフォーム内の[患者番号]から検索がしたいです。 初歩的なことで申し訳ございません。よろしくお願いします。

  • 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

  • 実行時エラー3021「BOFとEOFのいずれかTR

    Sub test() Set cn = CurrentProject.Connection rs.Open "T分類", cn, adOpenStatic, adLockPessimistic rs.Filter = "中分類 = '不明' And (大分類 <> '不明')" For i = 1 To rs.RecordCount str大分類 = rs("大分類") rs("中分類") = str大分類 & "(不明)" rs.Update rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub アクセスADOで上記のようなコードなのですが よく意味の分からないエラーが発生します。 コードの内容は 大分類が不明ではなく中分類が不明なら 中分類のレコードに大分類の値+不明にする です。 例えば該当のレコードが8レコードあれば i=5の時に、 実行時エラー3021「BOFとEOFのいずれかTRUE になっているか、 または現在のレコードが削除されています。 要求された操作には、 現在のレコードが必要です。」 が発生します。 規則としては rs.RecordCountの半分の値までは大丈夫ですが rs.RecordCountの半分+1の時に 上記のエラーが発生します。 ADOでデータの追加をする時にAddNewメソッドを入れ忘れた場合も 上記と同じエラーが発生しますが 今回のコードはフィルターをかけ 更新したいレコードを掴んでいるので AddNewメソッドは不要だと思っています。

  • ADOでループすると1レコードずつ飛ばしてしまう

    アクセスなのですが Sub test() Set cn = CurrentProject.Connection rs.Open "テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "(店名 = '" & str店名 & "') And (URL = '未')" For j = 1 To rs.RecordCount rs("URL") = "http" rs.Update rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub このようにして、既存のレコードにフィルタをかけて該当のレコードの値を更新しているのですが rs.MoveNext をいれると、 1レコード目、3レコード目、5レコード目・・・と言う順番になってしまい、 最終的にrs.RecordCountの数を越したレコードを指定してしまい 実行時エラー 3021 「BOFとEOFのいずれかTRUEになっていか、または現のレコードが要求された操作には、現在のレコードが必要です。」 となってしまいます。 だからって rs.MoveNextをいれないと、rs.RecordCountに達するまで、 いつまでも同じレコードをループしてしまいます。 1レコードずつ順番にデータを掴む方法を教えてください。