ODBC Treiber

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

ODBC Treiber

Beitrag von saul »

Guten Morgen,
in einer Anwendung benutze ich den ODBC Treiber von Avantage (weil da die Umlaute richtig sortiert werden) für 32bit Programme um mit Boris Borzic SQL Express auf Daten zuzugreifen. Nun habe ich einen Windows Server 64bit. Das Programm läuft darauf, daber der Datenzugriff via SQL Express bricht mit einer Fehlermeldung ab
[Microsoft][ODBC Driver Manager] Der angegebene DSN weist eine nicht übereinstimmende Architektur von Treiber und Anwendung auf.
Was kann ich da tun?

mfg
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von brandelh »

Ich denke man muß den 32 Bit Treiber installieren, vermutlich ist auf dem Server nur der 64 Bit aktiv.
Ähnliches gilt z.B. für JAVA, dort soll man immer die 32 Bit Runtime installieren damit keine Probleme entstehen.
Gruß
Hubert
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
das habe ich versucht, funktioniert aber nicht.

mfg
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


wie greifst Du auf den ODBC-Treiber zu? Über CONNECT-String? Über eine DSN? Wenn über eine DSN, kannst Du z.B. von Excel aus über die DSN auf Daten zugreifen?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,

Code: Alles auswählen

  odbc_treiber:=SQLConnection():new(Kundlag,,,.t.)       // Kundlag Name der ODBC Dbase Datenbank
  oCursor:=SQLSelect():new( chselect, odbc_treiber)
  nSuccess := oCursor:execute() // don't really need to execute an SQLDataSet, it's just here for consistency
Wie greift man mit Execel aus über die DSN auf die Daten zu?

mfg
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


so mache ich es:

Code: Alles auswählen

   oConX := SQLConnection():new()
   cLine := "Driver={" + SQLUGetDriverName("EXCEL", oConX) + "};ReadOnly=0;MaxScanRows=0;FirstRowHasNames=1;FIL=excel 8.0;DBQ=" + cXFile + ";"
   IF !oConX:driverConnect(NIL, cLine)
      ConfirmBox(, "Could not connect to Excel subsystem (ODBC)", "Error", XBPMB_OK, XBPMB_INFORMATION)
      RETU(.F.)
   ENDIF
SQLUGetDriverName() holt mir aus der Liste der installierten Treiber den (ersten) Treiber raus, der "EXCEL" im Namen hat. cXFile ist der Name der Excel-Datei, die zu öffnen ist.

Das ist übrigens die CONNECT-String Methode, die ich vorziehe, da keine DSN vorhanden sein muss.

So erstelle ich dann ein Arbeitsblatt mit dem Namen OverView:

Code: Alles auswählen

   cLine := "CREATE TABLE Overview (Area VARCHAR, Record FLOAT, Findings VARCHAR)"
   oCur1 := SQLSelect():new(cLine)
   oCur1:execute()
Und so schreibe ich einen Satz in das SQLSelect():

Code: Alles auswählen

   aSet := {"BaseHist", nBaseRecs, ""}
   oCur1:append()
   oCur1:recordPut(aSet)
   oCur1:updateRow()
Das ist der Quelltext für SQLUGetDriverName():

Code: Alles auswählen

#DEFINE FALSE .F.
#DEFINE TRUE  .T.

#INCLUDE "Xbp.CH"

#PRAGMA Library("SQLXPP.LIB")

FUNCTION SQLUGetDriverName(cDriver, oConn)
   Local lCreated, aList, nLen, nI, cLook4, cName
   cDriver := Upper(cDriver)
   cName := ""
   lCreated := FALSE
   IF oConn == NIL
      oConn := SQLConnection():new()
      lCreated := TRUE
   ENDIF
   aList := oConn:getDrivers()
   nLen := Len(aList)
   FOR nI := 1 TO nLen
      cLook4 := Upper(aList[nI, 1])
      IF At(cDriver, cLook4) > 0
         cName := aList[nI, 1]
         EXIT
      ENDIF
   NEXT
   IF lCreated
      oConn:destroy()
   ENDIF
RETURN (cName)

Weitere Fragen?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo Georg,
da bin ich jetzt ein wenig verwirrt. Ist Dein Code um mit Xbase++ auf Excel Tabellen zuzugreifen?

mfg
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


ja, nein, aber doch.

ODBC ist eine Schnittstelle, mit der jede Datei, die ODBC versteht, sich wie ein SQL-Server verhält, mal ganz platt formuliert.

Sobald über eine DSN oder einen Connect-String eine Verbindung da ist, kann man mit allen Datenquellen in (fast) der gleichen Art und Weise kommunizieren.

Soweit die Theorie. Jede Datenquelle hat ihre eigenen Regeln, das gilt besonders für Microsoft Excel.

Ich hatte Deine Frage so verstanden, dass Du u.a. wissen wolltest, wie man mit SQLExpress auf Excel zugreift. Mein Beispiel ist die einfachste Variante, erstellen einer Datei (das geht beim :driverConnect() automatisch), Erstellen eines Arbeitsblattes, und Befüllen.

Wenn man auf bestehende Excel-Tabellen lesend zugreifen will, sind auch bestimmte Formen (wie Adressierung etc.) zu beachten, die müsste ich aber erst aus Programmen raussuchen, wo ich das mache.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
nicht ganz.
Ich verbinde das Programm mit dbf Dateien über einen ODBC Treiber. Dann kann ich mit SQL Befehlen wesentlich schneller Datensätze selektieren. Das klappt mit 32bit Avantage ODBC Treiber einwandfrei. Es gibt auch eine 64bit Variante, die dann aber mit einer Fehler abbricht.

mfg
Wolfgang
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von nightcrawler »

klar bricht die 64Bit Variante von Xbase++ aus mit einem Fehler ab...XBase++ist 32Bit und kann daher keine 64Bit DLLs verwenden.
Von 32Bit Programmen muß man zwangsläufig auf die 32Bit Treiber zugreifen (µ$ gibt das so vor). Den 32Bit ODBC Manager findet man im SYSWO64 Pfad (Windows\SysWOW64\odbcad32.exe). Witzigerweise (unsinnigerweise) ist Windows\system32\odbcad32.exe die 64Bit Variante.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von brandelh »

nightcrawler hat geschrieben:Witzigerweise (unsinnigerweise) ist Windows\system32\odbcad32.exe die 64Bit Variante.
genau, 64 BIT Version mit 32 im Namen und im Pfad system32, das soll noch einer verstehen. =D>
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo,


der ODBC-Manager ist doch egal ...

Entscheidend ist der verwendete Treiber, also 32bit auf 32bit Systemen, und auf 64bit Systemen den Treiber, der zur Architektur des Anwendungsprogramms passt - für Xbase++ Programme also ein 32bit Treiber.

Aber da liegt, soweit ich Wolfgang verstanden habe, sein Problem: der 32bit Treiber will nicht. Leider ist Wolfgang uns eine genauere Beschreibung des Fehlers schuldig geblieben.

Verschiedene Möglichkeiten für den Fehler sehe ich:

er verwendet eine DSN, die für den 64bit Treiber erstellt wurde;
beide Treiber können nicht nebeneinander auf der gleichen Maschine installiert sein.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von nightcrawler »

brandelh hat geschrieben:genau, 64 BIT Version mit 32 im Namen und im Pfad system32, das soll noch einer verstehen. =D>
32+32=64, deshalb kommt die Zahl zweimal vor.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von brandelh »

Achso, klar doch, wie konnte ich das übersehen :badgrin:
Gruß
Hubert
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
kennt jemand einen ODBC Treiber, den ich jeweils für W7 32 und 64 Bit verwenden kann?

Anstelle der "set filter" Funktion für große Datenbestände öffne ich die DBF Datei mittels SQLExpress for Xbase++ über einen ODBC Treiber und filtere mit SQL Befehlen. Das geht wesentlich schneller als mit set filter. Ich verwende dafür bisher den Avantage ODBC Treiber, da dieser der einzige ist den ich fand und der die deutschen Umlaute richtig berücksichtigt. Leider funktioniert das nur mit dem 32 Bit Treiber auf einem 32 Bit System. Auf einem 64 Bit Rechner läßt sich der 32 Bit Treiber nicht installierren und der 64 Bit Treiber ergibt eine Fehlermeldung.

mfg
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


um den ODBC-Treiber mit Xbase++ nutzen zu können, muss es schon ein 32bit Treiber sein, da 32bit Anwendungen (wie Xbase++) nicht mit 64bit Komponenten kommunizieren können. (Aber das hast Du ja schon festgestellt.)

Theoretisch sollte sich der 32bit Treiber auch auf einem 64bit System installieren lassen, so verwende ich auf meinen 64bit Windows 7 Systemen den 32bit MySQL-Treiber ohne Probleme.

Welche Fehlermeldung bekommst Du denn bei der Installation?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo Georg,
nach der Installation bekomme ich keine Fehlermeldung. Schaue ich dann unter Programme nach, so finde ich den ODBC Treiber dort vor. Im Unterprogramm ODBC Treiber fehlt der Treiber ab ganz.

mfg
Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von Martin Altmann »

Wolfgang,
hast Du denn auch unter dem ODBC32-Treiber der Systemsteuerung geschaut?
In der 64Bit-ODBC-Treibereinstellungen kann der 32Bit-Treiber ja auch nicht auftauchen!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
ich habe unter Verwaltung->Datenquelle (ODBC) aufgerufen. Wo stellt man denn sonst den 32 bIt Treiber ein?

mfg
Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von Martin Altmann »

Moin,
dafür gibt es - meine ich - ein extra Programm im SYSTEM32-Ordner.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von Martin Altmann »

Halt - nein! Der liegt im SYSWOW64-Ordner - also im 64Bit-Ordner ;-) und heißt ebenfalls odbcad32.exe

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


nach der Installation solltest Du mal folgenden Code ausführen:

Code: Alles auswählen

oCon := SQLConnection():new()
aList := oCon:getDrivers()
FOR nI := 1 TO Len(aList)
   ? aList[nI]
NEXT
aList enthält jetzt eine Liste der ODBC-Treiber, die für Dein Programm verfügbar ist, entscheidend ist jetzt, ob der entsprechende Treiber in der Liste aufgeführt ist oder nicht. Wenn ja, kannst Du ihn auch verwenden.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
Das komische ist, dass bei der Liste ganz andere Treiber aufgelistet sind wie im Feld Treiber.

mfg
Wolfgang
Dateianhänge
Dokument1.pdf
(138.05 KiB) 172-mal heruntergeladen
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


das Ergebnis meines Programmscodes sind die ODBC-Treiber, die für eine Verwendung mit SQLExpress "sichtbar" sind. Weshalb es zu den Abweichungen kommt (z.B. sind die ganzen Office-ODBC-Treiber bei mir auch nicht unter ODBC gelistet), kann ich Dir leider nicht sagen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten