AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

Ein Thema von juergen · begonnen am 17. Mai 2016 · letzter Beitrag vom 18. Mai 2016
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.053 Beiträge
 
Delphi 10.3 Rio
 
#1

Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 17. Mai 2016, 14:34
Datenbank: Access • Version: 2000 • Zugriff über: AnyDac
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:
EADException [AnyDAC][Phys]-321. Character [(] is missed
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:
Code:
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
Kann jemand die Fehlermeldung einordnen oder hat eine Idee wo ich suchen könnte?

Vielen Dank schon mal vorab!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (17. Mai 2016 um 14:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 17. Mai 2016, 14:56
Ich gehe mal davon aus, dass um die ODER-Verknüpfungen jeweils die Klammerung fehlt:

SQL-Code:
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
Mein Vorschlag zur Vereinfachung:
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=1)
OR (`Mitarbeiter Stempelungen`.Buchung=2)
OR (`Mitarbeiter Stempelungen`.Buchung=5)
OR (`Mitarbeiter Stempelungen`.Buchung=6))
ORDER BY `Mitarbeiter Stempelungen`.Mitarbeiter, `Mitarbeiter Stempelungen`.DatumUhrzeit
Evtl. geht auch das:
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
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (17. Mai 2016 um 15:03 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 17. Mai 2016, 15:19
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:
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
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.053 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 17. Mai 2016, 15:29
@baumina,

danke für deine Hilfe!
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:
`Mitarbeiter Stempelungen`.Mitarbeiter
muss es in Access wohl eher so sein:
Code:
[Mitarbeiter Stempelungen].Mitarbeiter
Auch die Datumsselektion lautet ganz anders:
Code:
And ([Mitarbeiter Stempelungen].DatumUhrzeit>#2016-04-30 23:59:59#)
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.

@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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 17. Mai 2016, 15:41
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:
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
Was ich noch nicht begriffen habe ist: Wann muss man in Access dieses ` oder jenes ´ oder [ und ] nehmen oder war es doch " bzw. '
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.053 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 17. Mai 2016, 17:25
@nahpets,
Zitat:
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.
Das hätte ich mal auch von Anfang an so machen sollen! Ich hatte allerdings gedacht Access wäre so speziell dass ich die Excel-Abfrage als Ausgangsbasis nehmen sollte. Als ich gemerkt hatte dass das so nicht geht, habe ich die Abfrage in Access erstellt. Und die sah auch "komisch" aus (siehe den Post vom mir wo die Access-Syntax aus der Access-Abfrage zu sehen ist).
Deine Abfrage funktioniert direkt.
Und das ist ja Standard. In Zukunft werde ich das auch so machen wie von dir vorgeschlagen, erst mal den SQL-Standard verwenden...

Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 17. Mai 2016, 21:53
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.106 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Fehler bei Zugriff auf Access-DB über AnyDac (jetzt FireDac)

  Alt 18. Mai 2016, 04:54
Hallo
es ist doch nicht seine eigene Datenbank,
da kann er für diese Feldnamen nicht wirklich was.
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf