Versuch, eine Effiziente Kalender in Microsoft Access

Arbeite ich an einem Geräte-management-system über eine MS-Access .mdb-Datei für das Frontend und SQL Server 2008 für das back-end. Bei Bedarf kann ich umwandeln das Frontend für einen MS-Access-2010-Datei.

Erstellte ich einen Kalender Formular, wo die Benutzer können sehen, welche Ausrüstung ist gebucht, angemeldet, oder über durch. Es sieht wie folgt aus:

Versuch, eine Effiziente Kalender in Microsoft Access

Ich diese mit 42 Unterformulare, die ist leider langsam. Mit den Daten oben gezeigt, es dauert nur etwa 5 Sekunden zum laden, aber sobald ich mit real Daten, es beginnt wirklich bog unannehmbar. Ich versuchte diese effizienter zu gestalten, indem das source-Objekt die Unterformulare leer, bis Sie angezeigt werden, sowie nicht das laden der Datenherkunft bis zu diesem Zeitpunkt. Dies hat geholfen, genug, um das Beispiel oben gesehen laufen einigermaßen schnell, aber es ist noch nicht genug für realen Daten.

Also, was ich tun möchte, wird entweder einen Weg finden, um diese effizient, während immer noch mit Unterformulare, finden Sie ein anderes Steuerelement, das funktioniert in Ort der Unterformulare, oder das wechseln der Unterformulare mit Listboxen, aber irgendwie können Sie immer noch formatieren Sie die Farben der Zeilen. Ich verstehe, das ist unmöglich, nur mit Listboxen, wie es ist, aber ich bin ein Programmierer, und bin bereit, zu versuchen Unterklassen Listboxen, dies zu tun, wenn es nicht verschwenden zu viel von meiner Zeit. Leider habe ich noch nie getan, alle vba-Unterklassen, so würde ich werden müssen, wies auf einige gute Ressourcen, um so zu tun.

Den code zum setzen der Datenherkunft eines jeden Tages Unterformular wie folgt:

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 sieht wie folgt aus:

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;

StartDate und EndDate in der Tabelle TBL_Booking sind Beginn und Ende einer Buchung, und Date_Out und Date_In in der Tabelle TBL_Usage sind der Anfang und das Ende eines Zeichens.
Jedes Schild ist mit einer Buchung über das foreign-key-BookingID. Wenn Date_In ist NULL, das bedeutet, dass die Ausrüstung ist derzeit abgemeldet.

LKUP_List ist eine schlecht benannte Tabelle aus, bevor ich begann die Arbeit an diesem vor Jahren, dass ich nie die Mühe zu ändern. Es enthält eine Liste mit (unter anderem) von Arten von Ausrüstung. Buchungen sind für die Geräte-Typen und nicht bestimmte Elemente, und wenn ein Nutzer sich anmeldet, Ihre Ausrüstung, ein Rekord in TBL_Usage erstellt wird, die verknüpft mit einem bestimmten Stück Ausrüstung.

Wenn jemand noch Ideen hat, auf welche Richtung ich nehmen soll und wo ich sehen kann für die Anleitung, es wäre sehr geschätzt werden.

Ist das nur ein Bericht - gibt es eine Interaktion des Benutzers hier? Können Sie buchen/unbook Geräte von dieser form?
Nein, Buchungs-und Abmeldung erfolgt an anderer Stelle. Das ist einfach so-Benutzer können eine gute Vorstellung von dem, was verwendet wird. Die einzige Wechselwirkung, die hier, abgesehen von der änderung der Monat ist, dass ein Klick auf einen Tag öffnet sich eine detaillierte Ansicht des Tages.
Dies ist also nur ein Bericht? Warum also nicht einfach einen Bericht erstellen?, nicht eine form? Würden Sie sich andere Technologien wie SQL Server Reporting Services? Dies ist über das Internet übermittelt, so dass niemand muss MS Access installiert. Und ich glaube, Sie können rufen Sie einen SSRS-Bericht von MS Access (nur eine URL)
Umgebucht: Dies ist nur eine Funktion in der Benutzeroberfläche für die Datenbank, und jeder hat zumindest die runtime für MS Access installiert sowieso. Ich möchte halten Sie die Kalender-Ansicht, und ein Bericht wird nicht funktionieren, da die Elemente passen nicht in die Boxen, und muss geblättert werden. Die Sache, die wirklich hängen mich ist die Formatierung der Daten. Ich möchte halten Sie die Farbcodierung, aber das ist man von MS-Access-Einschränkungen. Ohne die Farbcodierung, dies sollte einfach zu tun mit einfachen Listenfeldern, die ich ' m vorausgesetzt, würde die Arbeit viel effizienter als Unterformulare.
Vielleicht einen Schritt zurück machen und darüber nachdenken, was der Benutzer versucht zu tun. Welche Schnittstelle ist sehr nützlich für die Benutzer?. Wenn Sie diesen Bericht ausführen, was Sie wirklich suchen? Sind Sie zu sehen, wenn ein GPS ist abgemeldet? Oder wenn eine GPS kostenlos ist? Sind Sie auch interessiert an historischen Informationen? Wollen Sie einfach auf eine Schaltfläche klicken, und die nächste GPS auf den nächsten Tag? Ein Kalender mit Bildlaufleisten, in der Sie jeden Tag gut aussieht, aber möglicherweise nicht begegnen, was Sie sind wirklich nach. Die Tatsache, dass dies ein Bericht ist eine sehr wichtige Unterscheidung.

InformationsquelleAutor NinjaMeTimbers | 2012-11-16

Schreibe einen Kommentar