Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Datum aktualisieren mit UPDATE

Begonnen von T417, November 25, 2010, 12:36:40

⏪ vorheriges - nächstes ⏩

T417

Es ist zum davonlaufen. Ich habe diesen Code gut durchdacht erstellt, und hänge nun schon seit Tagen daran fest.
Eigendlich soll der Code das Datum auffüllen/aktualiseren. Stattdessen bekome ich überall nur leere Datumsfelder. >:(

CurrentDb.Execute ("UPDATE Haupttabelle SET Datum=DLookUp(Datum,'Haupttabelle','Kurztext=' & [Kurztext] & 'AND Datum IS NOT NULL')WHERE Sortierstufen='2' AND NOT Kurztext='NACHTRAG'")


Der Code soll das Datum an allen Datensätzen aktualisieren, wo der Kurztext identisch ist. Außer natürlich der Kurztext lautet NACHTRAG.
Zusätzlich müssen die Sortierstufen=2 sein.
Die richtigen Datensätze werden ja gefunden, jedoch immer nur mit leeren Feldern gefüllt.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

DF6GL

Hallo,


auf den schnellen Blick innerhalb Dlookup:

Hochkommata um Datum setzen
Leerzeichen vor AND setzen
Leerzeichen vor Where setzen


database

#2
Hallo,

Wenn du ein Datum an einen SQL-String übergibst muss dieses im US oder ISO-Format geschehen.
(In deinem Code Fehlen die Hochkommata bei Datum und Leerzeichen beim String zusammensetzen!)

Siehe hierzu mal da rein ...  www.donkarl.com?FAQ6.8

Liefert deine DLookup nur ein einziges Datum zurück?
Dann könntest du ja auch folgendes machen:


Dim myDatum as String

myDatum = Format(DLookUp("Datum","Haupttabelle","Kurztext='" & [Kurztext] & "' AND Datum IS NOT NULL"),  "\#yyyy\-mm\-dd\#")

CurrentDb.Execute ("UPDATE Haupttabelle SET Datum=myDatum WHERE Sortierstufen='2' AND Kurztext='" & [Kurztext] & "' AND NOT Kurztext='NACHTRAG'")



DF6GL

Hallo,

@database:


in seinem SQL-String ist Dlookup Bestandteil des SQL-Statements selber und wird nicht von "außen" (von VBA aus)  hineingesetzt. Deshalb ist m. E die Formatierung des Datums nicht nötig.

Allenfalls wäre das Überprüfen ds Dlookup-Ergebnisses mit nz() im SQL-Statement lediglich sinnvoll, bei der VBA-Code-Lösung jedoch nötig.. wobei auch [Kurztext] da unbekannt ist....   ;)

database

Hallo auch

@Franz
Da hast du natürlich recht - ich lege solche Access-eigene Funktionen nur immer gerne 'raus'.
Ich habe da bei meinem Kommentar nicht genauer drauf hingewiesen bzw. ein wenig blöd kommentiert, aber es ist eine alte Angewohnheit von mir
und stammt von negativen Erfahrungen nach Umlegen eines großen Projekts auf SQL-Server.

Was mir aber dennoch ein wenig seltsam scheint ist '[Kurztext]' - ich habe das eigentlich mehr oder weniger blind kopiert - nur wenn das ein Tabellenfeld darstellen soll (was zu befürchten ist) wird's Brösel geben, Kurztext kann sich in der WHERE-Klausel ja nicht mit sich selbst vergleichen - irgendwie scheint mir das nicht ganz rein zu sein.
Handelt es sich um ein Formularfeld, sollte das dementsprechend auf Me!Kurztext geändert werden.


T417

Hallo,

Ich bin zumindest nicht der einzige der sich den Kopf zerbricht. ;)
Ich habe Datum jetzt wieder mit Hochkomma bestückt. Jetzt ändert UPDATE keinen Datensatz mehr. ???


Grüße
T.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

DF6GL

Hallo, 

hast Du auch die anderen Änderungen gemacht??

Befindet sich denn das Feld "Datum" in Tabelle Haupttabelle ...


ähh,,  merke erst jetzt, dass das Ganze Unsinn ist.


Wozu brauchst Du Dlookup überhaupt, das das Datum aus derselben Tabelle ausliest in der Du das Datum setzen willst?


Willst Du da Datumsangaben "umschichten"??




T417

Äähhh,
bevor ich jetzt ein Denkfehler vertiefe, schreib ich besser den Hintergrund auf.

In meiner Haupttabelle hab ich in vielen Datensätzen kein Datum. Bei diesen Datensätzen ist aber der Kurztext überall identisch.
Jetzt will ich überall dort, wo das Datum fehlt, das Datum eines anderen Datensatzes ermitteln, dessen Kurztext mit dem andern Datensatz identisch ist.


Verständlicher?
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

database

#8
Hallo,

