• 締切済み

如何したら良いのか分かりません。

Access2000/Windows2000を使用してます。 車検到来年を自動計算させようとしてます。 現在よりも小さい場合は、車検到来区分によって現在の日付以上になるように計算させるようにしたいのですが・・・ 以下の組み方ではうまく出来ません。如何したら良いのかアドバイス宜しくお願い致します。 Private Sub コマンド233_Click() Dim MyDB As DAO.Database Dim MyRS As DAO.Recordset Dim strDate As String Dim strSyakenDate As String '現在の年月日を退避しておく strDate = Format(Date, "yyyymmdd") Set MyDB = CurrentDb() Set MyRS = MyDB.OpenRecordset("基保有") Do Until strSyakenDate > strDate Select Case MyRS.Fields("車検到来区分") Case 1 MyRS.Fields("車検到来年") = MyRS.Fields("車検到来年") + 2 Case 2 MyRS.Fields("車検到来年") = MyRS.Fields("車検到来年") + 1 Case 3 MyRS.Fields("車検到来年") = MyRS.Fields("車検到来年") + 2 Case 4 MyRS.Fields("車検到来年") = MyRS.Fields("車検到来年") + 1 End Select '車検日を再算出 strSyakenDate = Format(MyRS.Fields("車検到来年"), "0000") & Format(MyRS.Fields("車月"), "00") & Format(MyRS.Fields("検日"), "00") Loop MyRS.Update MyRS.MoveNext MyRS.Close End Sub

みんなの回答

  • bobble
  • ベストアンサー率34% (111/323)
回答No.1

こんにちわ。 私も詳しい人間じゃないので通りすがりのチョッカイ位に聞いて下さい。 まず”基保有”というのは複数件あるデータでしょうか? レコードセットの一件目を処理した後に、2件目にMOVENEXTしてそのままCLOSEしてますね。 もし”基保有”が複数行あるのであれば、私ならこうします。 DO UNTIL MYRS.EOF  DO UNTIL strSyakenDate > strDate SELECT MYRS・・・・・ END SELECT STRSYAKENDATE = ・・・・ LOOP MYRS.UPDATE MYRS.MOVENEXT LOOP MYRS.CLOSE とこんな感じです。ようは外のLOOPでレコードをまわし、中のLOOPで到来年を検索 するって感じですかね。 参考になればいいのですが・・・

