![]() |
Datenbank: Access • Version: 2000 • Zugriff über: AnyDac
Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
Hallo zusammen,
ich muss mir Daten aus einer Access-DB holen (für mich das erste Mal dass mit Access arbeite). Ich habe im TADConnetion-Editor von AnyDac den Pfad zu der mdb angegeben, den Usernamen und das Passwort. Wenn ich dann die TADConnetion-Verbindung aktiviere und die Query öffnen will, erscheint folgende Meldung:
Code:
Den SQL-String habe ich mir 1:1 aus einer Excel-Verbindung raus kopiert und meiner Query auch so zugewiesen. Das SQL-Statement schaut wie folgt aus:
EADException [AnyDAC][Phys]-321. Character [(] is missed
Code:
Kann jemand die Fehlermeldung einordnen oder hat eine Idee wo ich suchen könnte?
Select `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit, `Mitarbeiter Stempelungen`.Buchung FROM `Y:\Test\Daten.mdb`.`Mitarbeiter Stempelungen` `Mitarbeiter Stempelungen` WHERE (`Mitarbeiter Stempelungen`.Buchung=1) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'}) OR (`Mitarbeiter Stempelungen`.Buchung=2) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'}) OR (`Mitarbeiter Stempelungen`.Buchung=5) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'}) OR (`Mitarbeiter Stempelungen`.Buchung=6) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'}) ORDER BY `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit
Vielen Dank schon mal vorab! |
AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
Ich gehe mal davon aus, dass um die ODER-Verknüpfungen jeweils die Klammerung fehlt:
SQL-Code:
Mein Vorschlag zur Vereinfachung:
Select `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit, `Mitarbeiter Stempelungen`.Buchung
FROM `Y:\Test\Daten.mdb`.`Mitarbeiter Stempelungen` `Mitarbeiter Stempelungen` WHERE ((`Mitarbeiter Stempelungen`.Buchung=1) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'})) OR ((`Mitarbeiter Stempelungen`.Buchung=2) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'})) OR ((`Mitarbeiter Stempelungen`.Buchung=5) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'})) OR ((`Mitarbeiter Stempelungen`.Buchung=6) AND (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'})) ORDER BY `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit
SQL-Code:
Evtl. geht auch das:
Select `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit, `Mitarbeiter Stempelungen`.Buchung
FROM `Y:\Test\Daten.mdb`.`Mitarbeiter Stempelungen` `Mitarbeiter Stempelungen` WHERE (`Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'}) AND ((`Mitarbeiter Stempelungen`.Buchung=1) OR (`Mitarbeiter Stempelungen`.Buchung=2) OR (`Mitarbeiter Stempelungen`.Buchung=5) OR (`Mitarbeiter Stempelungen`.Buchung=6)) ORDER BY `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit
SQL-Code:
Select `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit, `Mitarbeiter Stempelungen`.Buchung
FROM `Y:\Test\Daten.mdb`.`Mitarbeiter Stempelungen` `Mitarbeiter Stempelungen` WHERE `Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'} AND `Mitarbeiter Stempelungen`.Buchung IN (1,2,5,6) ORDER BY `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit |
AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
Außer Excel kenne ich keine "Datenbankschnittstelle", die im Select-Statement die Angabe des Datenbanknamens bzw. der Datenbankdatei erfordert.
Die Verbindung zur Datenbank wird eigentlich durch die Connection hergestellt. Daher ließe sich das Statement von Baumina (vermutlich) noch verkürzen:
SQL-Code:
Um das Statement lesbarer zu machen, könnte man auch noch den Tabellennamen vor allen Spalten weglassen, da ja nur der Zugriff auf eine Tabelle erfolgt.
Select `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit, `Mitarbeiter Stempelungen`.Buchung
FROM `Mitarbeiter Stempelungen` `Mitarbeiter Stempelungen` WHERE `Mitarbeiter Stempelungen`.DatumUhrzeit>{ts '2015-12-31 23:59:59'} AND `Mitarbeiter Stempelungen`.Buchung IN (1,2,5,6) ORDER BY `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit Den in Hochkommata gefassten Tabellenalias, der mit dem in Hochkomma gefassten Tabellennamen identisch ist, halte ich für überflüssig. Wenn man mit 'nem Alias arbeitet, sollte man eine kurze, aber verständliche Zeichenfolge wählen. Das könnte dann so aussehen:
SQL-Code:
Select
ms.Mitarbeiter, ms.DatumUhrzeit, ms.Buchung FROM `Mitarbeiter Stempelungen` ms WHERE ms.DatumUhrzeit > {ts '2015-12-31 23:59:59'} AND ms.Buchung IN (1,2,5,6) ORDER BY ms.Mitarbeiter, ms.DatumUhrzeit |
AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
@baumina,
danke für deine Hilfe! :thumb: Mein eigentliches Problem scheint erst mal ein ganz anderes zu sein: Ich kann die EXCEL-Abfrage nicht 1:1 als SQL ausführen! Da bin ich gerade dabei wie die SQL-Syntax für Access lauten muss. Anstelle
Code:
muss es in Access wohl eher so sein:
`Mitarbeiter Stempelungen`.Mitarbeiter
Code:
Auch die Datumsselektion lautet ganz anders:
[Mitarbeiter Stempelungen].Mitarbeiter
Code:
Deine Hinweise sind aber trotzdem richtig und ich werde wohl die 2. Version von dir umsetzen, da ich mich mit der Access spezifischen Syntax überhaupt nicht auskenne.
And ([Mitarbeiter Stempelungen].DatumUhrzeit>#2016-04-30 23:59:59#)
@nahpets Danke für deine Antwort. Mit Alias arbeite ich sonst auch, nur kenne ich Access eben gar nicht und muss erst mal das Ganze Access-konform hinbiegen. Euch noch einen schönen Tag! |
AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
Bei Access stelle ich mich immer erstmal dumm an und nutze es so, wie auch Oracle, MSSQL und andere Datenbanken. Meist klappt das mit der Syntax nach SQL-Standard. Erst wenn das nicht geht, suche ich nach Auswegen.
Wenn ich Deine Ergänzungen richtig verstanden habe, müsste dashier eigentlich funktionieren:
SQL-Code:
Was ich noch nicht begriffen habe ist: Wann muss man in Access dieses ` oder jenes ´ oder [ und ] nehmen oder war es doch " bzw. ' :-(
Select
ms.Mitarbeiter, ms.DatumUhrzeit, ms.Buchung FROM `Mitarbeiter Stempelungen` ms WHERE ms.DatumUhrzeit > #2015-12-31 23:59:59# AND ms.Buchung IN (1,2,5,6) ORDER BY ms.Mitarbeiter, ms.DatumUhrzeit |
AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
@nahpets,
Zitat:
Deine Abfrage funktioniert direkt. :shock: Und das ist ja Standard. In Zukunft werde ich das auch so machen wie von dir vorgeschlagen, erst mal den SQL-Standard verwenden... :dp: |
AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
ein Tip am Rande, verabschiede Dich bitte von Monstren wie Mitarbeiter Stempelung. Auch wenn die eine oder andere Datensammlungssoftware dies als Tabellen/Feldname akzeptiert könntest Du bei anderen Datenbanken damit auf wenig Gegenliebe stoßen.
Gruß K-H |
AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)
Hallo
es ist doch nicht seine eigene Datenbank, da kann er für diese Feldnamen nicht wirklich was. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz