So einfach wie möglich (Access)

Mole, Donnerstag, 26. März 2009, 17:16 (vor 3342 Tagen)

... versuch ich mal kurz mein Problem zu schildern:

Hintergrund: Tests für eine Migration

Dazu will ich ein Formular erstellen, was den Testern eine angenehmere Eingabe ermöglicht, als in ein Excel-File.

Ich stelle mir ein 2 stufiges Formular vor:

1. Ebene: ID-Nummer für Testdatensatz eingeben
2. Ebene: Gesperrte Textfelder, wo alle wichtigen Angaben zu Inhalten der alten DB stehen und dann wiederum freie, editierbare Textfelder, wo die Tester ihre evtl. Auffälligkeiten eintragen können.

Genau diese Zweiteilung krieg ich nicht gebacken. Entweder überschreibe ich Inhalte oder aufgrund von irgendwelchen Daten(herkunfts)kollisionen sind Formularfelder gesperrt etc. Genügt das fürs erste zum Verständnis? Bei Bedarf schicke ich meine Ergüsse auch mal rum.

Besten Dank im Voraus, Mole

So einfach wie möglich

Martin Asal @, Donnerstag, 26. März 2009, 20:39 (vor 3342 Tagen) @ Mole

Genügt das fürs erste zum Verständnis?

Da bin ich mir nicht sicher...

Bei Bedarf schicke ich meine Ergüsse auch mal rum.

Nix für ungut, aber bitte nicht... Bei speziellen Problemstellungen hilft Dir gerne jemand weiter, aber es ist immer noch Deine Datenbank ;-)

Wenn ich Dich recht verstanden habe, willst Du in einem Formular erst die Daten auf einen Datensatz einschränken, und dann nur bestimmte Felder zum Bearbeiten freigeben; andere Felder sollen nur angezeigt werden.

Kopiere Dir mal folgenden SQL-Code in eine neue Abfrage:

 
SELECT *
FROM tblQuelle
WHERE ID=[Geben Sie eine ID ein];
 

(Statt "tblQuelle" und "ID" musst Du natürlich den Namen Deiner Tabelle bzw Deines ID-Feldes eingeben)

Wenn Du die Abfrage startest, wirst Du aufgefordert, eine ID einzugeben, und siehst dann nur noch einen einzigen Datensatz.

Nimmst Du jetzt diese Abfrage als Datenquelle für Dein Formular, ist schon mal der erste Teil Deines Problems gelöst. Eigentlich nicht wirklich elegant; weil man sowas eher über Formulare löst, aber fürs erste OK.

Nun zum Formular: Dort baust Du alle Felder ein, die reinsollen. Bei den Feldern, die nur zum Anzeigen gedacht sind, setzt Du die Eigenschaft "gesperrt" auf "ja". Außerdem solltest Du auch mit anderen Steuerelementeigenschaften spielen, z.B. damit man schon optisch erkennt, dass man da nicht rankann.

bis denn
Martin

So einfach wie möglich

mole @, Freitag, 27. März 2009, 10:11 (vor 3342 Tagen) @ Martin Asal

Hey Martin,

allerbesten Dank schon mal für deine Bemühungen. Mit dem Code geh ich mit, nur hilft der mir bzw. den Testern nicht viel, glaub ich. Die sollen/können meine IDs für die Quell-Datensätze nicht wissen.

Die sollen die heilige Testhalle mit einer zig beliebigen ID (z.B. eine 8stellige Signatur eines Buches) eingeben, da jetzt gerade genau diese Migration bei genau dem Datensatz getestet wird. Ich habe dafür eine Tabelle mit ID (autowert) und (z.B.) Signaturnummer. Mit einem Klick komme ich in das Formular mit den gesperrten und freien Textfeldern. Basis hier sind allerdings 2 Tabellen: eine Tabelle, in der ich das gesamte (gesperrte) Quellmaterial habe und eine, in die ich Auffälligkeiten notiere. 2 Tabellen, da mehrere Tester diese Aufgaben wahrnehmen sollen. Allerdings - mit der Kommunikation der Tabellen untereinander hapert’s noch.

Als Entry für diesen Check wiederum stelle ich mir die von dir vorgeschlagene Variante stilistisch recht nett vor. Allerdings müsste ich ja dafür mit der Eingabe einer ID gleichzeitig den ersten Datensatz aus der Quelltabelle aufrufen und auch einen neuen Datensatz in der Auffälligkeiten-Tabelle anlegen – funktioniert so was?

Beste Grüße,

mOLe

So einfach wie möglich

Martin Asal @, Samstag, 28. März 2009, 17:11 (vor 3340 Tagen) @ mole

Die [Tester] sollen/können meine IDs für die Quell-Datensätze nicht wissen.

Na, dann nimmst Du halt das Identifizierungsmerkmal, das sie haben. Wo ist das Problem?

2 Tabellen, da mehrere Tester diese Aufgaben wahrnehmen sollen.

Diesen Ansatz halte ich für falsch normalisiert.

Allerdings - mit der Kommunikation der Tabellen untereinander hapert’s noch.

Eben. Das gehört für mich erst mal in eine Tabelle. Und falls doch eine 1:1-Beziehung gerechtfertigt wäre (aus Berechtigungsgründen), müsste eine der Tabellen die führende sein. Arbeite mal das Tutorial durch (Stichwort: Beziehungen). In diesem Fall muss das Formular natürlich sowieso auf einer Abfrage beruhen, die die beiden Tabellen wieder zusammenführt.

bis denn
Martin

So einfach wie möglich

Mole, Freitag, 03. April 2009, 14:48 (vor 3335 Tagen) @ Martin Asal

nach nem umdenken bin ich mittlerweile - denk ich - auf nem guten kurs.
bräuchte jetzt nur hilfe in sachen aus sql (dein code)

[color=#fc0]SELECT *
FROM tblQuelle
WHERE ID=[Geben Sie eine ID ein];[/color]

wie kann ich hier an dieser stelle - nach eingabe einer nummer - das geforderte formular aufrufen?

So einfach wie möglich

Martin Asal @, Freitag, 03. April 2009, 22:35 (vor 3334 Tagen) @ Mole

wie kann ich hier an dieser stelle - nach eingabe einer nummer - das geforderte formular aufrufen?

Dein Formular braucht ja wohl eine Datenquelle. Rate mal, was Du da nimmst ;-)

bis denn
Martin

So einfach wie möglich

Mole, Sonntag, 05. April 2009, 17:49 (vor 3332 Tagen) @ Martin Asal

Rate mal, was Du da nimmst ;-)

.. wenns um raten geht, stelle ich meine fragen wohl kaum in ein expertenforum... seis drum. es geht ja auch weniger darum eine "quelle" für mein formular zu finden, als vielmehr darum, wie ich den formlaraufruf in meiner "Nummer-eingeben-abfrage" verskripte, um dann damit in das (bereits verquellte) formular zu gelangen.

ahoi, mole

So einfach wie möglich

Martin Asal @, Sonntag, 05. April 2009, 23:19 (vor 3332 Tagen) @ Mole

.. wenns um raten geht, stelle ich meine fragen wohl kaum in ein expertenforum

Aber mitdenken kann man ja erwarten. Schließlich hatte ich Dir schon gesagt, was Du mit der Abfrage machen sollst.

bis denn
Martin

So einfach wie möglich

Mole, Montag, 06. April 2009, 16:10 (vor 3332 Tagen) @ Martin Asal

Dann liegt's anscheinend an missverständlicher Kommunikation ;)

[color=#fc0]"Nimmst Du jetzt diese Abfrage als Datenquelle für Dein Formular [...]"[/color]

Ich kann diese Abfrage nicht als Quelle nehmen, da der eigentlichen Quelle (einer Tabelle mit 60 Einträgen/Testattributen) die einzugebenden Nummern nicht zugeordnet sind. Das darf m.M.n. auch nicht sein, da die Datenquellen-Tabelle quasi statisch sein soll und dem Nutzer nur Erklärungen zu einem zu testenden DS preisgeben soll. Da besteht überhaupt keine Verbindung zwischen den Daten und den Testsätzen. Alles Nutzerspezifische wird in einer Eíngabe-Tabelle gespeichert. Hier wiederum sind die IDs der anfangs einzugebenden Nummern "bekannt", da die übergeben werden. Somit kann ich im Nachhinein auslesen, dass ein Nutzer im Datensatz 1 beim Testattribut XY folgenden Fehler entdeckt hat.
Mach ich das jetzt wie du sagst, dann fehlt die Komponente, dass der "Abfrage-Roboter" auch in die Eingabe-Tabelle guckt bzw. ja erstmal die neue ID dahinein schreibt. Wie verknüpfe ich das?

 
SELECT * 
FROM tblTestsatz, tblEingabe
WHERE Nummer=[Geben Sie eine Nummer ein] AND tblTestsatz.T_ID=tblEingabe.T_ID;
 


??
das funzt nicht...

So einfach wie möglich

Martin Asal @, Montag, 06. April 2009, 22:34 (vor 3331 Tagen) @ Mole

Ich kann diese Abfrage nicht als Quelle nehmen, da der eigentlichen Quelle (einer Tabelle mit 60 Einträgen/Testattributen) die einzugebenden Nummern nicht zugeordnet sind. Das darf m.M.n. auch nicht sein, da die Datenquellen-Tabelle quasi statisch sein soll und dem Nutzer nur Erklärungen zu einem zu testenden DS preisgeben soll. Da besteht überhaupt keine Verbindung zwischen den Daten und den Testsätzen.

Doch, nämlich:

Hier wiederum sind die IDs der anfangs einzugebenden Nummern "bekannt", da die übergeben werden.

Also eine 1:n-Beziehung. Die musst Du auch so aufbauen. Dann sieht auch Dein SQL-Code anders aus; ca so (ungetestet):

 
SELECT *
FROM tblTestsatz INNER JOIN tblEingabe ON tblTestsatz.T_ID = tblEingabe.T_ID
WHERE tblTestsatz.Nummer=[Geben Sie eine Nummer ein];
 

Einfach gesagt, es gibt immer Beziehungen zwischen den Tabellen in einer Datenbank. Man muss sie nur manchmal suchen.

bis denn
Martin

So einfach wie möglich

Mole, Dienstag, 07. April 2009, 21:15 (vor 3330 Tagen) @ Martin Asal

ok, fast am ziel. die 1:n hatte ich auch schon erstellt gehabt. Aber diese joins sind - zumindest dann, wenn ich die selber tüdeln soll - gräuslig. im nachhinein allerdings logisch.

Brauche aber noch 2 tipps,..
1) und zwar soll die in dem popup-fenster eingegebene Nummer im Formular übernommen werden. ich hab mich an deinem vorschlag für Thomas orientiert:

 
Private Sub Form_Open(Cancel As Integer)
Me.KundenID = Forms("ErstesFormular").KundenID
End Sub
 

Rumspielen damit brachte keinen erfolg. Bei mir handelt sichs um ein Formular und eine Abfrage bzw. ja eigentlich sogar nur eine ins Formular übertragene Abfrage. Aber die Nummer wird nicht übernommen. Was ist zu tun?

2) Wenn ich die Quelldatensätze durchblättere kommt immer die Abfrage nach einer neuen Testsatz-Nummer. Das wäre aber nur n Schönheitsfehler. Solange die Datenübertragung und -haltung klappt bin ich zufrieden.

Danke. Mole

So einfach wie möglich

Martin Asal @, Mittwoch, 08. April 2009, 21:24 (vor 3329 Tagen) @ Mole

1) und zwar soll die in dem popup-fenster eingegebene Nummer im Formular übernommen werden.

Bei mir handelt sichs um ein Formular und eine Abfrage bzw. ja eigentlich sogar nur eine ins Formular übertragene Abfrage. Aber die Nummer wird nicht übernommen. Was ist zu tun?

Ich habe ernsthafte Zweifel, ob Du das Tutorial überhaupt mal durchgearbeitet hast. So bringt das alles nix.

Schließlich solltest Du wissen, dass Du im Formular alles anzeigen kannst, was als Datenquelle da ist.

2) Wenn ich die Quelldatensätze durchblättere kommt immer die Abfrage nach einer neuen Testsatz-Nummer. Das wäre aber nur n Schönheitsfehler. Solange die Datenübertragung und -haltung klappt bin ich zufrieden.

Das mit der Parameterabfrage ist ja nur ein Lösungsansatz von vielen. Ein anderer wäre, über ein Kombinationsfeld in einem Formular zu gehen. Aber dazu verweise ich Dich nun endgültig auf das Tutorial.

bis denn
Martin

RSS-Feed dieser Diskussion
powered by my little forum