関連するQ&A

  • DAOでテーブルの内容を検索したいのですが…

    DAOでテーブルの内容を検索したいのですが… アクセス初心者です。 フォームで取得した値をテーブルで検索して命令するために,次のようなことをしてみましたが,FindFirstのところでエラーがでます。 どうしたらよいのかご指導ください。 コマンドボタンのイベントプロシージャで Private Sub テストテーブル作成_Click() Dim gakki As Integer Dim test As Integer Me.学期 = gakki Me.テスト = test Call testテーブル作成 End Sub として,標準モジュールに Sub testテーブル作成() Dim myDB As DAO.Database Dim myRS As DAO.Recordset Set myDB = CurrentDb Set myRS = myDB.OpenRecordset("T_生徒テスト") myRS.FindFirst "学期ID=" & "" & "gakki" & "" & "AND テストID =" & "" & "test" & "" If myRS.NoMatch = False Then DoCmd.OpenQuery "Q_TSテストA" DoCmd.OpenForm "F_テスト" DoCmd.Close Else DoCmd.OpenQuery "Q_TSテスト" DoCmd.OpenQuery "Q_テスト" DoCmd.Close DoCmd.OpenForm "F_テスト" End If myRS.Close: Set myRS = Nothing myDB.Close: Set myDB = Nothing End Sub としました。よろしくお願いします。

  • Access Excelへ出力時にエラー

    お世話になります。 下記にてローカルクエリの抽出結果をExcelへ出力しております。  Dim obj As Object  Dim MyDB As DAO.Database  Dim MyRs As DAO.Recordset  Dim qdf As DAO.QueryDef  Dim out_path as String  Dim sheet_name as String  out_path = "出力先ファイルのフルパス(ファイル名含む)"  sheet_name = "出力先シート名" Set MyDB = CurrentDb Set obj = GetObject(out_path, "Excel.Sheet") obj.Application.Visible = False obj.Parent.Windows(1).Visible = True Set qdf = MyDB.QueryDefs("ローカルクエリ名") With qdf .Parameters("[forms]![test]![id]") = Forms!test!id Set MyRs = .OpenRecordset .Close End With obj.Worksheets(sheet_name).Select   ← (注) obj.Application.Cells(24, 1).CopyFromRecordset MyRs ※ローカルクエリの抽出条件としてフォーム上のテキストボックスを  参照しているため、Parametersを使ってます。 とりえあず上記で抽出結果は出力されます。 但し、適当なExcelファイルを開いた状態で実行すると、(注)の箇所で 「実行時エラー1004 WorksheetクラスのSelectメソッドが失敗 しました」となってしまいます。 なお、Selectの箇所をActiveにすると「実行時エラー438 オブジェクトは このプロパティまたはメソッドをサポートしていません。」と表示されます。 また、obj.Application.Visible = False の箇所で開いていた Excelファイルが閉じてしまうのですが、そういうものなのでしょうか。 勉強不足で大変恐縮ですが、ご教授の程、宜しくお願い足します。

  • 配列の宣言の仕方

    vs2005を使用しています。 配列の宣言の方法はいくつかあるようですが 違いが分かりません。 Dim strDate() As String = New String(1) {} Dim strDate() As String = New String(1) {"",""} Dim strDate As String() = {"", ""} Dim strDate (1) As String Dim strDate As New ArrayList も候補のひとつですが、この違いは分かります。 やりたいことは、要素数2の配列を""で初期化したいというものです。 そしてその配列を返す関数を作成しています。 どれも同じように思うのですが、違いがあれば教えていただきたいと思います。 よろしくお願いします。 でもかまわないのですが、

  • Access 抽出結果をExcelへ出力

    お世話になります。 VBAより抽出結果をExcelへ出力したいと思います。 とりあえず、抽出結果をExcelの特定の箇所へ出力することは 出来たのですが、今回は見出し(フィールド名)もあわせて出力 したいところです。 見出しの部分を出力するにはどうすればよいのでしょうか。 恐らく見出し部分と抽出結果部分はそれぞれ別々に出力 しなければならないとは思うのですが。。 なお、見出し部分は固定の文字列ではないため、毎回フィールド名を 取得し、それを見出しとして出力する必要があります。 抽出結果(集計クエリ)は、 項目 yyyy年mm月 ・・・・ yyyy年mm月 数量A      500   ・・・・    1200        数量B      200   ・・・・     800 というような感じで、現在は 数量A      500   ・・・・    1200        数量B      200   ・・・・     800 の部分だけ出力できている状況です。 Dim obj As Object Dim MyDB As DAO.Database Dim MyRs As DAO.Recordset MySQL = SQL文(集計クエリ) Set MyRs = MyDB.OpenRecordset(MySQL) obj.Worksheets(シート名).Select obj.Application.Cells(23, 1).CopyFormRecordset MyRs 上記でExcelへ出力してます。 ご教授の程、宜しくお願い致します。

  • ACCESS2007でのDAO(?)につきまして

    お世話になっております。 ACCESSの件で色々教えて頂き、とても感謝しております。 つきましては、ACCESS2007で疑問に思える点がありましたので 以下に記述いたします。 あるACCESS2007のVBAの記述で Dim myDB As Database Dim myQueryDef As QueryDef なる変数定義がされているのを見たのですが 質問があります <質問1> 上記の定義はDAOを使用しているという事になるのでしょうか? <質問2> DAOであるならば Dim myDB As DAO.Database Dim myQueryDef As DAO.QueryDef と記述するのが正しいのではないでしょうか? (Option Explicitは記述してあります) 私には謝った記述に見えるのですが、動作 している理由がわかりません。 質問が変かもしれませんが、どなたか教えて 頂けるありがたいです。

  • EXCEL→Access ADO接続

    お世話になります 現在ADOにてEXCEL側からAccessDBにアクセスし 値を取得しているのですが 現在下方向に貼り付けしているのですが 横方向に貼り付けさせる方法はありますか? 下記参考(現状VBAです) 現状:日付で絞込みをしています 日付け絞込みをしてヒットしたものに対して下方向に貼り付けています それを横方向に貼り付けさせたいのです Private Sub CommandButton1_Click() Dim myConn As ADODB.Connection Dim myRs As ADODB.Recordset Dim mySQL As String Dim myConstr As String Dim myDBFName As String Dim myPswd As String Dim tableName As String Dim orderDate As String Dim shipDate As String orderDate = Format(DateValue(DTPicker1.Value), "mm/dd/yyyy") shipDate = Format(DateValue(DTPicker2.Value), "mm/dd/yyyy") myDBFName = "Accessパス" myPswd = "" myConstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & myDBFName & ";Jet OLEDB:Database Password=" & myPswd & ";" mySQL =SQL文 Set myConn = New ADODB.Connection myConn.Open myConstr Set myRs = New ADODB.Recordset myRs.Open mySQL, myConn Worksheets("シート名").Range("開始セル名").CopyFromRecordset myRs myRs.Close Set myRs = Nothing myConn.Close Set myConn = Nothing Unload Me End Sub わかる方ご教授願います

  • テーブルの左端に通し番号を付ける

    教えてください! 下記のモジュールで走らせると、 「ユーザ定義型は定義されていません」 と表示が出て止まってしまいます。 要は、左端の「No.」という列に 通し番号を入れたいのですが・・・。 Option Compare Database Sub setNumber(tblname As String, fldname As String) Dim db As DAO.Database Dim rs As DAO.Recordset Dim ssql As String Dim dblCnt As Double Dim strCnt As String dblCnt = 0 Set db = CurrentDb() ssql = "SELECT * FROM " & tblname Set rs = db.OpenRecordset(ssql) rs.MoveFirst Do While Not rs.EOF dblCnt = dblCnt + 1 strCnt = Format$(dblCnt, "00000000") rs.Edit rs.Fields(fldname).Value = strCnt Debug.Print strCnt rs.Update DoEvents rs.MoveNext Loop End Sub Sub Execute() Call setNumber("◎テーブル1", "No.") End Sub

  • DAOでフィールドの値を変更する

    MDBファイルにDAOでアクセスし、フィールド(今回の場合Fields(4))の値をTextBox内の値に変更する方法がわかりません。 Dim WS As DAO.Workspace Dim DB As DAO.Database Dim RS As DAO.Recordset 'レコードを特定する処理 RS.Fields(4).Value = TextBox.Text RS.Update どのように直せばいいのでしょうか??

  • VB5+SQL2000での ** TRANSACTIONについて(ADO)

    環境:VB5(SP3)+SQL2000(SP1) VBで、BEGIN TRANSACTIONを定義し、その後更新用DBを更新する前に、ストアドプロシージャを利用せずDBを検索した場合、問題無く更新用DBへの更新に対して(ROLLBACK/COMMIT) TRANSACTION が効くのですが、ストアドプロシージャで検索した場合、(ROLLBACK) TRANSACTION が効きません。 分かりづらいですがサンプルを記します。 Function Test() Dim MyRs As New ADODB.Recordset Dim MyRs2 As New ADODB.Recordset : MyDB.Execute "BEGIN TRANSACTION TEST999",,adCmdText+adExecuteNoRecords : '(A)不具合未発生パターン 'レコードセットを開く 'このように、レコードセットを作成した場合問題なし。 MyRs.Open "SELECT * FROM TESTDB..テスト",MyDB,adOpenStatic '(B)不具合発生パターン 'ただし、上のSELECT文をストアドプロシージャで開いた場合、ROLLBACKが効かない 'レコードセットを開く(正常に(ROLLBACK)TRANSACTIONが動作せず、UpDate時にCommitしている) 'MyRs.Open "TESTDB..TEST001",MyDB,adOpenStatic : MyRs2.Open "SELECT * FROM TESTDB..更新テスト",MyDB,adOpenKeyset,adLockPessimistic If Err <> 0 Then 'Error処理 End If If MyRs2.EOF Then MyRs2.AddNew MyRs2![FLD1] = MyRs2![FLD1A] Else MyRs2![FLD1] = "TEST" End If MyRs2.UpDate 'ここは正常終了。(Err = 0) 'テスト用にエラー設定 Err = 1 if Err <> 0 then '(B)不具合発生パターンの場合、ROLLBACK をしても、DBに登録されてしまう。 MyDB.Execute "ROLLBACK TRANSACTION TEST999",,adCmdText+adExecuteNoRecords Exit Function End If MyRs.Close MyRs2.Close SmileDB.Execute "COMMIT TRANSACTION TEST999",,adCmdText+adExecuteNoRecords End Function

  • エクセルからアクセスへ

    お世話になります。 エクセルからVBAでアクセスのテーブルに レコードを追加させたいのですが、 下記の記述でいきなり mydb as database の所が 青く塗られ 「コンパイルエラー:ユーザー定義型は定義されていません」 とエラーになってしまします。 また、databaseのdが小文字なのも気になります。 参照設定での項目チェックが必要なんだと思うのですが どこにチェックしたら良いのか、またそれだけではダメなのか 分かりません。 どなたかご教授下さい。     記 Dim mydb As database Dim myrs As Recordset Dim myrnge As Range Dim myrow As Long