Hallo zusammen,
habe ein Problem mit dem Datum in meinem per Macro zusammengestelltem SQL-Code:
Select * FROM `Import_Umsätze` WHERE `Datum` ={D '2006-11-29'} AND `Wertstellung` = {D '2006-11-29'} AND `Art` like 'Kartenverfügung' AND `Buchungshinweis` like 'test'
Der SQL Befehl wird einwandfrei in meiner MySQL Datenbank ausgeführt (sowohl als native SQL als auch im Bereich Abfrage von OO). Wird per Basic ein "executeQuery" ausgeführt, wird das Datum konvertiert. Statt der Bindestriche werden nun "/" (`Datum` ={D '2006/11/29'}) eingesetzt, was bei der Abfrage zu einer Fehlermeldung in Basic führt.
P.S.: das ganze passiert bei der gerade installierten RC 1 der Version 2.1 (unter 2.0.4 lief das ganze noch)
Is it a bug or a feature?...
Nein, im Ernst. Hier scheint im Basic code eine Datumskonvertierung stattzufinden. Wenn das kein Fehler ist, kann ich das ausschalten?
Danke im Voraus für die Hilfe
Gruss
sarotti
SQL Abfrage über Basic
Moderator: Moderatoren
Hey sarotti,
Feature wohl kam, eher dann schon ein Bug. Das überhaupt umgewandelt wird, wundert mich.
Mir würden spontan zwei Tests einfallen: Stell mal die Lokalisierung von OOo manuell auf etwas ein - zum Beispiel "Deutsch" (unter Extras - Optionen - Sprachen). Normalerweise steht dort nämlich "Standard", was z.B. bei Dialogen und Währungsfeldern immer das $-Zeichen bringt. Erst die explizite Umstellung bringt das €-Zeichen.
Die zweite Variante wäre zu testen, ob du das Datum nicht auch direkt übergeben kannst - ohne die spezielle Datumsbezeichnung - also in der Form:
An sich sollte das reichen, wenn das Feld als Datumswert definiert ist.
Unabhängig davon würde ich aber den "Bug" melden - über den Issuzilla. Da würdest du auch eine Rückmeldung bekommen, wenn man das als "Feature" programmiert häte
Viele Grüße
Thomas
Feature wohl kam, eher dann schon ein Bug. Das überhaupt umgewandelt wird, wundert mich.
Mir würden spontan zwei Tests einfallen: Stell mal die Lokalisierung von OOo manuell auf etwas ein - zum Beispiel "Deutsch" (unter Extras - Optionen - Sprachen). Normalerweise steht dort nämlich "Standard", was z.B. bei Dialogen und Währungsfeldern immer das $-Zeichen bringt. Erst die explizite Umstellung bringt das €-Zeichen.
Die zweite Variante wäre zu testen, ob du das Datum nicht auch direkt übergeben kannst - ohne die spezielle Datumsbezeichnung - also in der Form:
Code: Alles auswählen
"Datum" = '2006-11-29'
Unabhängig davon würde ich aber den "Bug" melden - über den Issuzilla. Da würdest du auch eine Rückmeldung bekommen, wenn man das als "Feature" programmiert häte

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
gelöst: Abfrage mit Datum
Hallo noch einmal,
habe noch ein wenig herumexperimentiert. Das Problem mit einem Datum in einer Abfrage scheint immer dann auftzutreten, wenn man das Datum als solches definiert (DIM sDatum as date). Dann erfolgt ein Fehler bei der Übergabe des SQL string´s an die Datenbank....
Um dies zu vermeiden kann man folgendes tun:
1. entweder als Textstring im Format "JJJJ-MM-TT" übergeben oder
2. mit Hilfe der Funktion CDateToIso umwandeln und in die o.a. Schreibweise überführen. Hier das als Beispiel:
'und hier die umwandel Funktion:
Diese Funktion wandelt jede Ar von Datum in die richtige Schreibweise um (also 01.01.2006, 01-01-2006, 01/01/2006 etc. werden automatisch in das Format 2006-01-01 umgewandelt und könnsn somit direkt weiter bearbeitet werden.)
vielleicht hilft´s ja jemanden
Gruss
sarotti
habe noch ein wenig herumexperimentiert. Das Problem mit einem Datum in einer Abfrage scheint immer dann auftzutreten, wenn man das Datum als solches definiert (DIM sDatum as date). Dann erfolgt ein Fehler bei der Übergabe des SQL string´s an die Datenbank....
Um dies zu vermeiden kann man folgendes tun:
1. entweder als Textstring im Format "JJJJ-MM-TT" übergeben oder
2. mit Hilfe der Funktion CDateToIso umwandeln und in die o.a. Schreibweise überführen. Hier das als Beispiel:
Code: Alles auswählen
SUB SQL_Abfrage_mit_Datum
sDatum_Basis="01.12.2006"
sDatum= function_Convert_date(sDatum_Basis) '//hier wird die Fuktion aufgerufen
sSQL = "SELECT *FROM `Tabelle1` WHERE `Datumfeld`=#" + sDatum + "#"
...
sErgebnis=executeQuery(sSQL)
.....
END SUB
'und hier die umwandel Funktion:
Code: Alles auswählen
function function_Date_Convert(date_basis as string)
REM diese Funktion konvertiert ein Datum in SQL taugliche schreibweise
Dateconv=CDateToIso(date_basis)
sYear=left(Dateconv, 4)
sDay=right(Dateconv, 2)
sMonth=mid(Dateconv,5,2)
function_Date_Convert=sYear + "-" + sMonth + "-" + sDay
end function
vielleicht hilft´s ja jemanden

Gruss
sarotti
Re: gelöst: Abfrage mit Datum
Sicher, dass du den Monat mit Mid(string, 5, 2) bekommst?sarotti hat geschrieben:Code: Alles auswählen
function function_Date_Convert(date_basis as string) REM diese Funktion konvertiert ein Datum in SQL taugliche schreibweise Dateconv=CDateToIso(date_basis) sYear=left(Dateconv, 4) sDay=right(Dateconv, 2) sMonth=mid(Dateconv,5,2) function_Date_Convert=sYear + "-" + sMonth + "-" + sDay end function
Ich frag nur... weil ich nehm immer Mid(date, 4, 2)...

Grüßle
Thomas
Datum kovertieren für SQL string
Hallo Thomas,
klar, kannst ja selber an folgendem Beispiel und den Kommentaren sehen
Gruss
sarotti
klar, kannst ja selber an folgendem Beispiel und den Kommentaren sehen
Code: Alles auswählen
Sub Test_datum1
date_basis="24.12.2006" '//geht auch mit 24-12-2006 oder 24/12/2006
Dateconv=CDateToIso(date_basis)
msgBox Dateconv '//ergibt 20061224
sYear=left(Dateconv, 4)
sDay=right(Dateconv, 2)
sMonth=mid(Dateconv,5,2)
msgBox sYear + "-" + sMonth + "-" + sDay '//ergibt "2006-12-24
end sub

Gruss
sarotti