"Verweis" nachträglich einbinden (ADO/ODBC)

Wessy

Erfahrenes Mitglied
Hi Tutorileros,

ich hab ein kleines Problem. Und zwar schreibe ich gerade eine Datenbankanwendung und möchte drei Datenbanken (MySQL, Oracle und MS SQL Server) via ODBC über ADO ansprechen. Warum? Weil der Anwender die Möglichkeit haben soll, seinen eigenen Datenbankserver zu nutzen. Die ODBC-Treiber und Server etc habe ich alle schon installiert und via System-DSN getestet. Nun die Anbindung von VB an die ODBC-Schnittstelle.

Ich habe mich (habe keine Alternative gefunden) für ADO entschieden. Aber welche Version? Ich würde natürlich gern die aktuellste Version auf dem Computer nutzen, aber wenn ich diese dann auf meinem XP-System einbinde (wäre dann ADO 2.8) könnte es dazu kommen, dass diese auf W2K3-Servern/Longhorn/Vista nicht installiert ist bzw nicht die aktuellste ist. Es muss doch möglich sein einen Verweis in sein Projekt zur Laufzeit einzubinden Oder muss ich überhaupt einen Verweis erstellen?
 
Letztlich musst Du zur Laufzeit doch nur den Connection String setzen, damit kannst Du dann flexibel jede Datenbank anbinden.

Du musst natürlich beachten, dass SQL nicht gleich SQL ist. Es gibt teilweise erhebliche Unterschiede, so dass SQL-Befehle nicht ohne Änderung mit jeder Datenbank funktionieren müssen. Da hilft es nur, auch bestimmte Befehle selbst zu parametrisieren, und abhängig von der jeweiligen Datenbank einzusetzen.
 
Hallo Ronald,
glaub ich hab zuviel um das eigentliche Problem umhergeschrieben. :) Bezüglich der SQL Abfragesyntax hab ich mich schon mit den Standards ISO/IEC 9075 und und und... beschäftigt, in Foren gelesen was gleich ist, was ungleich ist. Alles kein Problem.

Es geht mir nur um den Verweis auf die ADO. Schaue mal in den Screenshot: vb-ado-verweis.JPG
 
Wenn du den Weitergabe-Assi von VB6 verwendest, wird die ADO2.8-DLL mit ins Installationspaket eingebunden.

Ansonsten schliesse ich mich ron an: Vorsicht bei SQL-Anweisungen, die du direkt aus deinem Code abfeuerst. Hier würde ich ausschliesslich ANSI-SQL verwenden, welches jedes DB-System verstehen sollte (Konjunktiv!).

Sollen Befehle verwendet werden, welche DB-spezifische SQL-Dialekte verwenden, würde ich Stored Procedures nehmen.
 
Hallo Zvoni,

ja das mit der SQL-Syntax (z.B. show tables unter Oracle und und und) hab ich schon soweit auf der ToDo-Liste und kommt im 2. Schritt.

Mir geht es halt um die Verweise. Ich möchte nach Möglichkeit so gut wie keine zusätzlichen Komponenten installieren. Somit würde ich nach Möglichkeit auch gern die Installation einer MDAC (bzw. ADO) umgehen. Kennt denn niemand einen Weg um Verweise dynamisch zur Laufzeit zu erstellen?
:confused:
 
Du musst letztlich immer ein Setup erzeugen, ob nun mit dem VB6-Verpackungs- und Weitergabeassistenten oder mit Tools wie z.B. dem InstallShield. Wobei der Verpackungsassistent von VB6 natürlich schon ziemlich in die Jahre gekommen ist, und vermutlich zu einigen Problemen auf aktuellen OS-Versionen führen wird. Aber ohne Setup wirst Du nicht auskommen.

