Anmelden

View Full Version : SQL / CLI



E305GL
12-12-08, 08:58
Suche SQL-/CLI-Guru für (tel.) Support

__________________________________________________ _______________________

EMSENHUBER INFORMATIK
Wielandsthal 41
A-3130 Herzogenburg
++43(0)2782/82443-0 Fax DW-40
http://www.emsenhuber.at
__________________________________________________ _______________________

Fuerchau
12-12-08, 09:31
Was willst du wissen ?

E305GL
19-12-08, 09:06
Sg. Herr Fürchau, wir haben folgende VARPG-Problematik: Wir wollen via ODBC extrem flexibel auf DB400, DB2, SQLServer, & Andere zugreifen. Der VARPG zwingt uns aber ein GUI-Programm einzusetzen um die ODBC-Komponente nutzen zu können. Wir "müssen" aber ODBC aus einer (VARPG)DLL aufrufen und so stellt sich die Frage ist der ODBC-Aufruf auch über eine DB(Treiber-) DLL möglich ? wenn ja wie heissen diese DLL's und wie sieht die Parameterübergabe im VARPG aus.

Mfg
Anton Emsenhuber

Fuerchau
19-12-08, 10:25
Dazu gibts die CLI-Routinen von Microsoft:
ODBC-API-Implementierungsdetails (http://msdn.microsoft.com/de-de/library/ms131675.aspx)

E305GL
21-12-08, 09:13
danke für den Tipp; gibt's VARPG-Muster-/Beispielprogramme ?; komme für die Unkosten (nach vorheriger Absprache) natürlich auf

Fuerchau
22-12-08, 08:57
Muss es denn unbedingt VARPG sein ?
Mittels PC-Sprachen (VB6, VB.NET o.ä.) sind die Zugriffe doch wesentlich einfacher zu gestalten, da es zumindest mit ADO/ADO.NET extrem vereinfachte Zugriffsmöglichkeiten gibt.

Ansonsten gilt:
Jede CLI-Funktion muss als Prototyp deklariert werden (wie man beim Prototyp die DLL angibt, weiß ich nicht).
Die Funktionen sind alle in der "odbccp32.dll".

Auf der AS/400 gibts das auch, deshalb hatte ich mir mal da ein Beispiel gemacht:



d************************************************* *********************
d* Definition Funktionsprototypen
d************************************************* *********************
dSQLAllocEnv pr 10I 0 EXTPROC('SQLAllocEnv')
d pHENV 10I 0

dSQLFreeEnv pr 10I 0 EXTPROC('SQLFreeEnv')
d pHENV 10I 0 value

dSQLAllocCon pr 10I 0 EXTPROC('SQLAllocConnect')
d HENV 10I 0 value
d pHDBC 10I 0

dSQLFreeCon pr 10I 0 EXTPROC('SQLFreeConnect')
d HDBC 10I 0 value

dSQLConnect pr 10I 0 EXTPROC('SQLConnect')
d HDBC 10I 0 value
d szDSN 256 options(*varsize)
d cbDSN 5I 0 value
d szUID 256 options(*varsize)
d cbUID 5I 0 value
d szAUT 256 options(*varsize)
d cbAUT 5I 0 value
dSQLDisconnect pr 10I 0 EXTPROC('SQLDisconnect')
d HDBC 10I 0 value

dSQLAllocStmt pr 10I 0 EXTPROC('SQLAllocStmt')
d HDBC 10I 0 value
d pHSTMT 10I 0

dSQLFreeStmt pr 10I 0 EXTPROC('SQLFreeStmt')
d HSTMT 10I 0 value
d fOption 5I 0 value

dSQLPrepare pr 10I 0 EXTPROC('SQLPrepare')
d HSTMT 10I 0 value
d szSqlStr 32766 options(*varsize)
d cbSqlStr 5I 0 value

dSQLNumResCols pr 10I 0 EXTPROC('SQLNumResultCols')
d HSTMT 10I 0 value
d pCCOL 5I 0

dSQLDescribeCol pr 10I 0 EXTPROC('SQLDescribeCol')
d HSTMT 10I 0 value
d ICOL 5I 0 value
d szColName 128 options(*varsize)
d cbColNameMax 5I 0 value
d pcbColName 5I 0
d pfSqlType 5I 0
d pcbColDef 10I 0
d pibScale 5I 0
d pfNull 5I 0
d************************************************* *********************
d* Definition Konstanten
d************************************************* *********************
d* Sql-Returns
d SQL_SUCCESS c const( 0)
d SQL_SUCCESS_I c const( 1)
d SQL_NO_DATA c const(100)
d SQL_NEED_DATA c const( 99)
d SQL_ERROR c const( -1)
d SQL_INV_HAND c const( -2)

d* Sql-Drop
d SQL_CLOSE c const( 1)
d SQL_DROP c const( 2)
d SQL_UNBIND c const( 3)
d SQL_RESET_P c const( 4)

d* Sql-Allgemein
d SQL_FALSE c const( 0)
d SQL_TRUE c const( 1)
d SQL_NTS c const(-3)
d SQL_SQLSTATS c const( 5)

d SQL_NO_NULLS c const( 0)
d SQL_NULLABLE c const( 1)

d* Sql-Feldtypen
d SQL_CHAR c const( 1)
d SQL_NUMERIC c const( 2)
d SQL_DECIMAL c const( 3)
d SQL_INTEGER c const( 4)
d SQL_SMALLINT c const( 5)
d SQL_FLOAT c const( 6)
d SQL_REAL c const( 7)
d SQL_DOUBLE c const( 8)
d SQL_DATETIME c const( 9)
d SQL_VARCHAR c const(12)
d SQL_BLOB c const(13)
d SQL_CLOB c const(14)
d SQL_DBCLOB c const(15)
d SQL_DATALINK c const(16)
d SQL_WCHAR c const(17)
d SQL_WVARCHAR c const(18)
d SQL_BIGINT c const(19)
d SQL_BLOB_LOC c const(20)
d SQL_CLOB_LOC c const(21)

d SQL_DBCLOB_LOC c const(22)
d SQL_WLONGVARCH c const(18)
d SQL_LONGVARCHA c const(12)
d SQL_GRAPHIC c const(95)
d SQL_VARGRAPHIC c const(96)
d SQL_LONGVARGRA c const(96)
d SQL_BINARY c const(97)
d SQL_VARBINARY c const(98)
d SQL_LONGVARBIN c const(98)
d SQL_DATE c const(91)
d SQL_TYPE_DATE c const(91)
d SQL_TIME c const(92)
d SQL_TYPE_TIME c const(92)
d SQL_TIMESTAMP c const(93)
d SQL_TYPE_TS c const(93)



Die Reihenfolge der Verwendung ist:

SqlAllocEnv
SQLSetEnvAttr <= je Attribut
SQLAllocConnect
SQLSetConnectAttr <= je Attribut
SQLConnect
SQLAllocStmt
SQLExecDirect <= kann jeder Befehl sein

SQLNumResultCols
SQLColAttributes <= Information je Spalte und Attribut

SqlBindCol <= Zuweisung Pufferadresse

Schleife bis Ende:
SQLFetch <= Lesen der Daten

SQLFreeStmt
SQLDisconnect
SQLFreeConnect
SqlFreeEnv

Ich hoffe das reicht mal fürs probieren.

E305GL
09-01-09, 09:22
:) DANKE für diese aufwendige info, hat uns ein gutes stück weitergebracht. alternativen zu varpg sind erst in einer weiteren migrationsphase ein thema