Problem mit Recordset.Update
Hallo Leute.
Folgendes Problem:
Ich möchte über ein Formular Daten in einer Tabelle ändern.
Dabei soll der Formular nach einer benutzerdefinierten Kundennummer suchen ( das klappt bestens). Dann kann der Benutzer z.B. "Anmerkungen" ändern und mit Klick auf den Button "Speichern" die Änderung in Tabelle übernehmen (bzw. die Anmerkung bei dem jeweiligen Kunden ändern).
Es kommt jedoch zu einer Fehlermeldung:
http://img514.imageshack.us/img514/2158/3022em0.png
.
Wobei in meiner Tabelle "Kundenstamm" nur die Kundennummer auf Index "Ja (ohne Duplikate)" gesetzt ist.
Primärschlüssel ist nicht definiert.
Mein Code für den "Speichern"-Button sieht wie folgt aus:
' ---------------------------------------------------------------------------
Private Sub btnKDedit_Click()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Kundenstamm", dbOpenDynaset)
rs.Edit
rs("Kundennr") = Me!lstKD
rs("Firma") = Me!txtFirma
rs("Firma2") = Me!txtFirma2
rs("Ansprechpartner") = Me!txtAnsprechpartner
rs("Telefonnummer") = Me!txtTelefonnummer
rs("Strasse") = Me!txtStrasse
rs("PLZOrt") = Me!txtPLZOrt
' rs("ID") = Me!txtID
rs("Tour") = Me!txtTour
rs("Wochentag") = Me!txtWochentag
rs("SelectDoc") = Me!chkSD
rs("Autoteilepilot") = Me!chkATP
rs("Geburtstag") = Me!txtGeburtstag
rs("Anmerkungen") = Me!txtAnmerkungen
rs.Update
rs.Close
Set rs = Nothing
MsgBox "Die Änderung wurde gespeichert.", vbOKOnly, "Datensatzänderung"
End Sub
' ---------------------------------------------------------------------------
Ich benutze Access2003, falls das weiterhilft.
Bitte helft mir.
Da ich eine Noob in Sachen OfficeVBA bin, komme ich da ech nincht weiter.
Danke im Vorraus
Folgendes Problem:
Ich möchte über ein Formular Daten in einer Tabelle ändern.
Dabei soll der Formular nach einer benutzerdefinierten Kundennummer suchen ( das klappt bestens). Dann kann der Benutzer z.B. "Anmerkungen" ändern und mit Klick auf den Button "Speichern" die Änderung in Tabelle übernehmen (bzw. die Anmerkung bei dem jeweiligen Kunden ändern).
Es kommt jedoch zu einer Fehlermeldung:
http://img514.imageshack.us/img514/2158/3022em0.png
.
Wobei in meiner Tabelle "Kundenstamm" nur die Kundennummer auf Index "Ja (ohne Duplikate)" gesetzt ist.
Primärschlüssel ist nicht definiert.
Mein Code für den "Speichern"-Button sieht wie folgt aus:
' ---------------------------------------------------------------------------
Private Sub btnKDedit_Click()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Kundenstamm", dbOpenDynaset)
rs.Edit
rs("Kundennr") = Me!lstKD
rs("Firma") = Me!txtFirma
rs("Firma2") = Me!txtFirma2
rs("Ansprechpartner") = Me!txtAnsprechpartner
rs("Telefonnummer") = Me!txtTelefonnummer
rs("Strasse") = Me!txtStrasse
rs("PLZOrt") = Me!txtPLZOrt
' rs("ID") = Me!txtID
rs("Tour") = Me!txtTour
rs("Wochentag") = Me!txtWochentag
rs("SelectDoc") = Me!chkSD
rs("Autoteilepilot") = Me!chkATP
rs("Geburtstag") = Me!txtGeburtstag
rs("Anmerkungen") = Me!txtAnmerkungen
rs.Update
rs.Close
Set rs = Nothing
MsgBox "Die Änderung wurde gespeichert.", vbOKOnly, "Datensatzänderung"
End Sub
' ---------------------------------------------------------------------------
Ich benutze Access2003, falls das weiterhilft.
Bitte helft mir.
Da ich eine Noob in Sachen OfficeVBA bin, komme ich da ech nincht weiter.
Danke im Vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64854
Url: https://administrator.de/contentid/64854
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
8 Kommentare
Neuester Kommentar
Ich sehe offengestanden gar nicht, wie du das Recordset auf den von dir gewünschten Datensatz eingrenzt.
Falls ich das Script richtig lese, wird der erste (?) oder ein beliebiger (?) Datensatz geändert...
Und beim Speichern kommt es natürlich zu einem Indexkonflikt weil die Kundennummer bereits vorhanden ist.
Wenn du dir unsicher bist: warum lässt du die User nicht direkt im Formular die Daten ändern? Wofür soll ddieser Umweg über eine Schaltfläche gut sein?
Falls ich das Script richtig lese, wird der erste (?) oder ein beliebiger (?) Datensatz geändert...
Und beim Speichern kommt es natürlich zu einem Indexkonflikt weil die Kundennummer bereits vorhanden ist.
Wenn du dir unsicher bist: warum lässt du die User nicht direkt im Formular die Daten ändern? Wofür soll ddieser Umweg über eine Schaltfläche gut sein?
a) Versuche mir zu erklären was Dein Script bewirken soll.
b) Du kannst Tabellen mit Hilfe von Formularen direkt bearbeiten. Bei Access wird jede Änderung, die du in einem Formular vornimmst, dass direkt mit einer Tabelle verknüpft ist, sofort bei der Eingabe (präziser beim Verlassen des Feldes oder des Datensatzes) gespeichert. Hast Du schon einmal den Formularassistenten ausprobiert?
b) Du kannst Tabellen mit Hilfe von Formularen direkt bearbeiten. Bei Access wird jede Änderung, die du in einem Formular vornimmst, dass direkt mit einer Tabelle verknüpft ist, sofort bei der Eingabe (präziser beim Verlassen des Feldes oder des Datensatzes) gespeichert. Hast Du schon einmal den Formularassistenten ausprobiert?
Wie kann ich es dann so einrichten, dass der
User die Kundennummer eingeben kann und dazu
gehörigen Daten in den entsprechenden
Felden angezeigen lassen kann (z.B.
Firmenname in "txtFirma",
Telefonnummer in "txtTelefonnummer"
usw.) ohne die Leiste am unteren Rand des
Formular (die mit DS-Nummer) zu verwenden
(diese wollte ich dann sowieso ausblenden).
Hallo Lord-X,User die Kundennummer eingeben kann und dazu
gehörigen Daten in den entsprechenden
Felden angezeigen lassen kann (z.B.
Firmenname in "txtFirma",
Telefonnummer in "txtTelefonnummer"
usw.) ohne die Leiste am unteren Rand des
Formular (die mit DS-Nummer) zu verwenden
(diese wollte ich dann sowieso ausblenden).
ich nutze dafür ein Suchfeld in meinem Formular.
Nach verlassen des Feldes wird ein Makro ausgeführt.
Meistens in der Art:
Gehe zu Steuerelement Kundennummer, Suchen Datensatz = Suchfeld
Viele Grüße
Torsten
Einen Code kann ich Dir leider nicht geben, da ich kein Programmierer bin.
Es gibt folgende Möglichkeit:
Im Formular erstelle ein Textfeld, das bekommt den Namen "Suchen".
In den Eigenschaften des Feldes wird bei "Nach Aktualisierung" das Makro aufgerufen.
Trage hier den Namen des Makros ein z.B. "NameSuchen"
Erstelle ein Makro.
Bei Aktion wähle "Gehe zu Steuerelement" aus.
Trage unten bei "Steuerelemtname" "Name" ein (ohne Anführungszeichen)
Nächste Aktion "Suchen Datensatz"
Trage unten bei "Suchen nach" "[Suchen]" ein (ohne Anführungszeichen mit Klammer)
Wähle unten bei "Vergleichen" "Teil des Feldinhaltes" aus
Wähle unten bei "Groß u Kleinschreibung" "Nein" aus
Wähle unten bei "Suchen" "Alles" aus
Wähle unten bei "Wie formatiert" "Nein" aus
Wähle unten bei "Nur aktuelles Feld" "Ja" aus
Wähle unten bei "Am Anang beginnen" "Ja" aus
Nächste Aktion "Tastaturbefehle"
Trage unten bei "Suchen nach" "{F9}" ein (ohne Anführungszeichen mit Klammer)
Trage unten bei "Warten" "Nein" ein (ohne Anführungszeichen)
Makro speichern als "NameSuchen" (ohne Anführungszeichen)
Wenn Du jetzt einen Namen oder den Teil eines Namens im Feld Suchen eingibst sollte
der entsprechende Kunde aufgerufen werden.
Achtung! Ich verwende Access 2000 bei Access 2003 könten die Bezeichnungen etwas
anders aussehen.
Viele Grüße
Torsten
Es gibt folgende Möglichkeit:
Im Formular erstelle ein Textfeld, das bekommt den Namen "Suchen".
In den Eigenschaften des Feldes wird bei "Nach Aktualisierung" das Makro aufgerufen.
Trage hier den Namen des Makros ein z.B. "NameSuchen"
Erstelle ein Makro.
Bei Aktion wähle "Gehe zu Steuerelement" aus.
Trage unten bei "Steuerelemtname" "Name" ein (ohne Anführungszeichen)
Nächste Aktion "Suchen Datensatz"
Trage unten bei "Suchen nach" "[Suchen]" ein (ohne Anführungszeichen mit Klammer)
Wähle unten bei "Vergleichen" "Teil des Feldinhaltes" aus
Wähle unten bei "Groß u Kleinschreibung" "Nein" aus
Wähle unten bei "Suchen" "Alles" aus
Wähle unten bei "Wie formatiert" "Nein" aus
Wähle unten bei "Nur aktuelles Feld" "Ja" aus
Wähle unten bei "Am Anang beginnen" "Ja" aus
Nächste Aktion "Tastaturbefehle"
Trage unten bei "Suchen nach" "{F9}" ein (ohne Anführungszeichen mit Klammer)
Trage unten bei "Warten" "Nein" ein (ohne Anführungszeichen)
Makro speichern als "NameSuchen" (ohne Anführungszeichen)
Wenn Du jetzt einen Namen oder den Teil eines Namens im Feld Suchen eingibst sollte
der entsprechende Kunde aufgerufen werden.
Achtung! Ich verwende Access 2000 bei Access 2003 könten die Bezeichnungen etwas
anders aussehen.
Viele Grüße
Torsten