ODBC-Problem

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

ODBC-Problem

Beitrag von Jan »

Gerade versuche ich mich an ODBC. Und irgendetwas klappt da nicht.

So baue ich den Connection-String auf:

Code: Alles auswählen

cConnectService := "DBE=ODBCDBE"
cConnectService += ";DRIVER=SQL Server"
cConnectService += ";SERVER=" + cSQLServer
cConnectService += ";UID=" + cSQLServerUser
cConnectService += ";PWD=" + cSQLServerPass
cConnectService += ";DATABASE=" + cDBName

oSession := DacSession():new(cConnect)

? oSession:isConnected()
? oSession:getLastError()
?oSession:getLastMessage()
Das gibt mir eine Meldung:
8502
DatabaseEngine not specified
Im weiteren Verlauf, wenn ich den durchlaufen lasse, kommt beim ersten USE dann natürlich sofort ein Fehler:
Fehlermeldung hat geschrieben:Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows Vista 06.01 Build 07600
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: L VALUE: .F.
-> VALTYPE: C VALUE: ODBCDBE
-> VALTYPE: C VALUE: mita
-> VALTYPE: U VALUE: NIL
-> VALTYPE: U VALUE: NIL
-> VALTYPE: L VALUE: .F.
oError:canDefault : J
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Database Engine und aktive Session sind nicht kompatibel
oError:filename :
oError:genCode : 92
oError:operation : DbUseArea
oError:osCode : 0
oError:severity : 2
oError:subCode : 8062
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von NET_USE(21)
Aufgerufen von PROGRAMM(191)
Aufgerufen von MAIN(42)
Wo kann der Fehler liegen?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 103 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: ODBC-Problem

Beitrag von Tom »

Irgendwo gehört noch ein "DbeLoad('ODBCDBE')" hin. Am besten vor den ersten Connect.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16542
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 114 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ODBC-Problem

Beitrag von Martin Altmann »

Hast Du denn in Deiner Systemsteeurung die genau so benamste ODBC-Quelle auch eingerichtet und kannst DU mit den Zugangsdaten per Testknopf auch zugeifen?

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
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: ODBC-Problem

Beitrag von Jan »

Hallo,

Tom,

ja klar, das habe ich gemacht ;-)

Martin,

in DbeInfo(COMPONENT_DATA, ODBCDBE_DRIVERS) finde ich den SQL-Server in genau der aufgerufenen Schreibweise vor. Wo finde ich denn unter Windows 7 die ODBC-Quelle in der Systemsteuerung?

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

Re: ODBC-Problem

Beitrag von Martin Altmann »

Start – Systemsteuerung. Dort den Menüpunkt Optionen auswählen und anschließend Datenquellen ( ODBC ).

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
urbi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: So, 26. Mär 2006 18:47
Wohnort: 76185 Karlsruhe
Kontaktdaten:

Re: ODBC-Problem

Beitrag von urbi »

Hallo Jan,

Bin schon seit Wochen dabei auf MYSQL umzustellen,

hier mal meine Lösung zum Aufbau der Verbindung und Absetzen einer Anfrage

Code: Alles auswählen

// oSession ist STATIC
// prüfen auf gültige Session
IF oSession=NIL .or. !oSession:isconnected()
      oSession := SQLTEST()
ENDIF

// Anfrage an SQL-Server
......................
FUNCTION SQLTEST()
LOCAL aDBE,atables,cConnect,cTables,cTemp,i
csql:=""
aDBE := DbeList() 
AEval( aDBE, {|a| csql+= a[1]+" " } ) 
IF ASCAN(aDBE,"ODBCDBE")=0
   DbeLoad( "ODBCDBE" ) 
ENDIF
IF VALTYPE(oSession)="O" 
   IF oSession:isconnected()  
      RETURN oSession
   ENDIF
ENDIF
DbeSetDefault( "ODBCDBE" ) 
cConnect := "DBE=ODBCDBE"  
cConnect += ";DSN="+TRIM(m->_PR_SQLSRV) 
oSession := DacSession():new( cConnect ) 
oSession:setProperty(ODBCSSN_TIMESTAMP_AS_DATE, .T.) 
IF !oSession:isconnected()  
   RETURN "nosql"