wenn du meinen Codevorschlag verwenden willst, musst du folgende Änderung durchführen - Schmarrn, das habe ich übersehen:

CurrentDb.Execute ("UPDATE Haupttabelle SET Datum=" & myDatum & " WHERE Datum IS NULL AND Sortierstufen='2' AND Kurztext='" & [Kurztext] & "' AND NOT Kurztext='NACHTRAG'")

Was ist [Kurztext] ... ein Tabellenfeld oder ein Formularfeld?
Wenn es ein Formularfeld ist, was ich hoffe und entsprechend meinem Vorschlag notwendig ist, dann ändere das auf Me!Kurztext
Damit du das benötigte Datum aus der Tabelle fischen kannst, muss wie beschrieben der Vergleich mit Kurztext stattfinden.
Der Vergleichstext kann aber nicht gleichzeitig aus einem anderen Tabellenfeld bezoden werden sondern muss der DLookup-Funktion zugeführt werden.
Am Besten aus einem Formularfeld - daher auch mein Hinweis auf Me!Kurztext.

In diesem Formularfeld steht also der zu suchende Begriff z.B. XYZABC - Die DLookup-Funktion liefert das Datum, das in einem
Datensatz zu finden ist, in dem Kurztext dem Muster XYZABC entspricht und das Datumsfeld NICHT Leer ist.
Dieses Datum formatierst du dann mit der Format-Anweisung in meinem Beispiel und übergibst es an den SQL-String,
der dann alle jene Datensätze findet deren Datumsfeld leer ist, im Feld Kurztext XYZABC stehen haben, das Feld Sortierstufen 2 enthält
und der Kurztext nicht 'NACHTRAG' lautet. In diesen Datensätzen wird dann das Datum aus myDatum eingetragen.

Das sollte doch so laufen...

DF6GL

#9
Hallo,

befürchte da Tabellen-/Daten-Chaos und wir fummeln an Symptomen herum....    ;)


per reinem SQL
ZitatCurrentDb.Execute "UPDATE Haupttabelle SET [Datum]=nz(DMax('[Datum]','Haupttabelle','[Kurztext]=' & [Kurztext] ),Date())   WHERE [Sortierstufen]='2' AND NOT [Kurztext]='NACHTRAG'"

Dmax deshalb , damit wir nicht "zufällig" einen "leeren" Wert erhalten, wenn andere Datumswerte bei der entspr. Bedingung existieren. Und falls mal gar kein Datum existiert, dann nehmen wir halt mit nz() das heutige..  
Weiterhin:
Ist "Sortierstufen" wirklich vom Datentyp Text in der Tabelle??
Ist "Datum" wirklich vom Datentyp Datum/Uhrzeit in der Tabelle??


T417

@database: Deine Einbindung von DlookUp klappt so rum nicht.

@DF6GL: Es existiert definitiv irgendwo ein Fehler. Ich hab dein Code ausprobiert. Eigendlich müsste er die Datumsfelder mir irgendein Datum füllen, aber er macht nichst.

Sortierstufen ist Text, Datum ist Datum/Uhrzeit, alle Daten stehen in der Haupttabelle.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

DF6GL

Hallo,

ja, ok, kann sein, dass das Kriterium in Hochkommata gesetzt werden muß, weil das hier nun wieder ein" String-Zusammenbau" innerhalb eines Funktionsargumentes ist...

...,'[Kurztext]='' & [Kurztext] & '' ),Date()) ...

''  = jeweils zwei Hochkommata

T417

Das wars auch nicht.
Würde mich eigendlich schon interessieren, warum bei mir alle Datum überschrieben werden, wenn ich mein Start-Code (s.o.) anwende, ansonsten aber nichst passiert. 
Obwohl,...wenn Dlookup NULL liefert, wenn er bestimmte Argumente nicht findet, würde es zumindestens DAS erklären.

Damit bliebe nur das Rätsel, warum der aktuelle Code nicht funktioniert.  ???

Im selben Programmierstil hab ich einige andere UPDATE-Anweisungen problemlos über die Bühne gebracht, aber ausgerechnet hier scheiterts. Wenn ich bloß wüsste weshalb.  >:(
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

DF6GL

Hallo,

noch'n Versuch:


CurrentDb.Execute "UPDATE Haupttabelle SET [Datum]=nz(DMax(""[Datum]"",""Haupttabelle"",""[Kurztext]='"" & [Kurztext]  & ""'""),Date())   WHERE [Sortierstufen]='2' AND NOT [Kurztext]='NACHTRAG'"


database

Hallo,

Zitat@database: Deine Einbindung von DLookUp klappt so rum nicht.

...und was klappt dabei so rum nicht nicht?
Liefert kein Datum, erzeugt Fehler oder was?
Wenn DLookup ausgeführt wird MUSS in diesem [Kurztext] etwas enthalten sein - ist das so?
Leider hast du bis jetzt noch immer nicht verraten ob das [Kurztext] nun ein Formfeld ist oder nicht.