Microsoft Access 掲示板

ADOで該当フィールドの全レコードを削除する方法 / 4

11 コメント
views
4 フォロー
4

回答の前に

前の質問のやりとりでも感じたのですが、質問のキャッチボールがうまくできていない印象です。
質問内容があいまいなので、こちらが不足部分を推測しないと回答できないことが多いです。また、推測が入ると実際とは相違があり的確に回答にならない場合があります(つまり無駄骨になる確率が高い)
相手に正確に状況、ご希望のことが正確に伝わるようになるべく詳細に説明するように心がけてください。
回答者が質問する場合、回答に必要な情報ですので、それにも正確かつ詳細に回答してください。

回答の前の確認

1
最初に、番号フィールドの全レコードを削除、もしくはNullに変更したいのですが、方法が分かりません

レコードの削除と、フィールドの更新はまったく別の処理です。
やりたいことは、レコードの削除ですか。
(レコードを削除すると、他のフィールドのデータも失われますが大丈夫ですか)
それともフィールドの更新ですか。

レコードの削除なら、どのようなレコードを削除するのか、
フィールドの更新なら、どのフィールドを何に変換するのか、
詳細に説明してください。

あと、ADOにこだわっているようですが、ADOでもDAOでも基本的にできることに大差はありません。

2
1度番号を付けてから、再度janと番号で検索して、対象データを取得しているのですが、
該当する番号がヒットした時に、対象データだけを取得してLoopを抜けて、終了する方法は無いのでしょうか?

これもやりたいことを詳細に正確に説明してください。

コードをざっとみて、推測した感じでは、やろうとしていることは下記のようなことだ思いましたが、あってますか。

指定したjanに該当するデータの新しい順にならべて2番目のデータを取得して、それをエクセルシートに貼り付けたい。

通報 ...
  • 5

    もし、やりたいことが

    指定したjanに該当するデータの新しい順にならべて2番目のデータを取得して、それをエクセルシートに貼り付けたい。

    ということなら、下記のコードでいいでしょう。

    Public Sub Sample()
        Dim daoCn As dao.Database 'Databaseオブジェクトを扱う変数(DB)を宣言
        Dim daoRs As dao.Recordset 'Recordsetオブジェクトを扱う変数(RS)を宣言
        Dim strSQL As String
        Dim i2 As Long
    
        strFileName = "出勤 - コピー.accdb"
        Set daoCn = DBEngine.Workspaces(0).OpenDatabase("C:\Users\tasuk\Desktop\VBA\経理\出勤\" & strFileName)
    
        jan = "1000000000016"
        i2 = 2
    
        Cd = "個人データ.氏名,出勤データ.月日,出勤データ.番号"
        Tn = "個人データ INNER JOIN 出勤データ ON 個人データ.jan=出勤データ.jan"
        Sc = " 出勤データ.jan = '" & jan & "'" '検索条件の確定
    
        strSQL = "SELECT TOP " & i2 & Cd & " FROM " & Tn & " WHERE " & Sc & " ORDER BY 出勤データ.月日 DESC" '降順でi2番目までのデータを取得
        strSQL = "SELECT TOP 1 * FROM (" & strSQL & ") ORDER BY 出勤データ.月日" '上記のデータから昇順で1番目のデータを取得(結局降順でi2番目のデータ)
        Set daoRs = daoCn.OpenRecordset(strSQL, dbOpenDynaset) 'DAOレコードセットオブジェクトを作成
        
        Worksheets(4).Range("A1").CopyFromRecordset daoRs
        daoRs.Close
    
    End Sub