SQL Abfrage über Basic

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

SQL Abfrage über Basic

Beitrag 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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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:

Code: Alles auswählen

"Datum" =  '2006-11-29' 
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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

gelöst: Abfrage mit Datum

Beitrag 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 :lol:

Gruss
sarotti
Mihilist
****
Beiträge: 120
Registriert: Di, 25.04.2006 15:27
Wohnort: Nürnberg
Kontaktdaten:

Re: gelöst: Abfrage mit Datum

Beitrag 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
sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Datum kovertieren für SQL string

Beitrag 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
:wink:

Gruss
sarotti
Antworten