collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 26
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13971
  • stats Beiträge insgesamt: 66518
  • stats Themen insgesamt: 8970
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Anzeigen und Modifizieren in einem Formular  (Gelesen 7553 mal)

Offline OPS

  • Access-User
  • *
  • Beiträge: 76
Anzeigen und Modifizieren in einem Formular
« am: Mai 06, 2010, 13:38:50 »
Hallo

Folgendes Problem:

Meine Tabelle hat mehrere Werte, 3 dieser Werte, 2 davon stammen aus anderen Tabellen, identifizieren das Objekt eindeutig.
Das Objekt hat auch eine ID.

Für den Anwender ist diese ID aber später weder interessant noch kann er sie ansehen.
Ich möchte nun in ein Formular ein bestimmtes Objekt eingeben.
Gebe ich nun einen neuen Wert ein, so soll er als neues Objekt eingespeichert werden, gebe ich ein schon bestehendes Objekt ein, so wird dieses Objekt angezeigt.

Beispiel:
tbl_Objekt
ID
X
FK_Y (stammt aus anderer Tabelle)
FK_Z (stammt aus anderer Tabelle)
(Andere Felder)

Formular:
X:1
Y:5
Z:6
ID (nicht sichtbar): 15 (Objekt existiert noch nicht- ID neu vergeben)
(Eingabemöglichkeiten anderer Eigenschaften dieses Objekts)

X:1
Y:2
Z:3
ID (nicht sichtbar): 3 (Objekt existierte schon, Sprung zu ID)
(Anzeige anderer Eigenschaften dieses Objekts)



Wie mache ich das?
 

Offline Hondo

  • Administrator
  • Access Guru
  • *****
  • Beiträge: 4641
  • Balu
    • Access Hilfe
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #1 am: Mai 06, 2010, 15:09:26 »
Hallo,
dein Satz "Meine Tabelle..." macht keinen Sinn, imo fehlt da 1-2 Wörter.
Erstelle dein Formular ungebunden, und füge z.B. einen Speichern-Button ein (oder speichere im Ereignis Beim Anzeigen).
Prüfe z.B. mit Dlookup() ob ein bestimmtes Objekt schon gespeichert wurde, falls ja mach z.B per MsgBox eine Ausgabe, falls nein speichere den Datensatz per Einfügeabfrage.
z.B. so:
Dim db AS Database
set db = Currentdb
db.Execute "Insert into Tabelle (Feld1, Feld2....) Values (" & Me!Feld1 & ", " & Me!Feld2...... & ")"

Gruß Andreas
 

Offline OPS

  • Access-User
  • *
  • Beiträge: 76
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #2 am: Mai 06, 2010, 15:20:54 »
Hallo
Schon Mal danke.

Dass das schon existierende Objekt ausgewählt wird, geht nicht?

Also ich könnte ja sagen:
"Okay ich wähle nach ID aus. Hier ist ID 1 mit den koordinanten 1,2,3- dazu nun der gespeicherte Wert A.
ID 2 hat die koordinaten 4,5,6 mit dem gespeicherten Wert Z."
->Das möchte ich nicht, weil der User keine IDs sehen soll.

Mit dem Dlookup-Befehl würde es jetzt so laufen (wenn ich das richtig verstanden habe):
"Ich gebe 1,2,3 ein, Dlookup checkt ob diese Kombination schon gespeichert ist: Nein? Speichern.
Ich gebe 4,5,6 ein, Dlookup checkt ob diese Kombination schon gespeichert ist: Ja? Ausgabe: gespeicherter Wert."

Was ich möchte:
"Ich gebe 1,2,3 ein, ist diese Kombination schon gespeichert ist: Nein? Speichern.
Ich gebe 4,5,6 ein, ist diese Kombination schon gespeichert ist: Ja? Gehe zur ID (unsichtbar) und zeige den zugehörigen Wert an (sichtbar)."

Was ich auch noch überlegt habe, ist getrennte Eingabemasken für bloße Eingabe und Aufruf zu machen. Aber auch da bleibt das Problem, dass ich meine Koordinaten eingebe, und er automatisch zur zueghörigen ID springt.


---
Der Satz war etwas umständlich formuliert
Meine Tabelle hat mehrere Werte, 3 dieser Werte, 2 davon stammen aus anderen Tabellen, identifizieren das Objekt eindeutig.


Meine Tabelle hat mehrere Werte. Drei dieser Werte identifizieren das Objekkt eindeutig. Zwei dieser Drei Werte stammen aus anderen Tabellen.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23339
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #3 am: Mai 06, 2010, 18:51:57 »
Hallo,

doch, geht schon,Hondo hat's doch gesagt..
Zitat
Prüfe z.B. mit Dlookup() ob ein bestimmtes Objekt schon gespeichert wurde, falls ja mach z.B per MsgBox eine Ausgabe, falls nein speichere den Datensatz per Einfügeabfrage.

Statt der Msgbox kannst Du auch ein gebundenes Form öffnen und den vorhandenen Datensatz anzeigen.

Offline OPS

  • Access-User
  • *
  • Beiträge: 76
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #4 am: Mai 10, 2010, 09:24:55 »
Ich habe daran jetzt eine Weile rumprobiert und mangels VBA-Erfahrung nicht viel hinbekommen. Ich denke dass ich es irgendwann schaffe, aber ich habe das Gefühl hier stundenlang an etwas zu arbeiten, das ein Profi in einer Minute fertig kriegt.
Kriege ich also bitte den richtigen Code für einen Aufruf?

tbl_CO
ID_CO
FK_X
FK_Y
FK_Z
Info

tbl_X (tbl_Y, tbl_Z entsprechend)
ID_X
X

Ich möchte nun in einem Formular durch Eingabe von X Y und Z eindeutig einen Datensatz hervorbringen (laden) oder modifizieren (speichern), indem ich auf einen entsprechenden Knopf klicke oder die Auswahl automatisch bei der Eingabe erfolgt.

Was ich übrigens bisher hervorgezaubert habe ist eher schwach, und obwohl ich darüber nachdachte es zu posten ist es dafür dann doch ZU schwach.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23339
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #5 am: Mai 10, 2010, 09:53:20 »
Hallo,

es gibt nicht allein nur DEN Code....


Dazu muß eine ganze (Formular-) Konstruktion her..

Erstell ein (gebundenes) Form auf Basis der Tabelle tbl_CO. Die Werte für FK_X, FK_Y, FK_Z werden mittels passend eingestellten gebundenen Kombis angezeigt.


Im Formularkopf baust Du 3 ungebundene Kombifelder und einen Button ("btnSuchen")mit folgenden Einstellungen ein:


Name: cmbX
Datensatzherkunft: Select ID_X, X from tbl_X  order by X
Spaltenanzahl: 2
Spaltenbreiten: 0cm;4cm
gebundene Spalte: 1


Die beiden anderen Kombis entsprechend der Tabellen- und Feldnamen anpassen.


Ereignisprozedur für das "Click"- Ereignis des Buttons:

Sub btnSuchen_Click   
Me.Filter = "FK_X = " & Me!cmbX & " and FK_Y = " & Me!cmbY & " and FK_Z = " & Me!cmbZ
Me.FilterOn=true
End Sub


Um einen neuen DS zu erstellen, bau eine weitere Schaltfläche ("btnNeu") im Form-Kopf ein mit diesem Code:
(Könnte auch anstelle des Buttons mit der Navileiste erledigt werden, oder den entspr. Navi-Tasten)

Sub btnNeu_Click()
Docmd.Gotorecord,,acNewrec
End Sub


Extra Buttons für das Speichern von neuen oder geänderten Daten ist im Grunde nicht nötig.


Wenn gewünscht, dann halt so:

Sub btnSpeichern_Click()
Docmd.Runcommand accmdSaverecord
End Sub

Offline database

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 4178
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #6 am: Mai 10, 2010, 10:18:37 »
Hallo auch,

entsprechend der Aussage von ...
Hallo,

es gibt nicht allein nur DEN Code....

...versuch ich mal meine 'Weisheit' an den Mann zu bringen :)

In der Annahme, dass dein Formular zur Eingabe von Daten dient,
befinden sich auf diesem Formular 3 Kombifelder  und ein Textfeld
Kombifelder cboX, cboY und cboZ, sowie Textfeld txtInfo.

Du wählst aus allen 3 Comboboxen Werte aus und beim Ereignis 'Nach Aktualisierung' des 3. Kombis (cboZ) läuft folgender (beispielhafter) Code ab:
Dim lngID as Long
lngID = NZ( DLookup("ID_CO","tbl_CO","FK_X=" & me.cboX & " AND FK_Y=" & Me!cboY & " AND FK_Z=" & Me!cboZ),0)

    If lngID > 0 then
        Me! txtInfo = DLookup("Info","tbl_CO","ID_CO=" & lngID)
    Else
        MsgBox "Eine neue Kombination wurde entdeckt!", vbInformation, "Kombinationen"
        Me!txtInfo.SetFocus
    End If
Dieses bewirkt, dass der Cursor auf das Infofeld gesetzt wird, wenn die Datenkombination noch nicht vorhanden ist. Andernfalls wird das txtInfo mit dem Wert aus der tbl_CO befüllt.

Das Ereignis 'Nach Aktualisieren' des txtInfo KANNST du dann noch mit folgendem Code beleben:

Dim lngID as Long
Dim db AS Database
Set db = Currentdb

lngID = NZ( DLookup("ID_CO","tbl_CO","FK_X=" & me.cboX & " AND FK_Y=" & Me!cboY & " AND FK_Z=" & Me!cboZ),0)
    If Not IsNull(Me!txtInfo) then
        if lngID = 0 then
            db.Execute "Insert into tbl_CO (FK_X, FK_Y, FK_Z, Info) Values (" & Me!cboX & ", "
                             & Me!cboY  & "," &  Me!cboZ  &  ",'" & Me!txtInfo & "')"
        Else
            db.Execute "UPDATE tbl_CO Set Info='" & me.txtInfo & "' WHERE ID_CO=" & lngID
        End If
    End If
Dies bewirkt, dass im Falle einer neuen Kombination der Datensatz gespeichert wird oder beim Vorhandensein der Kombination eine eventuelle Änderung der Info aktualisiert wird.

Alles unter der Voraussetzung, dass deine Kombifelder mit ID als gebundene Spalte und Text als Anzeigewert auf einem ungebundene Formular aufgebaut wurden.

LG

Peter
« Letzte Änderung: Mai 10, 2010, 10:20:54 von database »
Viele Grüße
Peter

Tipps und Links:
---------------------------------------------------------
1. http://www.donkarl.com
2. http://www.access-entwicklerbuch.de/2007/index.php?page=buch
3. http://www.xlam.ch/pos/rules.htm
3.a Reservierte Worte
4. http://www.functionx.com/vbaccess/index.htm
5. http://www.dbwiki.net

Nicht vergessen: Jede(r) hat mal klein angefangen!
Bitte keine Fragen per PN senden - Fragen gehören ins Forum!
 

Offline OPS

  • Access-User
  • *
  • Beiträge: 76
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #7 am: Mai 10, 2010, 10:26:16 »
Oah vielen Dank! Habe eben DF6GLs Lösung ausprobiert, und ich bin froh dass das endlich mal funktioniert aber ich werde auch Databases Lösung ausprobieren und sehen was für mich besser funktioniert.

Da sitze ich da den ganzen Freitag dran und krieg das hier in wenigen Worten mitgeteilt  ;D

Danke!
 

Offline database

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 4178
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #8 am: Mai 10, 2010, 10:30:11 »
Hi,
solltest du Zeit Lust und Laune verspüren meine Vorschläge zu testen dann bitte
Zitat
Das Ereignis 'Nach Aktualisieren' des txtInfo

noch mit der folgenden Zeile abschließend ergänzen
Set db = Nothing
 ::) ;D

LG

Peter
Viele Grüße
Peter

Tipps und Links:
---------------------------------------------------------
1. http://www.donkarl.com
2. http://www.access-entwicklerbuch.de/2007/index.php?page=buch
3. http://www.xlam.ch/pos/rules.htm
3.a Reservierte Worte
4. http://www.functionx.com/vbaccess/index.htm
5. http://www.dbwiki.net

Nicht vergessen: Jede(r) hat mal klein angefangen!
Bitte keine Fragen per PN senden - Fragen gehören ins Forum!
 

Offline OPS

  • Access-User
  • *
  • Beiträge: 76
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #9 am: Mai 11, 2010, 09:56:00 »
Ich habe da eine Frage.

lngID = NZ( DLookup("ID_CO","tbl_CO","FK_X=" & me.cboX & " AND FK_Y=" & Me!cboY & " AND FK_Z=" & Me!cboZ),0)

Die hinteren beiden Me!cbo schreibst du mit ! (ausrufezeichen), den ersten aber me.cboX (mit Punkt).
Es funktioniert, aber warum?
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23339
Re: Anzeigen und Modifizieren in einem Formular
« Antwort #10 am: Mai 11, 2010, 10:08:25 »
Hallo,


vermutlich nur vertippt…und hier keine weitere Bedeutung hat.

www.donkarl.com/?FAQ6.3