lord-x
Goto Top

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

Content-ID: 64854

Url: https://administrator.de/contentid/64854

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

verkehrsberuhigt
verkehrsberuhigt 27.07.2007 um 14:13:39 Uhr
Goto Top
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?
Lord-X
Lord-X 27.07.2007 um 14:44:33 Uhr
Goto Top
Wenn du dir unsicher bist: warum lässt
du die User nicht direkt im Formular die
Daten ändern?


erstmal danke für die Antwort.

Wie meinst du das???

Ich bin ein Anfänger in diesen Sachen. Ob du das Noob-verständlich erklären könntest.
Lord-X
Lord-X 27.07.2007 um 14:46:54 Uhr
Goto Top
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.

Wie kann ich das mit dem Eingränzen machen?
Und wie könnte ich den Konflikt mit der bereits vorhandenen KD.Nr. am Besten lösen?
verkehrsberuhigt
verkehrsberuhigt 27.07.2007 um 14:49:58 Uhr
Goto Top
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?
Lord-X
Lord-X 27.07.2007 um 17:31:13 Uhr
Goto Top
Zu a)

Mein Script soll bewirken, dass die Eingaben, die in die Felder (z.B. txtAnsprechpartner, txtTelefonnummer und txtGeburtstag) eingegeben worden sind, nach dem ButtonClick unter der dazugehörigen Kundennummer (die unter "lstKD" steht) gespeichert werden.

Also:

Es sind nur die Textboxen txtAnsprechpartner, txtTelefonnummer, txtGeburtstag für die Bearbeitung freigegeben. Andere Felder kann man in diesem Formular nicht verändern.


Zu b)

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).
jato11
jato11 27.07.2007 um 20:02:06 Uhr
Goto Top
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,
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
Lord-X
Lord-X 30.07.2007 um 10:58:45 Uhr
Goto Top
@jato11

hast du da vlt. einen BeispielCode ??
jato11
jato11 30.07.2007 um 13:57:35 Uhr
Goto Top
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