Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mit Zeos auf MS-Access zugreifen (https://www.delphipraxis.net/47101-mit-zeos-auf-ms-access-zugreifen.html)

hsbc 6. Jun 2005 18:28

Datenbank: MS-Access • Zugriff über: Zeos

Mit Zeos auf MS-Access zugreifen
 
Hallo allerseits,

ich habe versucht, mit Zeos auf eine MS-Access Datenbank zuzugreifen. Leider bekomme ich bei Table.Open die Fehlermeldung:

Unterschiedliche Typen:
Feld test: erwartet String - gefunden Widestring

In der Datenbank-Tabelle ist dieses Feld als Text mit einer Länge von 40 Zeichen definiert. Warum wird dieses Feld als Widestring interpretiert, bzw. wie kann man das als String definieren?

Oder liegt vielleicht mein Fehler in der ZConnection von Zeos? Hier habe ich als Protokoll ado angegeben und bei Database den ConnectionString eingegeben, was ja auch alles funktioniert.

mfg
Herbert

hsbc 7. Jun 2005 07:24

Re: Mit Zeos auf MS-Access zugreifen
 
Hallo nochmals,

was mir soeben aufgefallen ist, ist das, dass ich mit ZQuery ohne Fehlermeldung auf die Daten zugreifen kann.

Warum verhält sich ZTable da anders oder muss ich irgendetwas umstellen? Bei Open einer ZTable kommt bei sämtlichen String-Feldern oben erwähnte Fehlermeldung.

Hat jemand eine Idee, was man da ändern kann?

mfg
Herbert

Bernhard Geyer 7. Jun 2005 08:05

Re: Mit Zeos auf MS-Access zugreifen
 
Der Stringfelder von Access sind immer Widestring-Felder. Also macht ZTable hier irgendeinen Fehler.
Grundfrage: Verwendest Du auch die neueste Version oder 'ne Uraltversion?

Aber wieso Zeos? Mit D7 Pro hast Du doch dbGo und dieser kann Access über den Jet-OLEDB/ADO-Treiber auch problemlos ansprechen.

Stevie 7. Jun 2005 08:14

Re: Mit Zeos auf MS-Access zugreifen
 
Hallo Herbert,

versuch es mal mit der aktuellsten Version aus dem cvs,
dort habe ich vor einigen Tagen einen Fehler mit WideString-Felder in ADO behoben.

Wenn ich mit dieser Version über ein TZTable-Objekt auf eine Access-Datenbank zugreife,
werden die Felder zwar als TWideStringField angelegt aber ohne den von dir genannten Fehler.

Falls der Fehler mit der aktuellen Version bei dir immer noch auftreten sollte, bitte ich dich,
mir ein kleines Testprojekt zukommen zu lassen, wo man den Fehler reproduzieren kann.

MfG
Stevie

hsbc 7. Jun 2005 10:45

Re: Mit Zeos auf MS-Access zugreifen
 
Die Zeos-Komponenten verwende ich deshalb, weil ich ein DB-Projekt damit erstellt habe, welches auf mySQL, Firebird und MSSQL wahlweise zugreifen kann. Jetzt wollte ich dieses Projekt insofern erweitern, dass man damit auch auf MS-Access zugreifen kann.

Wie gesagt, wenn ich anstatt ZTable die ZQuery verwende, dann funktioniert das auch. Nur mit ZTable in Verbindung mit MS-Access kommt Zeos scheinbar nicht klar, obwohl die ZTable mit mySQL, Firebird und MSSQL einwandfrei arbeitet.

@Stevie: was meintest du mit aktuellster Version aus cvs ? Ich verwende hier die Zeos-Version 6.5.1 Alpha vom 14.11.2004 - gibt es hier vielleicht etwas Neueres?

mfg
Herbert

Stevie 7. Jun 2005 10:58

Re: Mit Zeos auf MS-Access zugreifen
 
Zitat:

Zitat von hsbc
@Stevie: was meintest du mit aktuellster Version aus cvs ? Ich verwende hier die Zeos-Version 6.5.1 Alpha vom 14.11.2004 - gibt es hier vielleicht etwas Neueres?

Na sicher! :???: Guckst du hier!

hsbc 7. Jun 2005 11:32

Re: Mit Zeos auf MS-Access zugreifen
 
ok Stevie - danke jedenfalls für den Link - aber nachdem mein Englisch hierfür wahrscheinlich nicht ausreicht, ist das doch etwas zu hoch für mich. Ich wüsste nicht, was ich mit dieser Seite anfangen kann bzw. von wo ich eine neuere Version herunterladen kann.

Ich bedanke mich aber trotzdem für die versuchte Hilfe.

mfg
Herbert

Stevie 7. Jun 2005 11:47

Re: Mit Zeos auf MS-Access zugreifen
 
Kein Problem, dann erklär ich dir, wie's geht. ;-)

Lad dir am besten diesen CVS-Client runter.

Nachdem du das Programm installiert und den Rechner neu gestartet hast,
hast du im Windows-Explorer im Kontextmenü neue Optionen.

Dort wählst du "CVS Auschecken..." und trägst dann unter CVSROOT folgendes ein:
:pserver:anonymous@cvs.sourceforge.net:/cvsroot/zeoslib

Unter Modul ganz unten trägst du zeosdbo_rework ein und klickst auf OK.

Die Installation hat sich etwas verändert,
so muss nun nur noch das Package ZComponent installiert werden,
nachdem alle Packages kompiliert wurden.

MfG
Stevie

hsbc 7. Jun 2005 13:17

Re: Mit Zeos auf MS-Access zugreifen
 
Hallo Stevie,

Dank deiner Hilfe ist es nun gelungen, Zeos neu zu installieren - aber:

es hat sich leider am Verhalten des MS-Access-Zugriffes nichts geändert. Es kommt nach wie vor die gleiche Fehlermeldung.

Ich hoffe, ich habe bei der Installation alles richtig gemacht: Alles neu compiliert und die Zeosdbo.bpg installiert. Danach waren auch die Symbole in den Zeos-Komponenten andersfärbig. Nachdem die Installation fehlerfrei abgelaufen ist, nehme ich an, dass ich jetzt die neuesten Zeos-Daten im Rechner habe.

Was könnte sonst noch der Grund sein, dass ZTable mit den WideStrings in MS-Access nicht klar kommt?

mfg
Herbert

Stevie 7. Jun 2005 13:26

Re: Mit Zeos auf MS-Access zugreifen
 
Zitat:

Zitat von hsbc
Was könnte sonst noch der Grund sein, dass ZTable mit den WideStrings in MS-Access nicht klar kommt?

Falls du in deinem TZTable-Objekt bereits die Felder deklariert hast - ich denke, dies ist der Fall, weil du das Programm ja auch mit anderen Datenbanken benutzt - dann liegt bei dir der folgende Fehler vor, den ich gerade zu beheben im Begriff bin.

hsbc 7. Jun 2005 14:12

Re: Mit Zeos auf MS-Access zugreifen
 
Hi Stevie,

ja, das wird es auch sein.

Ich habe jetzt probeweise eine Demo-DB mit nur einer Tabelle mit dem gleichen Satzaufbau neu angelegt und siehe da - hier funktioniert es. Ich möchte mich daher nochmals für deine Hilfe bedanken. Wie könnte ich erfahren, wenn sich diesbezüglich eine Änderung ergibt?

mfg
Herbert

Stevie 7. Jun 2005 15:06

Re: Mit Zeos auf MS-Access zugreifen
 
Hallo Herbert,

der Fehler, den ich oben erwähnte, ist behoben, das heißt, wenn du ein TStringField deklariert hast und über ADO auf eine Datenmenge zugreifst, dürfte es keinen Fehler mehr geben.

:warn: Zu beachten ist hierbei: ADO deklariert standardmäßig Text-Felder als WideString, das heißt, wenn du dir die Felder über das ADO-Protokoll erzeugen lässt, sind sie als TWideStringField deklariert, andere Protokolle erstellen an dieser Stelle Objekte vom Typ TStringField. Trotzdem kann über das ADO-Protokoll mit TStringField gearbeitet werden, was vorher den Fehler verursachte, da fälschlicherweise in der DB.pas WideString und String als inkompatibel erkannt werden. Dieser Fehler wird imho auch in der ADODB.pas durch Überschreiben der verantwortlichen Methode behoben; ab sofort auf jeden Fall auch in der ZAbstractRODataSet.pas.

Im Kontextmenü des Verzeichnisses "zeosdbo_rework" wählst du den Punkt "CVS Lokal aktualisieren" aus und erhältst somit die neueste Version aus dem cvs.

MfG
Stevie

hsbc 7. Jun 2005 15:44

Re: Mit Zeos auf MS-Access zugreifen
 
Hallo Stevie,

danke nochmals für die Info, jetzt hätte ich noch eine Frage in diesem Zusammenhang:

Hast du einen Quellcode für das Erstellen einer neuen MS-ACCESS-Datenbank unter ZEOS? Ich habe hier schon einiges versucht, aber

CREATE DATABASE ... so wie bei mySQL oder auch MSSQL funktioniert hier natürlich nicht. An Dokumentationen bin ich leider noch nicht so recht fündig geworden. Also:

Wie funktioniert CREATE DATABASE für eine MS-Access-Datenbank mit ZEOS ?

mfg
Herbert

hsbc 8. Jun 2005 06:54

Re: Mit Zeos auf MS-Access zugreifen
 
Nach eingehenden Tests habe ich folgendes festgestellt:

Wenn im Feldeditor der ZTable die Felder deklariert werden und die aktuelle Datenbank zu diesem Zeitpunkt eine MS-Access ist, dann funktioniert alles.

Ist aber zum Zeitpunkt der Felddeklaration eine andere Datenbank in Verwendung (Firebird, mySQL, etc), dann kann man später nicht auf eine MS-Access-DB zugreifen.

@ Stevie: Deine Feststellung:

Zitat:

Falls du in deinem TZTable-Objekt bereits die Felder deklariert hast - ich denke, dies ist der Fall, weil du das Programm ja auch mit anderen Datenbanken benutzt - dann liegt bei dir der folgende Fehler vor, den ich gerade zu beheben im Begriff bin.
trifft dann nach wie vor noch zu.

Vielleicht kann sich jemand dieses Problem doch noch mal genauer unter die Lupe nehmen, zumal das ganze ja bei Verwendung von ZQuery anstatt von ZTable einwandfrei funktioniert.

mfg
Herbert

Bernhard Geyer 8. Jun 2005 07:22

Re: Mit Zeos auf MS-Access zugreifen
 
1, Generell sollte man bei Verwendung von mehreren Datenbanken auf Felddefinition in der IDE verzichten, da auch Komponenten wie Zeos nicht 100% die Unterschiede bezüglich SQL-Auslegung verstecken können. Dies tritt vor allem dann zutage wenn nicht nur die Standard-Datentypen wie Integer oder String verwendet werden. Selbst Blob und Memo-Felder verhalten sich schon unterschiedlich.
Dein Problem wird sein das unter Firebird, MySQL ein TStringField angelegt wird und bei Access eine TWideStringField. Und dies ist jeweils korrekt da du bei Firebird und MySQL varchars und bei Access nvarchars verwendest.

2, Noch besser ist es mittels Bridge-Pattern die DB-Unterschiede in einer Unit/Klasse zu kapseln. Als gemeinsammkeit sollte dann maximal TDataset vorrausgesetzt werden. Noch besser wäre es ohne TDataset auszukommen und ähnlich wie bei ADO.NET eine disconnected Dataset zu definieren (Ist zwar aufwand, aber man ist dann komplett unabhängig von TDataset-Kompatiblen Komponenten.

hsbc 8. Jun 2005 07:23

Re: Mit Zeos auf MS-Access zugreifen
 
Hallo Stevie,

ich muss mein letztes Statement korrigieren:

Habe mir soeben nochmals mit cvs die neuesten Daten installiert - und jetzt funktioniert es.

Danke nochmals für deine Hilfe.

mfg
Herbert

hsbc 8. Jun 2005 07:32

Re: Mit Zeos auf MS-Access zugreifen
 
Hallo Bernhard,

deine Vermutung trifft zu 100% zu, aber Stevie dürfte es nun wirklich gelungen sein, dieses Problem zu lösen. Jedenfalls mit den neuesten Zeos-Daten funktioniert es tatsächlich.

Mittels Bridge-Pattern die DB-Unterschiede in einer Unit/Klasse kapseln, sagt mir leider nichts. Was ist übrigens eine disconnected Dataset? Wo kann man darüber nachlesen?

mfg
Herbert

Bernhard Geyer 8. Jun 2005 07:37

Re: Mit Zeos auf MS-Access zugreifen
 
Zitat:

Zitat von hsbc
deine Vermutung trifft zu 100% zu, aber Stevie dürfte es nun wirklich gelungen sein, dieses Problem zu lösen. Jedenfalls mit den neuesten Zeos-Daten funktioniert es tatsächlich.

Für das String <-> WideString-Problem dürft das auch zu lösen sein, da ja Delphi automatische konvertierungen anbietet und diese kompatible sind.

Zitat:

Zitat von hsbc
Mittels Bridge-Pattern die DB-Unterschiede in einer Unit/Klasse kapseln, sagt mir leider nichts. Was ist übrigens eine disconnected Dataset? Wo kann man darüber nachlesen?

Brücke oder über jeden guten Buch über Entwurfsmuster


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz