Datumformat bei Dataset wahlweise aus Access oder SQL-Server

Meine Software kann wahlweise mit Datenbanken aus Access oder SQL arbeiten. Wenn man nun ein Dataset für Drucken in LL erstellt, dann speichert Acces für Datumfelder einen Datentyp “Datum”, SQL-Server jedoch seltsamerweise ein Textfeld in das Dataset.

Wie kann man in ListLabel prüfen ob ein Datenfeld nun ein Datum oder Text enthält um den Bericht für beide Varianten verwenden zu können?

So?

Date(ToString$(Feldname))

ToString$ wandelt sowohl Datum als auch String in einen String, den Du dann mit Date wieder in ein Datum wandelst

LG,
Marco

Danke für die Antwort. Darauf bin ich auch gekommen. Aber wenn ich das mache, verschwindet bei der Access-Abfrage der Zeitanteil…

grafik

grafik

Spontan fällt mir da nix ein. Du kannst aber (mit .net) Deinen eigenen Funktionen schreiben und das dann entsprechend auswerten

LG,
Marco

Aha - kann ich da nur sagen, weil ich im Moment keine Ahnung habe wie das geht.

Es würde mir ja schon helfen, wenn ich im Bericht den Datentyp eines Feldes abfragen könnte. Geht das vielleicht irgendwie?

Habe noch ein paar Tests gemacht. Das Problem liegt in ToString$. Die Funktion wandelt ein DateTime-Feld immer nur auf Datum um und läßt die Zeit weg. Die Logik dahinter ist nicht ersichtlich.

Eine Abfrage des Datenfeldtyps würde auch nicht helfen, weil LL beim Start alle Formeln überprüft und eine wäre dann ja immer falsch…

Ich würde versuchen, das Problem bei der Wurzel zu packen und herauszufinden, warum der SQL-Server das Feld als “Zeichen”-Feld liefert, das scheint mit die allerbeste Lösung.

Ansonsten können Sie (verwenden Sie .NET?) auch den AutoDefineField-Event verwenden um den Datentypen umzubiegen. Hier ist ein älterer Thread mit einem Codesnippet dazu, in Ihrem Fall wäre es nicht “HTML” sondern eben Datum. Eventuell - je nachdem, welcher Inhalt im Feld ist - sollten Sie z.B. LlFieldType.Date_Localized verwenden, oder eine der anderen Konstanten aus der LlFieldType-Enumeration.

Danke für die Info. Ich verwende .net und Visual Studio. Der Link funktioniert bei mir leider nicht.

Habe inzwischen auch eine Lösung gefunden. Ich habe meine Abfragen für das erforderliche Dataset umgeändert und Datumfelder so abgefragt: FORMAT(Tabelle.Datum,’’) AS Datum. Das funktioniert in Access und SQL-Server und ich erhalte als Ergebnis immer ein Textfeld mit Datum und Uhrzeit. Das kann ich dann mit LocDateTime zurückrechnen und formatieren wie ich will. Ist nicht optimal, aber funktioniert.

Danke für die Hilfe und Tipps.

1 Like