Suche Lösung um Werte von einem Feld in ein anderes zu archivieren

Hyper Lord

Mitglied
Hallo
mein Problem: Tabelle Feld Ergebnis, Feld Historie Ergebnisse

im Feld Ergebnis wird ein Wert Text oder Zahl eingegeben, dieser soll in das Feld Historie kopiert werden, nach einer Weile gibt es ein neues Ergebnis, es wird wieder eingetragen und soll aber dem Feld Historie als kopie angefügt werden ohne den letzen Wert zu überschreiben.
Ich habe den ganzen Tag über Google gesucht, habe aber immer nur was gefunden was aus mehreren Zellen ein ergebnis zusammen fügt, das grosse Problem ist zu verhindern das access das Archivierungsfeld überschreibt, habe mir auch einen VBA Code gebastelt, naja eher geflickt aber der funktioniert nicht richtig, er kopiert das zwar in das Historie Feld fügt ein Komma an aber überschreibt trotzdem noch!
hat jemand vielleicht eine Lösung für mich, bin gerade erst am lernen und habe von vba noch net wirklich ahnung, vermute aber mal das geht nur per vba

Code:
Function Werte_AfterUpdate(strWerta As String)
    Dim Inhalt As String
    Inhalt = " "
    If IsNull(strWerta) Then
    Exit Function
    Else
        If IsMissing(Inhalt) Then
        Inhalt = strWerta
        Else
        Inhalt = Inhalt & ", " & strWerta
        End If
    End If
    Werte_AfterUpdate = Inhalt
    
End Function
also mein gedanke war als Kriterium ne funktion im Feld Historie, die idee war einfach das was im feld ergebnisse steht anzufügen, aber ich weiss a. nicht wie ich den wert der Historie in eine Variable packe (hatte es schon mit 2. Wert in der funktion versucht, ging aber irgendwie nicht) damit die function den wert anfügen kann und b. das letzte Ergebnis kann über direkte Eingabe oder durch import verändert werden, also muss der wert gesichert werden sobald er eingegeben wurde...schwitz... ich hab echt irgendwie gerade ein Brett vorm Kopf oder es ist noch zu kompliziert für mich
vielen Dank im Voraus für eure Mühe
Gruss Wolf

ps hatte sowas ähnliches schonmal gefragt und den Beitrag übereilt geschlossen, dieser Vorschlag funktionierte leider nicht so wie ich das bräuchte, aber ich hatte mich da sehr unklar ausgedrückt und stand etwas unter druck.
http://www.tutorials.de/office-anwe...chte-immer-nur-den-neusten-wert-anzeigen.html
 
Zuletzt bearbeitet von einem Moderator:
So ganz verstehe ich dein Problem nicht, aber mir ist eine Stelle in deinem Code aufgefallen, wo ich vermute, dass du etwas anderes machen möchtest, als das, was es eigentlich tut... Hierbei handelt es sich um die IsMissing Funktion... IsMissing besagt:
Use the IsMissing function to detect whether or not optional Variant arguments have been provided in calling a procedure. IsMissing returns True if no value has been passed for the specified argument; otherwise, it returns False.
Es fängt schon dabei an, dass "Inhalt" bei dir kein Argument der Funktion ist! Und Inhalt müsste hier ein optionaler Parameter sein...

In Inhalt soll später der Aktuelle Feldinhalt kommen, " " ist nur temporär, soweit korrekt? Daher denke ich, möchtest du an der Stelle von IsMissing nur überprüfen, ob irgendeine Form von Text in dem Feld steht, dabei sollen Leerzeichen nicht beachtet werden. Dies könnte so aussehen:
Code:
If IfTrim(Inhalt) = "" Then 'Trim entfernt alle voran- und nachgestellten Leerzeichen

Wann wird deine Funktion aufgerufen?
 
hi danke für die antwort

also inhalt habe ich nur so reingeschrieben, aber das ist auch mein problem, ich weiss nicht wie ich den vorhandenen inhalt der aktuellen zelle prüfe, also inhalt sollte den aktuellen inhalt des Feldes darstellen und Werta soll der Inhalt des Feldes sein wo der Wert geholt wird isMissing sollte nur prüfen ob was in dem Feld steht, ich hatte vorher Werta- Ergebnis und Wertb- Historie als Parameter in der funktion, aber das hat auch nicht gefunkt, im Prinzip wollte ich mit inhalt den Inhalt des Feldes ansprechen, aber irgendwie passt das net, also gedacht war es so Werta nehmen feld inhalt prüfen, wenn leer dann einfach rein damit und dein Trimm das passt wunderbar dazu, wenn nicht leer dann nehme Feldinhalt und setze komma und leerz. und füge an.... mhmdas klingt ziemlich einfach, aber wenn ich das in code umformulieren soll... schwitz

und das ganze Problem ist: Es gibt eine Tabelle ID Fa Adresse usw. ... und ein Feld Ergebnis, dieses Feld wird immer aktualisiert (Bsp Ergebnisfeld - Termin für a4 -) es werden ca 3-6 ergebnisse hinzugefügt, dazu gibt es ein Feld Namens Historie (Ergebnisse), jetzt muss ich dafür sorgen das der Inhalt vom Feld Ergebnisse in das Feld Historie gespeichert wird, so das beim nächsten Import(Abfrage) das Ergebnis nicht verloren geht. Das HistorieFeld ist ein MemoFeld und soll das Ergebnis Archivieren und das nächste Ergebnis hinzufügen und den alten Wert nicht überschreiben.

Bsp: Ergebnis - Termin bla
historie (ergebnisse) Termin bla
neues Ergebnis - Termin BlaBlub
Historie (Ergebnisse) Termin bla, Termin BlaBlub
 
Du brauchst in VBA ein Objekt der Tabelle, auf welchem du dann Excute ausführen kannst. Execute erwartet ein Query-Statement, wo du Update verwenden kannst.
 
mhm ok, gibt es vielleicht ne einfacherer Lösung für das Problem?
Falls ich das wiedererwartend mit excute hinbekomme wo löse ich die funktion aus, vielleicht beim import?
und noch ne doofe Frage, ich schaffe es mit meiner funktion werta in das richtige Feld zu schreiben, ich weiss nur nicht wie ich prüfe ob im Feld was drin steht, momentan
löse ich die Function in ner UpdateAbfrage aus
 
Ich bringe hier mal eine komplett anderen Vorschlag an.

Warum erstellst du für die Angaben nicht einfach eine separate Tabelle die du über die ID mit der Adresse verknüpfst?

In diese Tabelle kannst du dann die ganzen Zahlen, Texte oder was auch immer eintragen. Dann in einem zusätzlichen Feld das Datum und die Uhrzeit dazu und du kannst es sortieren wie du es haben willst.
 
ja das wollte ich schon machen, aber es wird so verlangt, sie brauchen nur die ergebnisse archiviert in dem memo feld datum und sowas ist uninteressant.
ich hab ne andere idee gehabt und auch was gefunden:

aktualisierungsabfrage - [Historiefeldmemo] & ChrW(13) & ChrW(10) & [Ergebnisfeld]
es funktioniert nicht, er macht ne inputbox draus und fordert mich auf Parameter einzugeben
ich hab es auch ausführlich geschrieben, mit tabellenname vorne dran hat auch nicht gefunkt
hbt ihr vielleicht ne Idee warum

das ganze gab es für ein formular im internet, da stand es so
[memofeld] & ChrW(13) & ChrW(10) & forms!Formularname!Feldname
mit der anweisung eine aktaliesirungsabfrage zu machen mit dem memofeld und die formel in aktualisieren eintragen

so habe nochmal ne funktion gebastelt

Code:
Function MemoArchiv(strSav As String)
    Dim i As String
    Dim x As Variant
    i = Mid(strSav, 1)
    x = " "
    If IsNull(i) Then
        Exit Function
    Else
        x = x & Chr(13) & Chr(10) & i
    End If
    MemoArchiv = x
End Function

diese funktion wollte ichj unter aktualisieren aufrufen, access actualisiert auch was, nur was ...,
wenn ich die funktion bebugge läuft sie und zeigt an was sie soll, ich habe eine ähnliche function um strings zu prüfen, die funktioniert wunderbar und ist auch fast genauso aufgebaut, kann das vielleicht was mit dem memofeld zusammenhängen?
ok das hab ich ausgeschlossen, irgendwas stimmt nicht ganz mit der funktion, könntet ihr mir ein Tipp geben warum diese function so nicht den Wert weitergibt
wenn es hilft könnte ich die ander funktion mal posten von der ich das abgeleitet habe

danke schonmal für eure Geduld und Mühe
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück