- ベストアンサー
Accessのレコード内容をテキスト出力する方法
- Accessのテーブルに保存されたレコード内容をテキストファイルに出力する方法について説明します。
- テーブル「重複データ」には、メールアドレスと複数のクラブ名が保存されています。メールアドレスごとに、重複しているクラブ名をテキストファイルに出力するプログラムが必要です。
- プログラムを実行すると、指定されたフォルダにメールアドレスごとのテキストファイルが作成されます。ファイルには、重複したクラブ名とまとめて申請するようにするメッセージが記載されます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
既に解決されていましたら、スルーしてください。 以下でどうでしょうか。おかしかったらドンドン修正していってください。 Dim db As Database Dim rs As Recordset Dim rs2 As Recordset Dim strSQL As String Dim intFlNo As Integer Dim strText As String Dim strFlNm As String Dim strOutFl As String Dim intFlCnt As Integer Dim strTmp As String Set db = CurrentDb() strFlNm = "c:\test\" strSQL = "SELECT メールアドレス FROM 重複データ GROUP BY メールアドレス HAVING Count(*)>1;" Set rs = db.OpenRecordset(strSQL) Do Until rs.EOF intFlCnt = intFlCnt + &H1 strOutFl = strFlNm & rs!メールアドレス & ".txt" intFlNo = FreeFile Open strOutFl For Output As #intFlNo Print #intFlNo, rs!メールアドレス Print #intFlNo, "" Print #intFlNo, "クラブ入会希望の申請が重複しています。" Print #intFlNo, "◆クラブ名◆" strTmp = "" strSQL = "SELECT * FROM 重複データ WHERE メールアドレス = '" & rs!メールアドレス & "';" Set rs2 = db.OpenRecordset(strSQL) Do Until rs2.EOF strTmp = strTmp & " " & Nz(rs2!クラブ1) & Nz(rs2!クラブ2) & Nz(rs2!クラブ3) rs2.MoveNext Loop rs2.Close Print #intFlNo, Mid(strTmp, 2) Print #intFlNo, "" Print #intFlNo, "複数のクラブに希望される場合は、まとめて申請してください。" Close #intFlNo rs.MoveNext Loop rs.Close db.Close ※ テーブル「重複データ」は重複したものを抽出して作られたものと思いますが、 上記では、重複していないデータがあっても重複したものだけを処理します。 ※ クラブ1、クラブ2、クラブ3 には、どれか1つにのみデータがあるという前提です。 ※ クラブ1、クラブ2、クラブ3 の順に得たい場合には、rs2 を作る時に Order By を指定してください。 (ORDER BY クラブ1 DESC, クラブ2 DESC, クラブ3 DESC とか) ※ この処理だけであれば、intFlCnt は不要なのでは? (strText の宣言も?)
お礼
ご丁寧にありがとうございます! テーブル「重複データ」をクエリで集計し、 それをテキスト出力することで解決しました。 アドバイスいただいた方法も勉強になりますので、 試してみます。 確かに、intFlCntとstrText の宣言は不要でした。 どうもありがとうございました!