5

I’m trying to create either a report or form that displays data in essentially a “calendar” form.

I have a course query that is (simplified) as “Course name”; “course days”; “course times”---

Course; Days; Times
PSY 1; MW; 8A-9A
SOC 150; M; 8A-11A
ANTH 2; Tu; 8A-9A
ANTH 199; MW; 8A-9A

In Access, I’m trying to create a form based on the query that would give me a matrix of the following:

  • Columns: Times in hour increments
  • Rows: Days of week

So, for example, with the above data, it would appear like this: Edit: Yargh, I can't submit an image unfortunately. So, here is a link to a "course schedule" that is essentially what I'm trying to do: Schedule

I have no idea where to start with this. Any tips (or links)?

Edit:

One idea I have is to create a form with a field for every possible cell in the matrix (so, for example, there would be one "Monday, 8-9A" field--and that field would be a filter on the query that ONLY displays results where "day" contains "M" and BeginTime or EndTime or between 8A and 9A). Unfortunately, I'm not sure how to do that.

4

4 に答える 4

10

Access フォームとして必要と思われるものに近いことを行うことはできますが、簡単ではありません。このスクリーン キャプチャは、レコード ソースが ADO​​ 切断レコードセットであるデータシート ビューフォームにサンプル データを表示します。テキスト ボックスの値が Null でない場合、条件付き書式を使用してテキスト ボックスの背景色を設定します。あなたの写真はコースごとに異なる色を示唆していましたが、同じ時間ブロックで複数のコースをスケジュールできる場合、それを扱いたくありませんでした...私の方法は対処が簡単でした. :-)

ここに画像の説明を入力

切断されたレコードセットを作成してロードするコードは、以下に含まれていますGetRecordset()。フォームの open イベントは、そのレコードセットを に設定しますGetRecordset()

Private Sub Form_Open(Cancel As Integer)
    Set Me.Recordset = GetRecordset
End Sub

サンプルデータを別の方法で保存したことに注意してください。ここに私のClass_sessionsテーブルがあります:

Course   day_of_week  start_time  end_time
------   -----------  ----------  -----------
PSY 1              2  8:00:00 AM   9:00:00 AM
PSY 1              4  8:00:00 AM   9:00:00 AM
SOC 150            2  8:00:00 AM  11:00:00 AM
ANTH 2             3  8:00:00 AM   9:00:00 AM
ANTH 199           2  8:00:00 AM   9:00:00 AM
ANTH 199           4  8:00:00 AM   9:00:00 AM

これは、このアプローチの重要な部分である切断されたレコードセットを作成する機能です。これは、" Microsoft ActiveX Data Objects [version] Library "への参照を必要とするアーリー バインディングを使用して開発しました。バージョン2.8を使用しました。本番環境で使用する場合は、遅延バインディングを使用するようにコードを変換し、参照を破棄します。Intellisense を使用してその仕組みを理解できるように、アーリー バインディングのままにしました。

Public Function GetRecordset() As Object
    Dim rsAdo As ADODB.Recordset
    Dim fld As ADODB.Field
    Dim db As DAO.Database
    Dim dteTime As Date
    Dim i As Long
    Dim qdf As DAO.QueryDef
    Dim rsDao As DAO.Recordset
    Dim strSql As String

Set rsAdo = New ADODB.Recordset
With rsAdo
    .Fields.Append "start_time", adDate, , adFldKeyColumn
    For i = 2 To 6
        .Fields.Append WeekdayName(i), adLongVarChar, -1, adFldMayBeNull
    Next
    .CursorType = adOpenKeyset
    .CursorLocation = adUseClient
    .LockType = adLockPessimistic
    .Open
End With

strSql = "PARAMETERS block_start DateTime;" & vbCrLf & _
    "SELECT day_of_week, Course, start_time, end_time" & vbCrLf & _
    "FROM Class_sessions" & vbCrLf & _
    "WHERE [block_start] BETWEEN start_time AND end_time" & vbCrLf & _
    "ORDER BY day_of_week, Course;"
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strSql)

dteTime = #7:00:00 AM#
Do While dteTime < #6:00:00 PM#
    'Debug.Print "Block start: " & dteTime
    rsAdo.AddNew
    rsAdo!start_time = dteTime
    rsAdo.Update

    qdf.Parameters("block_start") = dteTime
    Set rsDao = qdf.OpenRecordset(dbOpenSnapshot)
    Do While Not rsDao.EOF
        'Debug.Print WeekdayName(rsDao!day_of_week), rsDao!Course
        rsAdo.Fields(WeekdayName(rsDao!day_of_week)) = _
            rsAdo.Fields(WeekdayName(rsDao!day_of_week)) & _
            rsDao!Course & vbCrLf
        rsAdo.Update
        rsDao.MoveNext
    Loop

    dteTime = DateAdd("h", 1, dteTime)
Loop

rsDao.Close
Set rsDao = Nothing
qdf.Close
Set qdf = Nothing
Set GetRecordset = rsAdo
End Function
于 2012-10-27T19:14:23.910 に答える
3

実際、私の次のビデオを見ると、新しいAccessWeb公開機能を備えたブラウザー内で実行されるAccessで作成されたカレンダーを見ることができます。

http://www.youtube.com/watch?v=AU4mH0jPntI

したがって、ここで実際に行う必要があるのは、テキストボックスを使用してフォームをフォーマットし、それらに入力するコードを設定することだけです。VBAまたは上記のビデオでさえ、これはAccessにとって非常に簡単であることを示しています。

于 2012-10-27T20:22:20.073 に答える
2

Access のフォームまたはレポートで、この問題を簡単に解決できるとは思えません。
問題は、異なるセルを別々にフォーマットする必要があること、およびセルが複数の行にまたがる可能性があり、結合する必要があることです。

私があなたなら、次の 2 つの方向のいずれかに進みます。

Web ブラウザーを試して、データを適切にフォーマットできる適切なライブラリーを見つけることに部分的です。

于 2012-10-27T15:12:18.830 に答える
0

この投稿はかなり古いことは知っていますが、同じ要件がありましたが、次のようにして回避しました。

  • テーブルを使用してデータを生成する HTML コードを (テキスト ファイルとして) 記述するモジュールを作成しました。
  • テーブルの colspan 機能を使用して、必要なビューを動的に生成できるようにしました。
  • HTML ファイルは Form_Open イベントで作成され、webbrowser コントロールを HTML ファイルにポイントすることで、ビューに最新のデータが表示されます。
  • css ファイルは、HTML ファイルのビジュアル表示を処理するために使用されるため、既に使用されている Access フォームと同じように表示されます。

誰かが興味を持っている場合は、さらに説明するためにいくつかのコードを投稿できます。

于 2016-07-13T10:04:55.200 に答える