Entwickler-Ecke
Datenbanken - ADODataSet - Verwendung von LIKE für Access-Tabelle
Udo - So 13.10.02 00:29
Titel: ADODataSet - Verwendung von LIKE für Access-Tabelle
:?: 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 - 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:
Udo - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!