# Verknüpfung (Werte) per VBA überprüfen



## essar (6. Juli 2002)

Hi Leute...
Habe mal wieder ein Problem........

Ich habe zwei Tabellen die miteinander verbunden sind das heisst 1 zu n Beziehung. In der 1´Tabelle habe ich einen autowert in der n´Tabelle wird der autowert übernommen sobald ich ein wert durch ein Formular erzeuge.
Jetzt das Problem.........

Wenn ich in mein Hauptformular (1´Tabelle) werte eintrage und im Unterformular werte (n`Tabelle)eingebe ist alles gut mit VBA Abfragen.

Wenn ich aber nichts in mein Unterformular eintrage wird somit auch kein autowert übernommen und wenn ich dann die Tabellen abfrage, kann VBA kein schritt mit (n`Tabelle)lk.MoveNext machen Fehlercode: Laufzeitfehler 3021.
Selbst wenn ich diesen abfange und zum nächsten datensatz gehe merkt er sich diesen schritt und übergeht dann selbst wenn ich nachträglich einen Datensatz einfüge diesen...

Kann mann irgendwie die verknüpfung mit VBA überprüfen ob auf der gegenseite ein Wert vorhanden ist ???? 

Ich werde noch WAHNSINNIG


bis dann essar


----------



## Dario Linsky (6. Juli 2002)

irgendwie...
...versteh ich deine frage nicht so ganz. bzw. ich kann nicht nachvollziehen, was du genau gemacht hast.  

kannst du evtl. mal einen screenshot der beziehung zwischen den tabellen anhängen und etwas code posten?
oder schick mir gleich die datenbank als email, dann guck ich mir das mal an. 

// wenn du die datenbank per mail schickst, dann komprimier sie aber bitte vorher. ich hab nur isdn.


----------



## essar (6. Juli 2002)

*Verknüpfung VBA*

Das programm kann ich leider gerade nicht mitsenden da es auf Arbeit ist....


Also ich versuche es mal anders zu beschreiben:

Ich habe zwei Tabellen.

Ein Formular.

Das Formular schreibt die Inhalte per Hauptformular und Unterformular in die Tabellen.

Die Tabellen sind miteinander Verknüpft wobei die Haupttabelle einen Autowert(Schlüssel) besitzt 1 zu n Beziehung.

Wenn ich jetzt Werte in mein HauptFormular und in mein UnterFormular eintrage dann wird der Autowert in das Unterformular sprich Tabelle übernommen...(ich brauche ja einen Wert mit dem ich die Beziehung herstellen kann).

Jetzt lese ich meine Tabellen mit VBA aus.

Wenn ich in meinen Untgerformular Werte eingegeben habe, habe ich auch die zugehörige Beziehung per autowert der HaupTabelle hergestellt.

Wenn ich aber jetzt keine Werte in mein Unterformular eintrage habe ich somit kein e Verknüpfung erstellt und habe somit keine übernahme meines Autowertes der HauptTabelle.

Wenn ich aber jetzt versuche diese Werte des Unterformulars mit VBA auszulesen muß ich ja auch um die Beziehung gleich zu lassen die Move Methode auf beide Tabellen anwenden das heiß bsp.:

ich einen Werte in der Haupttabelle also den autowert1 und in der "UnterTabelle" auch einen Wert also habe ich dort auch den autowert von der HauptTabelle 1 ( als Zahl wegen der Beziehung).

Wenn ich aber jetzt keine Werte in die UnterTabelle durch mein Formular eingegeben habe, habe ich auch den autowert der HauptTabelle nicht in dieser.
Somit kann ich mit der MoveNext Methode nur einen Laufzeitfehler ernten.

Ich suche jetzt einen Weg die Verknüpften Werte auszuwerten und dann die daraus resultierenden Werte zu verarbeiten.


Ich hoffe ich habe jetzt einigermaße rübergebracht was ich wollte.

PS.: Ich möchte die werte der zugehörigen Tabellen ausgeben d.h. wenn ich in meiner UnterTabelle Werte habe sollen diese der Werte zugeordnet werden zu den diese auch gehören.


Bis dann essar )


----------



## Dario Linsky (6. Juli 2002)

so ganz verstanden hab ich dich zwar immer noch nicht, aber...

als erstes nimmst du für die schlüsselfelder ein normales long integer. das ist weniger fehleranfällig als autowerte, weil du damit den feldinhalt selber kontrollieren kannst.
und du solltest in der beziehung die checkboxen für referentielle integrität, löschweitergabe und aktualisierungsweitergabe aktivieren.

oder du sorgst eben per code dafür, dass immer zusammengehörende datensätze in beiden tabellen bestehen. stichwort transaktion.

hoffe, dass ich das jetzt richtig verstanden hab.


----------



## essar (6. Juli 2002)

*Verknüpfungen*

Also die ganzen Dinge habe ich natürlich schon gemacht mit der Löschweitergabe u.s.w., ich hielt dies nicht für erwähnenswert.

Was meinst Du mit der "transaktion"....???

Willst Du per VBA die Inhalte in die Tabellen schreiben ???

Okay das macht einiges leichter aber in Access gibt es ja schon die Automation für diese Funktionen ....

Ich wollte diese mir zu nutzte machen um nicht überflüssigen Code zu erzeugen...


----------



## Dario Linsky (7. Juli 2002)

verlass dich bei access auf das dbms und du bist verlassen...  

per code hast du wenigstens einigermassen kontrolle über das, was nachher wirklich in den tabellen landet.
kleines beispiel für transaktionen:

du möchtest einen betrag von einem konto zum anderen überweisen. das läuft ja in mehreren schritten ab. wenn irgendwo in einem von diesen schritten ein fehler auftritt, kann es passieren, dass das geld vom quell-konto abgebucht wurde, aber nicht auf dem zielkonto angekommen ist. sowas gibt im ernstfall ein ziemliches chaos...

mit transaktionen kannst du dafür sorgen, dass entweder alle änderungen an der datenbank vorgenommen werden, oder gar keine. einzelne teilschritte gibt's dann nicht mehr.


----------



## essar (7. Juli 2002)

Also...

wenn ich dich richtig verstanden habe, würdest du die werte mit einer transaktion eintragen, obwohl Access diese Funktion schon anhand der Formulare mit Uuterformularen vorgibt. ? !

Den Sinn verstehe ich zwar nicht zu diesen Schritt da in meinem Falle wie gesagt ich einen Hauptwert habe und es können im einzelfall einen unterwert zum Hauptwert zugeordnet werden oder nicht und diese nur abfragen möchte.

Die Transaktion ist doch aus meiner Sicht nur wenn ich unsichere Aktionen durchführe die bei einem Fehler nicht eingetragen werden sondern alle Tabellen bleiben unverändert gegenüber aller gewollten vorgenommenden Änderungen/ Einträge (Rollback).

Hast Du noch einen anderen Vorschlag um Verknüpfte Wertefelder abzufragen?

PS.: wenn ich die Wertefelder abfrage überprüfe ich auch z.Zt. ob ich den selben schlüsselwert besitzte wenn ja wird das Feld abgefragt was den Haupttext und den Untertext besitzt..


Bis dann essar


----------



## essar (8. Juli 2002)

*verknüpfung VBA*

Also....


Ich habe eine Lösung gefunden..........

Wenn ich nichts in mein Unterformular eintrage (d.h. mein Unterformular beleibt leer) dann prüfe ich diesen Zustand ab und füge mir dann per VBA den Schlüssel von dem Hauptformular in meine Tabelle ein.
Somit habe ich immer eine gleichbleibende numerische Folge d.f. ich habe keinen VBA versucht keinen leeren Datensatz su lesen d.f. kein Laufzeitfehler.....

Ich danke Trotzdem

Bis dann essar


----------