ENDIF
RETURN oSession


Gruss Rainer
urbi
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Re: ODBC-Problem

Beitrag von Michael Rudrich »

Moin :-)
so mach ich das mit MySQL.. die Variablen müsst Ihr anhand der
DSN setzen..

(und nicht vergessen, die Option 32 zu verwenden, da die Einstellung
CURSORTYPE ODBC_CURSOR_DYNAMIC nicht funzt...)

// Connection über native ODBC
CREATE CONNECTION INTO oSQL_Connect CONNSTRING ;
"DBE=ODBCDBE;"+;
"SERVER=" + cSQL_Host + ";"+;
"UID=" + cSQL_User + ";"+;
"PWD=" + cSQL_Pass + ";"+;
"DATABASE=" + cSQL_Base + ";"+;
"DRIVER=" + cSQL_Ver +";" +;
"OPTION=32"

IF !oSQL_Connect:isconnected()
Fehler("Connection failed")
QUIT
ENDIF
// Indizes auf AUTO-OPEN
oSQL_Connect:setProperty(ODBCSSN_INDEX_AUTOOPEN,.t.)
// Sensitive
oSQL_Connect:setProperty(ODBCSSN_SENSITIVITY, ODBC_SENSITIVE)

LG
Michl
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: ODBC-Problem

Beitrag von Jan »

Ich muß da nochmal nachhaken. Ich bekomme es auch nach einer kleineren Denkpause immer noch nicht hin.

Den Fehler oben habe ich behoben. Das lag daran, das ich die Variable bei der Erzeugung der Session anders benannt habe als bei der Zusammenstellung des Strings. Dummer Fehler.

Aber nun bekomme ich einen Fehler -1, ohne Beschreibung. Im Debugger sehe ich, das oSession NIL ist.

Wenn ich nun ein DbeInfo(COMPONENT_DATA, ODBCDBE_GET_TRIAL_SERVER) einbaue, sollte das mir ja eigentlich die zur Verfügung stehenden Server auflisten. Aber leider gibt mir das einen Leerstring zurück. Warum?

Ich habe mir die Demoversion von Razor runtergeladen. Hier kann ich sehen, das sowohl der Treiber als auch der Server von mir korrekt angegeben sind. Auch User und Passwort stimmen. Dennoch habe ich diese Fehler.

Woran kann das liegen?

Auch wenn das gut gemeint ist: Die Hinweise auf MySQL helfen mir nicht wirklich weiter. Ich arbeite mit MS SQL 2008 R2.

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

Re: ODBC-Problem

Beitrag von georg »

Hallo, Jan -


vielleicht hilft es ja - der Name des Treibers muss EXAKT mit dem in der Systemsteuerung übereinstimmen, auch was Groß- und Kleinschreibung angeht.

Ich verwende bei SQLExpress die Option, mir die Treiber anlisten zu lassen (ich erstelle eine neue Connection und fordere dann die Treiber-Liste an). Dort suche ich dann den Treiber raus und verwende EXAKT den String.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 103 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: ODBC-Problem

Beitrag von Tom »

Steckst Du möglicherweise in einem neuen Thread? Dann wäre kein Wunder, dass oSession NIL ist. An neue Threads muss das Session-Objekt übergeben und mit oSession:SetDefault() für die dort zu öffnenden Dateien verfügbar gemacht werden (gilt auch für ADS). Notfalls STATIC oder PUBLIC.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: ODBC-Problem

Beitrag von Jan »

Hallo Georg,

da hab ich schon drauf geachtet. Alles stimmt überein.

Hallo Tom,

nein, kein neuer Thread.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: ODBC-Problem

Beitrag von Jan »

Hier mal zwei Screenshots, die vielleicht helfen, mit ein paar Hinweise zu geben.
SQL1.jpg
SQL1.jpg (84.22 KiB) 4897 mal betrachtet
SQL2.jpg
SQL2.jpg (123.16 KiB) 4897 mal betrachtet
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten