dr.cornwallis
Goto Top

Datensatz hinzufügen, nicht überschreiben Access

Liebe Gemeinde,

ich habe folgenden Code (bei Button klick):

 DoCmd.RunSQL "UPDATE Korridor_Daten SET Kommentar = '" & Date & ": " & Me.txtComment.Value & "' WHERE PersNr=" & Me.PersNrFeld.Value  

Wähle ich mit diesem Code einen anderen Wert im Kombifeld aus, so wird der alte Wert im Table überschrieben, wie muss der Code aussehen damit der Wert in den Datensatz hinzugefügt wird, also nicht überschrieben.


Besten Dank für eure Hilfe!


Gruß

Dr.

Content-ID: 308965

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

Ausgedruckt am: 25.11.2024 um 00:11 Uhr

atze187
atze187 05.07.2016 aktualisiert um 15:05:43 Uhr
Goto Top
Selbst ist der Mann: INSERT
129813
Lösung 129813 05.07.2016 um 15:06:39 Uhr
Goto Top
INSERT INTO

DoCmd.RunSQL "INSERT INTO Korridor_Daten (Kommentar,PersNr) VALUES('" & Date & ": " & Me.txtComment.Value & "','" & Me.PersNrFeld.Value & "')"  
Regards
Dr.Cornwallis
Dr.Cornwallis 05.07.2016 um 15:09:00 Uhr
Goto Top
Ja soweit war ich auch schon, als wahrer VBA Anfänger frage ich mich wie ich das "from" Statement behandeln soll, es soll ja der Wert vom Kombifeld hinzugefügt werden.

Ich habe es schon folgendermaßen probiert:

DoCmd.RunSQL "INSERT INTO Korridor_Daten SET Kommentar = '" & Date & ": " & Me.txtComment.Value & "' WHERE PersNr=" & Me.PersNrFeld.Value  

klappt nicht....

was mache ich da falsch?


Danke!
129813
129813 05.07.2016 aktualisiert um 15:14:19 Uhr
Goto Top
Zitat von @Dr.Cornwallis:
was mache ich da falsch?
The WHERE Clause is not possible inside an INSERT INTO statement, and your structure for an insert is totally wrong, look above. You cannot simply exchange the two statements face-smile they are totally different.
Dr.Cornwallis
Dr.Cornwallis 05.07.2016 um 15:15:25 Uhr
Goto Top
HI,

gerade getestet mit dem oberen Code, leider fügt er einfach einen neuen Datensatz in den Table ein, ich möchte aber dass dies im Feld hinzugefügt wird.

Ist das überhaupt ohne where Klausel überhaupt möglich?

Gruß

Dr.
129813
129813 05.07.2016 aktualisiert um 15:20:09 Uhr
Goto Top
Zitat von @Dr.Cornwallis:
gerade getestet mit dem oberen Code, leider fügt er einfach einen neuen Datensatz in den Table ein, ich möchte aber dass dies im Feld hinzugefügt wird.
??? I don't know what you mean sorry.
Ist das überhaupt ohne where Klausel überhaupt möglich?
Where Clause is not allowed in an INSERT INTO statement like I said ... this is absolutely wrong thinking!

Insert into creates a new record in a table! So "where" does not make any sense because you are not updating a record.
atze187
atze187 05.07.2016 um 15:19:18 Uhr
Goto Top
Steht alles in der MSDN. Mir fehlt der genaue Kontext deiner Anwendung um es am Beispiel zeigen zu können.
Dr.Cornwallis
Dr.Cornwallis 05.07.2016 um 15:28:29 Uhr
Goto Top
Ok, ich probiers mal zu erklären:

es werden täglich Datensätze in den Table importiert, 1 Feld Personalnummer, 2. Feld Datum, 3. Feld Kommentar

Dh. es kann eine pers.Nr mehrmals vorkommen, die Datensätze unterscheiden sich nur durch das Datum(Feld 2)

Nun habe ich ein Formular, in diesem ist ein Kombifeld für die PersNr und eins für den Kommentar.
wie ich jetzt weiß(thx highload face-wink) kann ich da die Where Klausel vergessen.

Ist es möglich dass man den Kommentar in den Datensatz mit der Pers.Nr(funktioniert soweit) und dem aktuellen Datum eingefügt wird?

Also als Beispiel:

Heute 5.7.2016, ich füge ein Kommentar in den Datensatz ein, es soll aber nur in dem Datensatz mit dem gleichen Datum(aktuelles Datum) in Feld 2 eingefügt werden, die anderen sollen leer bleiben.
6.7.2016, ich füge wieder einen Kommentar auf die gleiche Pers.Nr ein, diesmal soll dieser aber nur in den Datensatz mit 6.7.2016 eingefügt werden.

Danke für eure Hilfe
Pjordorf
Pjordorf 05.07.2016 um 15:36:10 Uhr
Goto Top
Hallo,

Zitat von @Dr.Cornwallis:
Heute 5.7.2016, ich füge ein Kommentar in den Datensatz ein, es soll aber nur in dem Datensatz mit dem gleichen Datum(aktuelles Datum) in Feld 2 eingefügt werden, die anderen sollen leer bleiben.
Entweder fügst du einen neuen Datensatz (PersNr, Datum, Kommentar) deiner Tabelle hinzu (Insert) oder du änderst einen schon bestehenden Datensatz (Update). Sind denn schon heute Datensätze (leere) mit Datum von Morgen vorhanden?


6.7.2016, ich füge wieder einen Kommentar auf die gleiche Pers.Nr ein, diesmal soll dieser aber nur in den Datensatz mit 6.7.2016 eingefügt werden.
Entweder einen neuen Datensatz oder du veränderst einen bestehenden Datensatz.

Nur vom einfügen eines Kommentars wird das noch lange kein Hinzufügen eines neuen Datensatzes. Das ist Ändern (Update) ansonsten Insert

Gruß,
Peter
129813
129813 05.07.2016 um 15:36:23 Uhr
Goto Top
So you want an update only with an additional condition?
DoCmd.RunSQL "UPDATE Korridor_Daten SET Kommentar = '" & Date & ": " & Me.txtComment.Value & "' WHERE PersNr=" & Me.PersNrFeld.Value & " AND Datum = #" & Me.FeldDatum.Value & "#"  
Biber
Biber 05.07.2016 aktualisiert um 15:48:26 Uhr
Goto Top
Moin Dr.Cornwallis,

dazu müssten wir doch den identifizierenden Schlüssel (primary key) deiner Tabelle kennen.
Wenn der PK nicht nur auf "PersNr" liegt, wie alle nach deinen Beispielstatements vermutet haben, sondern auf "PersNr, Datum" oder gar auf einer unsäglichen AutoID, dann geht es.

Dann vergiss alles, was bisher zum Thema "WHERE-Clause weglassen" gesagt wurde und mach ein UPDATE auf den Satz mit PersNr und dem richtigen Datum.
"... WHERE PersNr=" & Me.PersNrFeld.Value & " and Datum= Date()"

Aber sag doch erstmal, was denn nun der PK der Tabelle ist.

Grüße
Biber

P.S. Obsolet, hat auch highload schon geschrieben.
atze187
atze187 05.07.2016 um 15:44:06 Uhr
Goto Top
Ich weiß zwar jetzt grundsätzlich was deine Anwendung macht, aber befürchte da liegt einiges mehr im Argen als ich anfänglich vermutet hab.
atze187
atze187 05.07.2016 um 15:45:27 Uhr
Goto Top
Ich weiß zwar jetzt grundsätzlich was deine Anwendung macht, aber befürchte da liegt einiges mehr im Argen als anfänglich zu vermuten war.
Dr.Cornwallis
Dr.Cornwallis 05.07.2016 um 15:49:31 Uhr
Goto Top
Zitat von @129813:

So you want an update only with an additional condition?
> DoCmd.RunSQL "UPDATE Korridor_Daten SET Kommentar = '" & Date & ": " & Me.txtComment.Value & "' WHERE PersNr=" & Me.PersNrFeld.Value & " AND Datum = #" & Me.FeldDatum.Value & "#"  
> 


No, i want to add the Comment to the Record with the actual Date in Field 2(Table):

It Looks like this(Table):
access

and the form(there u can choose the comment + PersNr)
forms

now i want to add a Comment, if i add the comment at 01.05.2016, it should be added to the record with the same Date in it(01.05.2016). The other one should be stay empty.

Is that possible?


Thanks a lot!
Dr.Cornwallis
Dr.Cornwallis 05.07.2016 um 15:55:37 Uhr
Goto Top
Zitat von @Biber:

Moin Dr.Cornwallis,

dazu müssten wir doch den identifizierenden Schlüssel (primary key) deiner Tabelle kennen.
Wenn der PK nicht nur auf "PersNr" liegt, wie alle nach deinen Beispielstatements vermutet haben, sondern auf "PersNr, Datum" oder gar auf einer unsäglichen AutoID, dann geht es.

Dann vergiss alles, was bisher zum Thema "WHERE-Clause weglassen" gesagt wurde und mach ein UPDATE auf den Satz mit PersNr und dem richtigen Datum.
"... WHERE PersNr=" & Me.PersNrFeld.Value & " and Datum= Date()"

Aber sag doch erstmal, was denn nun der PK der Tabelle ist.

Grüße
Biber

P.S. Obsolet, hat auch highload schon geschrieben.

Prim Key ist ein Auto Wert, sorry muss jetzt los, bin am Abend oder spätestens morgen früh wieder online!


Vielen Dank für eure Hilfe !
129813
129813 05.07.2016 aktualisiert um 16:27:58 Uhr
Goto Top
So you need to check if there is already a matching entry in the table and do an update if yes or an insert if no entry exists.
Dim v As Variant, strSQL As String
v = DLookup("ID", "Korridor_Daten", "Periode = Date() AND PersNr = " & Me.PersNrFeld.Value)  
If v <> vbNull Then
    strSQL = "UPDATE Korridor_Daten SET Kommentar = '" & Me.txtComment.Value & "' WHERE PersNr=" & Me.PersNrFeld.Value & " AND Periode = Date()"  
Else
    strSQL = "INSERT INTO Korridor_Daten (Periode,PersNr,Kommentar) VALUES(Date()," & Me.PersFeld.Value & ",'" & Me.txtComment.Value & "')"  
End If
DoCmd.RunSQL strSQL
Biber
Biber 05.07.2016 aktualisiert um 16:47:35 Uhr
Goto Top
Moin highload,

just to complement your solution: guess the TO wants to update not only records describing the current date, but any desired date.
So for example he might wish to update the record PersNr 123456 based on July, 13th or what day ever he had choosen with a comment.

So your first attempt - using Me.FeldDatum rather than the current date Date() - seems to be closer to the solution:

.... & " AND Datum = #" & Me.FeldDatum.Value & "#"

Grüße
Biber
129813
129813 05.07.2016 aktualisiert um 17:00:07 Uhr
Goto Top
Hi @Biber,
i didn't see any input field for a date in his form so i guess his last statement:
if i add the comment at 01.05.2016, it should be added to the record with the same Date in it(01.05.2016).
leads to: "I want to add the comment to the todays date record". Why should someone select a date for his comment he is writing jsut in time face-smile.

But i think he has enough solutions to solve his "problem" now face-smile

Regards
Dr.Cornwallis
Dr.Cornwallis 05.07.2016 aktualisiert um 17:16:07 Uhr
Goto Top
@Biber:

nein, ich habe kein Kombifeld für das Datum, ich möchte wenn ich einen Kommentar anfüge, dass dieser an den Datensatz der das aktuelle Datum beinhaltet angefügt wird(UPDATE), füge ich am zB am 1.5.2016 einen Kommentar ein, dann soll dieser an den Datensatz mit der PersNr und diesem Datum angefügt werden(in das Kommentar Feld).
Es wird in der Praxis pro Tag max. 1 Kommentar angefügt.
Es soll dadurch eine History entstehen die ich dann mit einer Abfrage realisiere, da kann man dann sehen:

zB. PersNr. 111111:

1.5.2016 - Maßnahme 1 getroffen
4.5.2016 - Maßnahme 2 getroffen
20.8.2016 - Maßnahme 5 getroffen
etc..

Damit können dann die Benutzer sehen, wann welche Maßnahme getroffen wurde.

Aber ich glaube highloads Code ist dafür richtig, kann es aber erst morgen testen

Gruß und danke

Dr.

Ps: Stelle gerade fest dass meine Überschrift nicht zum gewünschten Ziel passt, es sollte eher heißen:

Wert in Feld anfügen/hinzufügen, nicht überschreiben.