Bei XP gehört ADO zum Betriebssystem dazu, und wird bei der Installation dann ignoriert.Bei älteren OS-Versionen muss MDAC installiert werden, falls es noch nicht vorhanden ist. Da kommt man nicht drum rum. Bei Vista hatte ich damit ganz andere Probleme, da es hier im Unterschied zu XP geknallt hat, wenn im Setup MDAC enthalten war (XP hat das dann ignoriert wie gewünscht, unter Vista stürzte das Setup (mit InstallShield erzeugt) dann mit Fehlern ab. Das musste ich dann extra abfangen.

Andere Probleme habe ich (gehört zwar nicht unbedingt in dieses Forum, jedoch in dieses Thema) mit der Installation einer VB 2008-Anwendung auf meinem Vista-64-Rechner zu Hause, in der ADO genutzt wird. Da kommen die merkwürdigsten Fehlermeldungen, das die entsprechende .NET-DLL nicht da ist und registriert ist, jedoch soll diese eigentlich ja .NET-Bestandteil sein, und natürlich ist sie da, lässt sich jedoch nicht registrieren, weil sie ja schon da ist.

Mit VB6 habe ich jedoch diesbezüglich auch unter Vista keine Probleme.

Und ich würde mir an Deiner Stelle nicht so viele Sorgen um MDAC machen. Es begegnen einem heute nicht mehr viele Rechner, die professionell eingesetzt werden (und ich entnehme Deinem Post, in dem Du ja eigentlich nur professionelle Datenbanken ansprichst, dass Du keine Hausfrauen-Software entwickelst), die mit älteren Windows-Versionen bestückt sind, XP ist ja nun auch schon eine lange Zeit im Einsatz. Da kann man u.U. ja auch mit Installationsanweisungen arbeiten, die speziell auf die unterschiedlichen Windows-Versionen eingehen, und darauf hinweisen, bei älteren Rechnern zunächst MDAC zu installieren. Das kann ja auch auf einer Installations-CD mit ausgeliefert werden..
 
Hallo noch einmal,

ich will gerade kein Setup erstellen. Die Anwendung soll möglichst ohne Veränderungen am Betriebssystem laufen. Wie du schon gesagt hast, die Installation der MDAC 2.8 unter Vista macht Probleme. Warum sollte man diese dort auch installieren wollen wo doch die Windows DAC 6 ab Vista und 2008 die MDAC 2.8 ablöst? Genau das ist doch der springende Punkt. Ist z.B. MDAC 2.8 die aktuellste Version, möchte ich den Verweis auf diese erstellen, ist z.B. Windows DAC 6 die aktuellste, möchte ich den Verweis eben auf diese erstellen.

Ich probier es noch mal:
Kennt jemand einen Weg um Verweise dynamisch zur Laufzeit zu erstellen?
 
Wie ich schon sagte: Eine VB6-Anwendung, die ADO nutzt (und in der z.B. ADO 2.8 referenziert ist) läuft auf Vista, und natürlich auch, ohne dort MDAC zu installieren, weil das ja auch gar nicht geht.

Falls Du dagegen auf älteren Maschinen installierst (die kein MDAC installiert haben), wird Deine Anwendung nicht laufen, wenn sie ADO nutzt, egal was Du da referenzierst.

Benötigte Referenzen sind in der EXE abgelegt, eine vollkommene Dynamik ist da meiner Meinung nach nicht möglich, da sich ja alle (auch z.B. vom ActiveX selbst ausgeführte) Funktionsaufrufe auf die Funktionität der dahinter liegenden Referenz beziehen.

Eine vollkommene Kompatibiltät zwischen unterschiedlichen Betriebssystemversionen, ADO-Versionen und damit eine absolute Unabhängigkeit gibt es leider nicht. Selbst in der .NET-Programmierung ist es ja nun keineswegs egal, welche .NET-Version installiert ist, da gibt es noch nicht einmal eine Abwärtskompatibilität (wie es bei ADO in der Regel noch der Fall ist!). Für .NET 1.1 programmierte Software läuft meist nicht, wenn nur .NET 2.0 oder höher installiert ist (da habe ich auch Beispiele, dass bestimmte .NET-Anwendungen unter Vista nicht laufen, weil .NET 1.x da nicht vorgesehen ist!).

Meiner Erfahrung nach laufen jedoch Programme, die eine ältere MDAC-Version (z.B. 2.6) nutzen, meistens problemlos auf Rechnern, die MDAC 2.8 installiert haben.

Grüsse
ronaldh
 
Ich finde es zwar ein wenig provokant das du wieder mit deiner Fragestellung
antwortest... und über deinen Ansatz kann man sich erst Recht streiten, aber
was solls.

Du kannst z.B. prüfen welche ADO Version installiert ist.

Siehe http://www.vbarchiv.net/tipps/tipp_1314.html

Und du kannst wie im Beispiel zu erkennen ist mit LateBinding (Späte Bindung) arbeiten. Das geht dann auch ohne Referenzen auf ADO.

Allerdings hat es den großen Nachteil das die Intellisence beim
Programmieren verloren geht.

Jens
 

Neue Beiträge

Zurück