Seite 1 von 1
SQL Abfrage über Basic
Verfasst: Mi, 29.11.2006 22:42
von sarotti
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
Verfasst: Do, 30.11.2006 09:06
von Toxitom
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
gelöst: Abfrage mit Datum
Verfasst: Di, 05.12.2006 17:21
von sarotti
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:
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
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
Re: gelöst: Abfrage mit Datum
Verfasst: Mi, 06.12.2006 09:27
von Mihilist
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
Sicher, dass du den Monat mit Mid(string, 5, 2) bekommst?
Ich frag nur... weil ich nehm immer Mid(date, 4, 2)...
Grüßle
Thomas
Datum kovertieren für SQL string
Verfasst: Mi, 06.12.2006 18:51
von sarotti
Hallo Thomas,
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