PDA

Vollständige Version anzeigen : UFO Problem mit Synchronisierung


Wilhelm1
19.06.2012, 13:31
Hallo,
meine Datenbank soll als Inventarverzeichnis benutzt werden. Der Benutzer muß sich auf der Seite „Log on“ anmelden, es gibt nur 2 Testbenutzer ohne Passwort. Auf der Seite Devices sind die Daten der Teile. Alle Teile werden zunächst in Kategorien einteilt (zum Test nur IT und Lab Equipment), dann in Sub Kategorien. Es gibt Komboboxen für die Auswahl der Kategorie, der Subkategorie und schliesslich des einzelnen Teils. Für jedes Teil gibt es feste Daten, z.B. die Seriennummer. Diese festen Daten werden im linken UFO angezeigt. Im rechten UFO werden Informationen zu Änderungen am jeweiligen Teil gezeigt (sog Historie), z.B. wenn das Teil an einen anderen Ort gebracht wird oder aus dem Inventar entfernt wird.
Zum testen mache ich folgende Auswahl in den Komboboxen: Category = IT Equipment, Sub Category = PC, Device = HP. Damit ist der 1. von 5 HP Rechnern ausgewählt. Die festen Daten für diesen PC werden in linken UFO richtig angezeigt. Im rechten Fenster sollten jetzt für diesen PC die historischen Infos stehen.
Zuerst hatte ich mit einer Abfrage qryDeviceID_History_DeviceIT bzw. qryDeviceID_History_DeviceLab die Historie aus der Tabelle tblDevicesIT_History bzw. tblDevicesLab_History geholt umd im rechten UFO abgezeigt. Es wurden die richtigen Infos angezeigt aber bei Änderungen im rechten UFO wurde nicht die jeweilige Tabelle mit den historischen Daten geändert sondern die verknüpfte Tabelle. Wurde z.B. die Location geändert, dann wurde in der Tabelle tblLocation der Wert der gebundenen Spalte eingetragen.
Weil ich das Problem nicht lösen konnte habe ich eine andere Lösung versucht. Im rechten UFO wird jetzt im gezeigten Formular die Tabelle tblDeviceIT_History bzw. tblDeviceLab_History angezeigt. Dann wollte ich dieses Formular an die DeviceID verknüpfen die ja in einem Textfeld steht und bei jeder Auswahl der Kombobox Device aktualisiert wird. Leider gibt mir Access dabei eine Fehlermeldung: „Aufbau einer Verknüpfung zwischen ungebundenen Formularen nicht möglich.“
Kann mir jemand helfen eine der Lösungen zum laufen zu bekommen? Oder gibt’s vielleicht noch eine bessere Lösung?
Gruss,
Wilhelm

Atrus2711
20.06.2012, 08:23
Hi,

ich habe eine Weile gebraucht, um diesen Textwust zu durchdringen. Einen Lesbarkeits-Preis gewinnst du damit nicht... ;)

Aber zur Sache (wie ich sie verstanden habe):
das Problem ist, dass die Kombis die beiden Ufos steuern müssen. Bisher hast du die Ufos nur eingeblendet, aber zumindest das rechte zeigt immer die History aller Geräte an.

Ich würde ganz einfach AfterUpdate des Geräte-Kombis die Datenquelle der beiden Ufos neuschreiben:
Me.UFO_Device.Form.Recordsource = "SELECT ... FROM ... WHERE Device_ID = " & Me!cboDevice
Me.UFO_Device_History.Form.Recordsource = "SELECT ... FROM ... WHERE tblDevicesIT_History = " & Me!cboDevice

Dein Code wird übrigens auch einfacher, wenn du die Existenz deiner Formulare nicht überprüfst... normalerweise sollten Formulare nicht einfach so verschwinden... ;)

Wilhelm1
20.06.2012, 10:40
Hallo Martin,

die Datenbak ist eigentlich viel größer, ich habe einiges gelöscht damit es nicht zu kompliziert wird. Vielen Dank das Du Dich trotzdem eingelesen hast.
Wenn ich Dich richtig verstehe bin ich mit Deinem Vorschlag bei meiner 1. Lösung. Nach Auswahl der SubCategory werden die entsprechenden Formulare in den UFOs gezeigt. Nach Auswahl des Gerätes werden die Daten aus der jeweiligen Tabelle geholt und im Formular angezeigt. Das hat ja auch funktioniert solange in rechten Formular keine Daten geändert wurden.
Ich habe in der Version DCT3 wieder die Abfragen eingebaut, aber nun kann ich z.B. den Benutzer im rechten UFO nicht mehr ändern. Kannst Du mir da helfen?
Gruss, Wilhelm

Atrus2711
20.06.2012, 11:06
Im Entwurf des rechten Ufos zeigt die Formular-Fehlermarkierung an, dass da was faul ist: "Das feld UserID existiert nicht in der Feldliste". In der Tat zeigt die qryDeviceID_History_DeviceIT weder die Felder UserID (fehlt) noch ActionOrChangeID (heißt AoC_ID). Änder das, dann klappts.

Wilhelm1
20.06.2012, 11:49
Ok, habe ich behoben. Jetzt habe ich wieder das Problem wie am Anfang: wenn ich den Benutzer ändere wird in der Tabelle tblUsers der Name mit dem Wert der gebundenen Spalte überschrieben und in der Tabelle tblDeviceIT_History werden alle Einträge auf den neuen Benutzernamen geändert.
Ausserdem lassen sich die Werte in den Komboboxen für State und Location nicht ändern. Hier ist im Formularentwurf aber alles ok.

Gruss,
Wilhelm

Atrus2711
20.06.2012, 12:03
wenn ich den Benutzer ändere wird in der Tabelle tblUsers der Name mit dem Wert der gebundenen Spalte überschrieben
Das User-Kombi solte nicht den Namen, sondern die UserID des Users als Steuerelementinhalt und gebundene Spalte haben. Das ist derzeit nicht so. Damit hast du da einen 1a-Nachnamensverhunzer erzeugt.

in der Tabelle tblDeviceIT_History werden alle Einträge auf den neuen Benutzernamen geändert
Das liegt an den (von mir erst jetzt entdeckten) Nachschlagefeldern in den Tabellen. Da das Kombi (s.o.) den Nachnamen geändert hat, haut das Nachschlagefeld jetzt überall den neuen Namen raus, obwohl sich die ID nicht verändert hat. Bau die Nachschlagefelder aus, und lass dir die nackten Daten anzeigen, beim User also seine ID. Für die Übersetzung der ID in Klartexte sind Abfragen und Kombifelder zuständig.

Ausserdem lassen sich die Werte in den Komboboxen für State und Location nicht ändern.
Die sind an Autowertfelder gebunden. Da kannst du nichts ändern. Der State und die Location, die du in dem Ufo pflegen willst, sind doch Werte der Gerätehistory, nicht Werte der State- oder Location-Tabellen.... ändere also den Steuerelementinhalt auf die Fremdschlüsselfelder (d.h. wo die State- und Location-Nummer "benutzt" wird).

Wilhelm1
20.06.2012, 12:11
Das verstehe ich nicht. Die Nachschlagefelder aus dem Formular entfernen, und dann? Wo soll die UserID dann gezeigt werden? Wie kann ich dann den User per Namen auswählen?

Atrus2711
20.06.2012, 12:27
Das verstehe ich nicht. Die Nachschlagefelder aus dem Formular entfernen, und dann?
Das hab ich nicht gesagt. Ich schrieb:
Das liegt an den (von mir erst jetzt entdeckten) Nachschlagefeldern in den Tabellen.
Da sollen die Nachschlagenfelder raus. In den Formularen übernehmen die Kombis diese Funktion. Aber in Tabellen hat diese Klartext-Anzeigemechanik nichts zu suchen.

Wilhelm1
20.06.2012, 13:38
Ich versteh's noch nicht, trotzdem vielen Dank für Deine Hilfe.

Atrus2711
20.06.2012, 13:57
Zur Nachschlagefunktion:
Siehe Bild als Beispiel. Nimm diese Nachschlagefunktion in allen Feldern aller Tabellen heraus (= Eigenschaft Steuerelement anzeigen auf Textfeld stellen).

maikek
20.06.2012, 14:21
@Wilhelm1
Ich liefere mal einen Link zur Begründung nach:
dbwiki Die Nachteile von Nachschlagefeldern (http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)
maike

Wilhelm1
24.06.2012, 11:11
Hallo,
ich habe zwar die Änderungen gemacht (in den Tabellen die Komboboxen durch Textfelder ersetzt) aber das hat nichts geändert. Noch immer werden z.B. die Benutzernamen in der verknüpften Tabelle durch die Werte der gebundenen Spalte überschrieben. Ich glaube nicht das die Komboboxen wirklich das Problem sind weil ich andere DBs habe die damit funktionieren.
Kann mir jemand erklären warum ich das UFO nicht an das Textfeld DeviceID im HF binden kann?
Gruss, Wilhelm

maikek
24.06.2012, 17:46
Hallo,
Noch immer werden z.B. die Benutzernamen in der verknüpften Tabelle durch die Werte der gebundenen Spalte überschrieben.
Das sieht doch sehr danach aus, als sei das Kombifeld an eine (falsche) Spalte gebunden. Im Steuerelementinhalt des Kombis muss entweder die Spalte der Tabelle eingetragen sein, in der der Wert dann gespeichert werden soll (also nicht die Herkunftstabelle) oder, falls es nur zur Suche dient, gar kein Steuerelementinhalt (ungebundenes Kombi).
Kann mir jemand erklären warum ich das UFO nicht an das Textfeld DeviceID im HF binden kann?
Deine DB kann ich nicht öffnen, aber "binden" kannst du es sowieso nicht, höchstens verknüpfen (UFO-Steuerelement im Hauptform auswählen (nicht das UFO selbst!) und dort die Verknüpfung zum Tabellenfeld des Hauptformulars eintragen.
maike

Atrus2711
25.06.2012, 08:26
Lies noch mal in #6 den ersten und dritten Teil.