フロントエンドにMSAccess.mdbファイルを使用し、バックエンドにSQLServer2008を使用する機器管理システムに取り組んでいます。必要に応じて、フロントエンドをMSAccess2010ファイルに変換できます。
カレンダーフォームを作成しました。このフォームでは、ユーザーはどの機器が予約されているか、サインアウトされているか、または期限が過ぎているかを確認できます。次のようになります。
残念ながら遅い42のサブフォームを使用してこれを作成しました。上記のデータでは、ロードに約5秒しかかかりませんが、実際のデータを使用するとすぐに、許容できないほどに停止し始めます。サブフォームのソースオブジェクトを表示されるまで空白のままにし、この時点までレコードソースをロードしないことで、これをより効率的にしようとしました。これは、上記の例を無難に高速に実行するのに十分役立ちましたが、実際のデータにはまだ十分ではありません。
だから私がやりたいのは、サブフォームを使用しながらこれを効率的にする方法を見つけるか、サブフォームの代わりに機能する別のコントロールを見つけるか、リストボックスでサブフォームを切り替える方法を見つけることですが、どういうわけかまだ色をフォーマットすることができます行の。リストボックスをそのまま使用することは不可能であることは理解していますが、私はプログラマーであり、時間を無駄にしない限り、リストボックスをサブクラス化してこれを実行しようとしています。残念ながら、私はvbaサブクラス化を行ったことがないので、そうするためにいくつかの優れたリソースを指摘する必要があります。
毎日のサブフォームのレコードソースを設定するコードは次のとおりです。
f("sub" & X & Y).Form.RecordSource = "SELECT * " & _
"FROM QRY_Calendar " & _
"WHERE CDate(StartDate) <= #" & curDate & "# " & _
"AND ((EndDate IS NULL OR CDate(EndDate) >= #" & curDate & "#)" & _
IIf(CDate(curDate) <= Date, " OR ((Date_In IS NULL OR CDate(Date_In) >= #" & curDate & "#) AND Date_Out IS NOT NULL)", "") & ") " & _
"ORDER BY IIF(Date_Out Is Not Null And (Date_In Is Null Or CDate2(Date_In)>=#" & curDate & "#) And CDate2(EndDate)<#" & curDate & "#,0,iif(CDate2(Date_Out)<=#" & curDate & "# And (Date_In Is Null Or CDate2(Date_In)>=#" & curDate & "#),1,2)), ID"
QRY_Calendarは次のようになります。
SELECT B.ID, Person, Initials, ProjectNum & '-' & ProjectYear & '-' & Format(TaskNum,'000') AS Project, Sign_Out_Code, Value AS Type, StartDate, EndDate, Date_Out, Date_In
FROM (((TBL_Booking AS B INNER JOIN TBL_Person AS P ON B.PersonID = P.ID) INNER JOIN LKUP_List AS T ON B.EquipTypeID = T.ID) LEFT JOIN TBL_Usage AS U ON B.ID = U.BookingID) LEFT JOIN TBL_Equipment AS E ON U.Equipment_ID = E.ID;
テーブルTBL_BookingのStartDateとEndDateは予約の開始と終了であり、テーブルTBL_UsageのDate_OutとDate_Inはサインアウトの開始と終了です。各サインアウトは、外部キーBookingIDを介して予約にリンクされています。Date_InがNULLの場合、それは機器が現在サインアウトされていることを意味します。
LKUP_Listは、私が何年も前に作業を開始する前からの名前の悪いテーブルであり、変更する必要はありませんでした。これには、(とりわけ)機器タイプのリストが含まれています。予約は機器タイプ用であり、特定のアイテムではありません。ユーザーが機器をサインアウトすると、特定の機器にリンクされたTBL_Usageのレコードが作成されます。
誰かが私がこれでどの方向に進むべきか、そして私がどこでガイダンスを探すことができるかについての考えを持っているならば、それは大いにありがたいです。