Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 07.02.12 20:16 
Hallo,

ich habe eine kleine DLL geschrieben, welche mithilfe der Delhi ADO-Objekte ein paar sehr einfache Funktionen zur Verfügung stellt um per ADO auf Datenbanken zu zu greifen (nicht viel mehr als Connect, ExecSQL und OpenSql). Diese soll es Nutzern erlauben per in unserem Programm integrierter Scriptsprache mit ihren Datenbanken zu spielen.

Das funktioniert im großen und ganzen auch, allerdings bastele ich gerade ein kleines Beispielscript, welche ein paar Daten in eine Access-Datenbank schreibt und wieder ausliest. Hierbei gibt es ein paar Schwierigkeiten mit, wie sollte es anders sein, DateTime Werten.
Ich kann diese Problemlos per INSERT INTO in dem Format 'yyyy-mm-dd hh:nn:ss' in die Datenbank schreiben. Will ich aber in einer SELSECT im gleichen Format wieder einen Wert abfragen, dann beschwert Access sich, dass das Abfrageformat nicht passen zum Datentyp des Feldes ist, denn in Access muss der String korrekterweise so formatiert werden: #yyyy-mm-dd hh:nn:ss#, also mit # anstelle von '.
Dummerweise erkennen die ADO-Komponenten diesen Datumswert dann nicht mehr als gequoted an und interpretieren die Doppelpunkte als Beginn von Parametern, so das Delphi das Query nicht durchlässt, weil ja die Werte zu seinen vermeindlichen Parametern fehlen.
Nun kann ich vielleicht für diesen Fall einen alternativen Datumsstring für Access zusammensetzen (ich glaube man könnte auch einen Punkt anstelle eines Doppelpunktes nehmen), da ich aber nicht weiß, was für schräge Datenbanken die späteren Nutzer der DLL verwenden und wofür bei denen so alles Doppelpunkte verwendet wird, würde ich den ADO-Komponenten gerne austreiben mit Parametern zu arbeiten, bzw. diese selbst erkennen zu wollen. Leider habe ich nichts entsprechendes Gefunden.

Habt ihr vielleicht eine Idee?

Gruß
Klabautermann
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 07.02.12 22:36 
Nicht direkt eine Lösung, aber man könnte schauen, dass man die Format-Strings erkennt und aus der Abfrage transparent eine Prepared-Statement macht, welches den Format-String als Datenwert enthält. Alternativ ggf. einmal einen Blick in den Query-Parser von Delphi werfen, ob er da ggf. ne Möglichkeit für das Setzen des Quote-Zeichens oder anderer Parameter bietet.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 08.02.12 12:54 
Hallo,

manchmal hilft es sich so ein Problem im ausgeschlafenen Zustand erneut zu widmen. tAdoQuery kennt das Property ParamCheck, welches es erlaubt, die Untersuchung der Querys auf Parameter zu unterbinden.

Somit ist das Problem gelöst.
Danke für deine Unterstützung user profile iconBenBE

Klabautermann