Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: T417 am November 25, 2010, 12:36:40

Titel: Datum aktualisieren mit UPDATE
Beitrag von: T417 am November 25, 2010, 12:36:40
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.
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: DF6GL am November 25, 2010, 12:45:26
Hallo,


auf den schnellen Blick innerhalb Dlookup:

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

Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: database am November 25, 2010, 12:52:44
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 (http://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'")


Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: DF6GL am November 25, 2010, 13:47:21
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....   ;)
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: database am November 25, 2010, 14:01:25
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.

Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: T417 am November 25, 2010, 14:40:00
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.
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: DF6GL am November 25, 2010, 14:46:38
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"??



Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: T417 am November 25, 2010, 14:57:02
Ää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?
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: database am November 25, 2010, 15:12:07
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...
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: DF6GL am November 25, 2010, 15:26:34
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??

Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: T417 am November 25, 2010, 15:56:58
@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.
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: DF6GL am November 25, 2010, 16:18:17
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
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: T417 am November 25, 2010, 16:31:19
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.  >:(
Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: DF6GL am November 25, 2010, 17:02:52
Hallo,

noch'n Versuch:


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

Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: database am November 25, 2010, 17:12:54
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.

Titel: Re: Datum aktualisieren mit UPDATE
Beitrag von: T417 am November 25, 2010, 17:26:28
@DF6GL: Jep, der Code klappt. Ich sehe schon, das dort wohl massiv auf Datentypen,Hochkomma etc, geachtet werden muss. :D
Da Kurztext nicht immer eindeutig ist, muss ich noch eine Teilnummer einfügen, aber das ist jetzt kein Problem mehr.  ;)

@Database: Tschuldige. Ich hab die Code-Idee ursprünglich von Franz. Siehe hier:
http://www.access-o-mania.de/forum/index.php?topic=13220.msg74165#msg74165
Habe sie dann meinen Erfordernissen angepasst. :)