Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
BE/FE selbstgemacht - Performance & Fehlermeldung
zurück: Farbige notizzettel weiter: Eigene Dokumentation erstellen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
rosenfem
Im Profil kannst Du frei den Rang ändern


Verfasst am:
06. Okt 2010, 10:41
Rufname:

BE/FE selbstgemacht - Performance & Fehlermeldung - BE/FE selbstgemacht - Performance & Fehlermeldung

Nach oben
       Version: Office 2007

Hi Profis,

ich hoffe mir kann hier weiter geholfen werden, habe bisher nichts entsprechendes auf meine Fragen gefunden.

Anforderung: Für Kostenplanungen unterschiedlicher Projekte soll es eine ACC-Vorlage (2007) geben, die sich jeder Projektleiter kopiert und mit eigenen Daten füttert und ggf. offline auf dem Laptop weiter bearbeiten kann. D.h. die Datenhaltung liegt beim User, die Verwaltung von Formularen, Abfragen und Berichte möchte ich zentral halten und der Client holt sich bei jedem Start die aktuellen Objekte. Oder eben nicht, wenn er offline ist. Das sieht zunächst nach dem Gegenteil von dem aus, wie es wahrscheinlich die meisten anderen handhaben. Aber die dezentrale Datenhaltung und zentrale Objektpflege ist ausdrücklich so gewünscht.

Lösung: Es gibt eine Master-DB, in der die Daten in Form von Verknüpfungen zu einem Client existieren, quasi zum Testen der hier vorgenommenen Objektänderungen. Hier werden die oben genannten Objekte gepflegt. Jeder Client hat eine Funktion eingebunden, die per autoexec-Makro bei jedem Start aufgerufen wird. Diese Funktion holt sich bei Verbindung zur Master-DB alle Forms, Queries and Reports:

Code:

Public Function ObjectServer()

    master = "P:\DB_Tool_ADMIN.mdb"
   
    If Dir(master) = "" Then
    MsgBox "Der Objektserver konnte nicht gefunden werden. Update nicht möglich"
    Else
   
    Set dbs = CurrentDb()
    Dim i As Integer
    For i = (dbs.QueryDefs.Count - 1) To 0 Step -1
        dbs.QueryDefs.Delete dbs.QueryDefs(i).Name
    Next i

    Set dbs = DBEngine.Workspaces(0).OpenDatabase(master)
   
    Dim j As Integer
    For j = (dbs.QueryDefs.Count - 1) To 0 Step -1
        DoCmd.TransferDatabase acImport, "Microsoft Access", master, acQuery, dbs.QueryDefs(j).Name, dbs.QueryDefs(j).Name
    Next j

    Set frm = dbs.Containers!Forms
   
    For Each doc In frm.Documents
        DoCmd.DeleteObject acForm, doc.Name
        DoCmd.TransferDatabase acImport, "Microsoft Access", master, acForm, doc.Name, doc.Name
    Next doc
   
    Set rpt = dbs.Containers!Reports
    For Each doc In rpt.Documents
        DoCmd.DeleteObject acReport, doc.Name
        DoCmd.TransferDatabase acImport, "Microsoft Access", master, acReport, doc.Name, doc.Name
    Next doc
   
    End If
   
    DoCmd.OpenForm "HAUPTMENÜ"
   
End Function


Zugegeben, ich bin kein VBA-Profi und habe mir den Code aus unterschiedlichen Foren zusammengeklaut, und mit Sicherheit gibt es elegantere Wege. Zunächst interessieren mich aber folgende 3 Fragen:

1.) Wenn ich obige Funktion per Makro in der bereits geöffneten Client-DB aufrufe, funktioniert alles problemlos. Benenne ich das Makro in autoexec um und lasse es somit beim Start der Client-DB automatisch ablaufen, erhalte ich die Fehlermeldung "Bei der Weitergabe des Befehls an das Programm ist ein Fehler aufgetreten". Nach Bestätigung scheint aber alles sauber zu laufen. Wie bekomme ich diese Fehlermeldung weg bzw. noch wichtiger, was verursacht diese Fehlermeldung?

2.) Kann man sich das autoexec-Makro sparen und die Funktion automatisch bei Programmstart ausführen? Kann man damit vllt. sogar Punkt 1. erschlagen?

3.) Die Performance ist eine Katastrophe. Bei insgesamt ca. 150 Objekten dauert jeder Start einige Minuten. Meine Idee ist, in jeder Schleife das Änderungsdatum des Objekts abzufragen und abhängig davon die Löschung und Transfer durchzuführen. Alternativ könnte man am Anfang der Funktion die Dateiattribute abfragen. Nachteil: Bei häufigen Änderungen durchläuft der Client jedesmal die langwierige Prozedur. Wie auch immer, ich habe keine der beiden Lösungen hinbekommen.

So, ich hoffe ich konnte alles verständlich rüberbringen. Auf Eure Anregungen bin ich gespannt und bedanke mich schon jetzt.

Vielen Dank und Gruß, Rose.
MAPWARE
Access Profi(l)neurotiker


Verfasst am:
06. Okt 2010, 19:23
Rufname:
Wohnort: Hannover


AW: BE/FE selbstgemacht - Performance & Fehlermeldung - AW: BE/FE selbstgemacht - Performance & Fehlermeldung

Nach oben
       Version: Office 2007

Hi,
Du könntest versuchen diese Funktion in ein vorgeschaltetes StartFormular zu verschieben und im AutoexecMakro dieses Formular zu öffnen. Die Funktion würde dann beim Öffnen des Formulars gestartet werden. Ein Startformular kannst Du auch unter Extras Start festlegen, dann brauchst Du kein AutoexecMakro mehr. Falls das im Ereignis "beim Öffnen" des Formulars nicht so gut klappt kann man auch einen kleinen Trick anwenden. Man setzt das Timerintervall des Formulars auf 250 Millisekunden, das reicht um es zu Öffnen und anzuzeigen und schreibt ins das Timer Ereignis
Code:
Private Sub Form_Timer()
    Call ObjectServer
    Me.TimerInterval = 0
End Sub

Dadurch wird der Code nur einmal ausgeführt und Du kannst sogar im Formular den Verlauf anzeigen.
Um die Performance in den Griff zu bekommen ist etwas mehr Aufwand nötig. Du brauchst eine Tabelle in Deinem Master genannt "tblMasterObjects" die etwa den folgenden Aufbau hat.
Code:
ID ObjectType ObjectName Revision

in diese werden, meinetwegen auch durch Abfragen, alle Abfragen, Formulare und Berichte eingetragen, die Deine Anwendung besitzt. Die Revision ist erstmal für alle einfach 1.
Im Frontend gibt es dieselbe Tabelle, aber die heisst dort tblClientObjects, zur Tabelle tblMasterObjects erstellst Du eine Verknüpfung. Jedesmal wenn Du etwas in der Masterdatenbank änderst erhöhst Du die Revision um eins. Im Client überprüfst Du dann:
1. sind neue Objekte hinzugekommen (kopieren)
2. sind Objekte mit einer höheren Revisionsnummer im Master (kopieren)
3. sind Objekte im Master gelöscht worden. (löschen)
Wenn das Objekt kopiert worden ist, weil es neu war, oder eine höhere Revision im Master existiert, setzt Du die Revision im Client entsprechend danach hoch. Dadurch werden nur die Änderungen im Client nachgezogen, was dann recht zügig klappen sollte.

_________________
Grüße
Marcus

Wer Controls nicht sinnvoll benennt, wird es später bereuen.
rosenfem
Im Profil kannst Du frei den Rang ändern


Verfasst am:
08. Okt 2010, 14:35
Rufname:

AW: BE/FE selbstgemacht - Performance & Fehlermeldung - AW: BE/FE selbstgemacht - Performance & Fehlermeldung

Nach oben
       Version: Office 2007

Hi MAPWARE,

danke Dir für Deine Antwort. An ein Startformular dachte ich auch schon, aber mit der von mir beschriebenen Funktion kollidiert das ja mit dem Löschen des geöffneten Formulars. Aber wie man den Verlauf im Formular anzeigen könnte, würde mich schon interessieren, vielleicht kann ich das anders verbauen.

Deinen Vorschlag mit den tblMasterObjects würde ich gerne umsetzen, hast Du zufällig einen passenden Code dazu? Wie gesagt, Ideen habe ich viele, aber an der Umsetzung in VBA mangelt es noch. NOCH, ich arbeite täglich am Wissenserwerb! Smile

Danke für Deine Hilfe.
MissPh!
Office-VBA-Programmiererin


Verfasst am:
08. Okt 2010, 21:17
Rufname:
Wohnort: NRW


Re: BE/FE selbstgemacht - Performance & Fehlermeldung - Re: BE/FE selbstgemacht - Performance & Fehlermeldung

Nach oben
       Version: Office 2007

Hallo.
rosenfem - 06. Okt 2010, 10:41 hat folgendes geschrieben:
Anforderung: Für Kostenplanungen unterschiedlicher Projekte soll es eine ACC-Vorlage (2007) geben, die sich jeder Projektleiter kopiert und mit eigenen Daten füttert und ggf. offline auf dem Laptop weiter bearbeiten kann. D.h. die Datenhaltung liegt beim User, die Verwaltung von Formularen, Abfragen und Berichte möchte ich zentral halten und der Client holt sich bei jedem Start die aktuellen Objekte. Oder eben nicht, wenn er offline ist.

Soweit kann ich dir folgen, aber das Kopieren der Objekte halte ich für keine gute Idee. Du solltest auch bei deinem Konzept unbedingt an der Trennung von Frontend und Backend festhalten, nur mit dem Unterschied, dass das BE lokal gespeichert wird. Das Problem des Aktualisierens des Frontends und Neu-Einbindens der Tabellen besteht so oder so. Hierzu gibt es aber jede Menge Threads mit Lösungsbeispielen.

_________________
Gruß MissPh!
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: UNION erzeugt Fehlermeldung 1 Zed2k 401 10. Jan 2008, 17:30
Zed2k UNION erzeugt Fehlermeldung
Keine neuen Beiträge Access Tabellen & Abfragen: Abfragen von 2 Spalten & ergebniss in der 3ten wiedergeb 1 Ray-82 496 10. Dez 2007, 12:12
JörgG Abfragen von 2 Spalten & ergebniss in der 3ten wiedergeb
Keine neuen Beiträge Access Tabellen & Abfragen: Fehlermeldung 5 Kerstin83 413 07. Dez 2007, 01:06
JörgG Fehlermeldung
Keine neuen Beiträge Access Tabellen & Abfragen: Access Fehlermeldung ?!?!?! 3 creech 408 09. Nov 2007, 10:22
Nouba Access Fehlermeldung ?!?!?!
Keine neuen Beiträge Access Tabellen & Abfragen: Datenzugriffseite & Co 0 Scarface1102 399 02. Aug 2007, 13:51
Scarface1102 Datenzugriffseite & Co
Keine neuen Beiträge Access Tabellen & Abfragen: Performance bei verknüpften Abfragen 0 afrikanos2 506 21. Jun 2007, 11:06
afrikanos2 Performance bei verknüpften Abfragen
Keine neuen Beiträge Access Tabellen & Abfragen: Fehlermeldung: There was an error executing the command? 0 Campnes 1220 12. Jun 2007, 12:24
Campnes Fehlermeldung: There was an error executing the command?
Keine neuen Beiträge Access Tabellen & Abfragen: Performance erhöhen 2 Desert Storm 1524 25. Apr 2007, 21:24
Nouba Performance erhöhen
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage mehrerer Checkboxen & eines Textfeldes 4 typh00n 508 25. Apr 2007, 08:58
KlausMz Abfrage mehrerer Checkboxen & eines Textfeldes
Keine neuen Beiträge Access Tabellen & Abfragen: Verschachtelte Abfrage erzeugt Fehlermeldung 5 Sneff 807 14. März 2007, 12:28
Sneff Verschachtelte Abfrage erzeugt Fehlermeldung
Keine neuen Beiträge Access Tabellen & Abfragen: Verknüfpftes Excel Arbeitsblatt & Access Anfügeabfrage 0 Highnz 995 02. März 2007, 10:59
Highnz Verknüfpftes Excel Arbeitsblatt & Access Anfügeabfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Fehlermeldung bei Filter einbauen 3 DrChill 1835 26. Feb 2007, 20:32
jens05 Fehlermeldung bei Filter einbauen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML CSS