Probleme bei SQL-Abfrage über Datum ...

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

RobbyTobby
Beiträge: 2
Registriert: Do, 08.04.2010 17:08

Probleme bei SQL-Abfrage über Datum ...

Beitrag von RobbyTobby »

Hallo zusammen,

ich bin absoluter Foren-Neuling und starte hier meine ersten Gehversuche :)

Ich soll für einen Kumpel ein Archiv-System aufbauen. Das fing alles ganz harmlos an mit einer harmlosen Datenbank die irgendwie immer komplizierter geworden ist. Das Archiv soll Drehbänder (der Kumpel ist Kameramann) verschiedenster Formate archivieren. Ich habe mit einem einfachen Formular angefangen über das man neue Drehbänder archivieren kann und einem Formular in dem man nach Bändern suchen kann. Die Suche findet dann über Makros statt. Ich nutze keine externe Datenbank sondern das standart SQL von Base. Bis jetzt habe ich auch schon einiges hinbekommen und es läuft. Ich kann über alles suchen außer über das Datum. Ich will natürlich in der Suchmaske ein spezielles Datum angeben und zu diesem Datum alle Suchergebnisse angezeigt bekommen. Ich habe schon stundenlang gegoogelt und Foren durchforstet aber keine Lösung zu meinem Problem gefunden. Mit allen Angaben über die verschiedenen "Date" Formate konnte ich wenig anfangen.

Code: Alles auswählen

...
DatumFilter = MainForm.getByName("datDatum") 'Das Suchfeld wird angesprochen
if DatumFilter.Text <> "" then 'Ist der Inhalt des Suchfeldes nicht leer dann ...
	if SQLString <> "" then 'Wenn in SQLString schon was steht, dann ...
		SQLString = SQLString + " AND Datum LIKE " + "'" + DatumFilter.Text + "'" 'Deklaration SQL Filter	
	else
		SQLString = "Datum LIKE " + "'" + DatumFilter.Text + "'" 'Deklaration SQL Filter
else
	SubForm.ApplyFilter = False 
end if
...
Das Datum im Formular sieht z.B. so aus: "12.11.10". Wenn ich mir die Variable "DatumFilter.Text" mittels MsgBox ausgeben lasse dann sieht sie auch genau so aus (12.11.10). Jetzt hätte ich gern dem Subformular eine SQL-Anweisung gegeben das es mir den Datensatz zum passenden Datum ausgibt. Macht er aber nicht ... :(
Fehlermeldung:

SQL-Status: 37000
Fehler-Code: -16

Wrong data type: java.lang.IllegalArgumentException in statement [SELECT * FROM "VideoArchiv" AS "VideoArchiv" WHERE "Speichermedium" LIKE '(Beta)' AND "Datum" LIKE '08.03.10' ORDER BY "Speichermedium" DESC, "ArchivNr" DESC, "TapeNr" DESC]


Ich versteh leider nicht viel von SQL und von Makros. Hab mir das meiste in den letzten Monaten so zusammen gelesen. Bin jetzt allerdings an einem Punkt angelangt wo es keinen Spaß mehr macht :? Wenn irgendjemand einen guten Ratschlag hätte, würde ich mich sehr freuen!
Vielen Dank schon mal, Rob (*rauchiger Kopf*)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Probleme bei SQL-Abfrage über Datum ...

Beitrag von Barlee »

Hallo Rob,

die Fehlermeldung kommt vom Datumsformat. Intern wird ein Datum in der Form YYYY-MM-DD gespeichert.
Deine Tabelle "VideoArchiv" beinhaltet eine Datumsspalte, die die Daten in o.a. Form bereithält.

Was macht nun Deine Abfrage: Sie sucht nach einer Zeichenkette (DatumFilter.Text ) in der Spalte, in der aber kein Text, sondern Datumsangaben bereitstehen. Das Ergebnis ist ein "wrong data type"
Lösung: Sorge dafür, dass gleiche Datentypen bereitstehen, die miteinander verglichen werden. Konkret - wandele die Datumsangaben vor dem Vergleich in Text um.
Probiere einmal:

Code: Alles auswählen

SQLString = "TO_CHAR(Datum,'DD.MM.YY') LIKE " + "'" + DatumFilter.Text + "'" 'Deklaration SQL Filter
Gruß Barlee
RobbyTobby
Beiträge: 2
Registriert: Do, 08.04.2010 17:08

Re: Probleme bei SQL-Abfrage über Datum ...

Beitrag von RobbyTobby »

KLASSE!!!
Man, jungejunge... das hat gleich auf anhieb geklappt! Vielen lieben Dank für den Tipp! :D Ich hab jetzt wirklich lang an diesem Problem gesessen und bin nicht auf die richtige Lösung gekommen. Ich bin durch diese ganzen unterschiedlichen SQL Varianten (HSQL, MySQL und was auch immer) total durcheinander gekommen. Ich hab mir die Variable "DatumFilter.Text" und "DatumFilter.Date" immer wieder durch MsgBox ausgeben lassen und bin auf keine gescheite Lösung gekommen.
Also danke nochmal!
Antworten