Probleme mit TADO... in Kombination mit MS Access
-
Situation:
Unsere Anwendung verwendet aktuell noch eine Access-Datenbank, und soll über kurz oder lang zweigleisig mit dem SQL Server fortgeführt werden. Bislang werden für die Datenbankzugriffe Komponenten verwendet die schon längere Zeit nicht mehr weiter entwickelt werden (DiamondAccess) und spätestens beim Umstieg auf C++ Builder 2009 oder später ausgetauscht werden müssen.
Um den Code besser auf neue C++ Builder-Versionen portieren zu können und beide Datenbanksysteme parallel zu unterstützen kommen wohl die dbGo (TADO...) und dbExpress Komponenten in Frage. Letztere unterstützen von Haus aus kein Access, und ich habe nur 2 Treiber gefunden die in Frage kommen (OleDB Express, wird scheinbar nicht mehr weiterentwickelt; oder open-dbexpress über ODBC).
Problem:
Im ersten Schritt haben wir uns für die ADO-Komponenten entschieden. Nun ist es so das die Suche und Aktivierung eines Datensatzes unter ADO/Access über Locate extrem langsam ist. Eine schnelle Variante ist Seek, was wiederum nur mit bestimmten Einstellungen bei Access funktioniert (CursorLocation=clUseServer...). Wenn man aber mit diesen Einstellungen arbeitet, funktionieren zusammengesetzte Indexe nicht mehr (und damit auch keine Schlüssel über mehrere Spalten) - ungeachtet davon ob sie als Indes angegeben werden oder nicht [EDatabaseError "A component named <xxx> already exists"].
Kennt jemand eine schnelle Alternative wie man einen Datensatz einer TADOTable selektieren kann (ohne Seek & Serverseitiger Cursor) oder eine Möglichkeit dennoch zusammengesetzte Schlüssel/Indexe zuzulassen? Oder hat jemand andere Vorschläge wie man hier vorgehen kann (Auf Access ganz zu verzichten ist nur eine Option falls es eine andere sinnvolle Minidatenbank zur Auswahl gibt, die man sinnvoll mit dbGo oder dbExpress ansprechen kann und als Einzelplatzdatenbank sinnvoll läuft [mit möglichst minimalen Aufwand]).
-
asc schrieb:
(Auf Access ganz zu verzichten ist nur eine Option falls es eine andere sinnvolle Minidatenbank zur Auswahl gibt, die man sinnvoll mit dbGo oder dbExpress ansprechen kann und als Einzelplatzdatenbank sinnvoll läuft [mit möglichst minimalen Aufwand]).
Da gibt es doch hinreichend Auswahl. Zumindest für Firebird Embedded, NexusDB, BlackfishSQL und InterBase To Go sollten auch dbExpress-Treiber verfügbar sein.
-
audacia schrieb:
Da gibt es doch hinreichend Auswahl. Zumindest für Firebird Embedded, NexusDB, BlackfishSQL und InterBase To Go sollten auch dbExpress-Treiber verfügbar sein.
Die Option ist nun von meinen Chef erst einmal abgeblockt wurden... Ich muss nach einer Lösung für Access suchen (Eine Alternative - was aber die Unterscheidung zwischen dbGo und dbExpress machen könnte, wird wenn erst später betrachtet... Natürlich nachdem die Entscheidung getroffen und für Access umgestellt wurde).
-
Wenn ihr Access benutzt, ahbt ihr doch irgendwo auch die .mdb-dateien rumfliegen.
Mit den ADO-Komponenten könnt ihr doch direkte SQL-Statements abgeben.