3

自分が所有しておらず、変更できないデータベースへの ODBC 接続があります。私が探しているのは、関連するレコードを 1 つのレコードにマージすることです。関係は 1 対多です。

私は学生管理システムを持っており、自動コールアウト サービス (コールによって課金されます) にフィードするコールアウト リストをエクスポートしたいと考えています。複数の学生が住んでいる家に一度だけ電話できるようにしたい。

目的のコールアウト ファイル構造:

PHONE     Inst1                  Inst2                  Inst3
555-5555  John was absent today  Jane was absent today  Joe was absent today

既存のデータに当てはめて:

PHONE     Inst
555-5555  John was absent today  
555-5555  Jane was absent today  
555-5555  Joe was absent today

助言がありますか?

4

1 に答える 1

1

私の最初の傾向は、クロス集計クエリを使用することでした。ただし、それは少し毛むくじゃらになる可能性があります。

モジュール内のいくつかの VBA コードを切り取って連結し、別のテーブルに挿入するのはどうですか (次のようなもの - 完全にテストされておらず、おそらくどこかで壊れている可能性があります)。

dim strAbsent as string
dim currPhone as string
dim lastPhone as string
Dim db As Database
Dim rstAbsent As Recordset
Dim rstAbsentReport As Recordset

Set db = CurrentDb
Set rstAbsent = dbV.OpenRecordset("select * from Absent", _
                                    dbOpenDynaset, dbSeeChanges)
Set rstAbsentReport = dbV.OpenRecordset("select * from AbsentReport", _
                                        dbOpenDynaset, dbSeeChanges)

'...
do while not rstAbsentReport.EOF
    currPhone = rstAbsentReport("phone")
    lastPhone = currPhone 
    do while currPhone = lastPhone _
            and not rstAbsentReport.EOF
        strAbsent = strAbsent & ";" & rstAbsentReport ("comment")
        'Yes I know concatenating strings this way is terribly inefficient

        rstAbsentReport.MoveNext
        if not rstAbsentReport.EOF then
            currPhone = rstAbsentReport("phone")
        end if
    last
    rstAbsent.AddNew
    rstAbsent ("call") = strAbsent
    rstAbsent.Update
loop
'... clean up of recordset variables left as an exercise
于 2009-01-23T17:47:21.863 に答える