Autor Beitrag
Udo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 13.10.02 00:29 
:?: Hallo zusammen,

vielleicht kann mir hier jemand helfen. Ich entwerfe grade eine Applikation, die an eine Access-Datenbank angebunden ist. Um auf diese Datenbank zugreifen zu können habe ich eine ADODataSet plaziert, das per SQL-Anweisung auf die Datenbank zeigen soll.
Diese SQL-Anweisung soll je nach Bedarf die angesprochene Tabelle mit einer LIKE-Anweisung einschränken, also z.B.

Select * from tabelle where datenfeld like :wert

Der Parameter ":wert" hat dabei folgendes Aussehen

'%datenwert%'


und wird, je nach Bedarf, über das Programm (durch Zugriff auf entsprechende Eigenschaften) geändert.

Wenn ich nun das DataSet öffne sollte ich doch mit dem Befehl dataset.recordcount die Anzahl der ausgewählten Recordsets erhalten.
Leider erhalte ich aber entweder die Summe aller Datensätze aus der angesprochenen Tabelle oder ich erhalte den Wert 0, je nachdem, wie ich den LIKE-Datenwert abändere (z.B. %datenwert, "%datenwert%", etc.).

Eine eindeutige Einschränkung auf die betroffenen Datensätze findet jedoch nicht statt. Es werden immer nur entweder alle Datensätze oder gar keiner ausgelesen. Wer kann mir hier behilflich sein ?

In Access würde o.g. Select-Anweisung ja so aussehen

Select * from tabelle where datenfeld Like "*datenwert*"

Liegt also der Fehler vielleicht in den kleinen Unterschieden zwischen Access-SQL und Delphi-SQL (% statt *, ' statt ").

Danke schon mal vorab

Udo
Alfons-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: So 13.10.02 12:17 
:wave:
Sobald Du auf einme Access-DB zugreifst, musst Du die Access-SQL-Syntax verwenden. Also like "*Wert*"
:idea:

_________________
Alfons Grünewald
Udo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 13.10.02 18:11 
Titel: Kann ich den Parameter in der SQL-Anweisung beibehalten?
Hallo Alfons,

kann ich dabei den Parameter beibehalten oder muß ich jedesmal, da sich ja auch die Selectionswerte ändern, die gesamte SQL-Anweisung neu bearbeiten und neu abspeichern.
Ich habe das mit den "*" auch versucht und zwar habe ich die SQL-Anweisung mit

sqlstring := 'Select * from tabelle like ' + ansiquotedstr('*' + datenwert + '*', 34) ;

durch das Programm zusammengesetzt, so daß im Endefekt der Access-Syntax rauskam. Allerdings habe ich dann von Access die Fehlermeldung erhalten,

"... unerlaubtes einklammern des Datenwertes, "[*datenwert*]" ...


und das Programm hat abgebrochen. Kann es sein, daß der Ansi-Code 34 (norm. ja das Zeichen ") bei Access nicht richtig interpretiert wird ?

Und dann wäre da noch eins. Kann ich nicht einfach ne normale "Select * from tabelle" als Verbindung zur Datenbank nehmen und dann die "Like ..."-Anweisung im Filterstring festlegen ? Funktioniert sowas ?

mfg

Udo
Udo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 13.10.02 22:52 
Titel: Hat sich erledigt ...
O.K.,

das Prob hat sich gerade erledigt. Anbei nochmal, wie ich es lösen konnte:

Connectionstring: "Select * from tabelle"
Filterstring: datenfeld like '*datenwert*'

bzw. der Filterstring wird dann eben vom Programm geändert.

Anscheinend hat es wohl einen Fehler bei der Übermittlung der Anführungszeichen gegen. Access braucht doppelte, Delphi braucht einfache. Bei der Übergabe von Delphi an Access wird dabei wohl das einfach dann in ein doppeltes konvertiert.

Jetzt funzt es prima. Danke nochmal für Deine Hilfe Alfons.

mfg

Udo