Microsoft SQL-Server Procedure aufrufen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Microsoft SQL-Server Procedure aufrufen

Beitrag von Kiffi »

PBFetischist hat geschrieben:Was hast du für eine SQL Server Version ?
2005 (keine Express-Version)

Mit 2008 habe ich es noch nicht probiert (ist momentan ein wenig umständlich
den jetzt zu konnektieren).
PBFetischist hat geschrieben:Jetzt fällt mir nichts mehr ein.
ich verifiziere das mal eben mit VB.Net. Mal schauen, ob ich da einen
Rückgabewert bekomme...

// EDIT: In VB.Net mit einem OdbcDataAdapter bekomme ich ebenfalls nichts
zurück. Somit können wir zumindest schon mal ausschließen, dass es ein
PB-Bug ist...

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Microsoft SQL-Server Procedure aufrufen

Beitrag von mk-soft »

Habe mal den Trace von ODBC aktiviert.

bekomme nach dem Aufruf der Procedure bei Fetch eine SQL-Error das der Cursor ungültig ist.
Den genauen Trace habe ich in der Firma.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Microsoft SQL-Server Procedure aufrufen

Beitrag von Kiffi »

mk-soft hat geschrieben:Habe mal den Trace von ODBC aktiviert.
ODBC ist zwingend nötig? Ansonsten könntest Du ja mit ADODB und PureDispHelper / COMate / ADOmate darauf zugreifen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Microsoft SQL-Server Procedure aufrufen

Beitrag von mk-soft »

Habe das Aufrufen von Proceduren mal komplett getestet.
Innerhalb der SQL Procedure wird mit "SELECT wert AS RecID" ein Record angelegt und mit "Return" die Procedure verlassen.

Mit PB funktioniert der Aufruf der Procedure nicht. Vermutlich bei "SQLSetStmtAttr" ein ungültiger Pointer übergeben.
Die Lösung mit SQL-API funktioniert.

ODBC-Trace mit PB-Funktionen

Code: Alles auswählen

PureBasic_Compi c34-c10	ENTER SQLAllocHandle 
		SQLSMALLINT                  1 <SQL_HANDLE_ENV>
		SQLHANDLE           00000000
		SQLHANDLE *         004336D0

PureBasic_Compi c34-c10	EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  1 <SQL_HANDLE_ENV>
		SQLHANDLE           00000000
		SQLHANDLE *         0x004336D0 ( 0x007d1540)

PureBasic_Compi c34-c10	ENTER SQLSetEnvAttr 
		SQLHENV             007D1540
		SQLINTEGER                 200 <SQL_ATTR_ODBC_VERSION>
		SQLPOINTER          0x00000003
		SQLINTEGER                  -6 

PureBasic_Compi c34-c10	EXIT  SQLSetEnvAttr  with return code 0 (SQL_SUCCESS)
		SQLHENV             007D1540
		SQLINTEGER                 200 <SQL_ATTR_ODBC_VERSION>
		SQLPOINTER          0x00000003 (BADMEM)
		SQLINTEGER                  -6 

PureBasic_Compi c34-c10	ENTER SQLAllocHandle 
		SQLSMALLINT                  2 <SQL_HANDLE_DBC>
		SQLHANDLE           007D1540
		SQLHANDLE *         0012FF64

PureBasic_Compi c34-c10	EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  2 <SQL_HANDLE_DBC>
		SQLHANDLE           007D1540
		SQLHANDLE *         0x0012FF64 ( 0x007d15e8)

PureBasic_Compi c34-c10	ENTER SQLConnectW 
		HDBC                007D15E8
		WCHAR *             0x007D16F0 [      -3] "TestBedasoft\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 

PureBasic_Compi c34-c10	EXIT  SQLConnectW  with return code 1 (SQL_SUCCESS_WITH_INFO)
		HDBC                007D15E8
		WCHAR *             0x007D16F0 [      -3] "TestBedasoft\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 

		DIAG [01000] [Microsoft][ODBC SQL Server Driver][SQL Server]Der Datenbankkontext wurde auf 'Bedasoft' geändert. (5701) 

		DIAG [01000] [Microsoft][ODBC SQL Server Driver][SQL Server]Die Spracheneinstellung wurde auf Deutsch geändert. (5703) 

PureBasic_Compi c34-c10	ENTER SQLAllocHandle 
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D15E8
		SQLHANDLE *         0012FF60

PureBasic_Compi c34-c10	EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D15E8
		SQLHANDLE *         0x0012FF60 ( 0x007d1f48)

PureBasic_Compi c34-c10	ENTER SQLFreeHandle 
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D1F48

PureBasic_Compi c34-c10	EXIT  SQLFreeHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D1F48

PureBasic_Compi c34-c10	ENTER SQLAllocHandle 
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D15E8
		SQLHANDLE *         009AFAEC

PureBasic_Compi c34-c10	EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D15E8
		SQLHANDLE *         0x009AFAEC ( 0x007d1f48)

PureBasic_Compi c34-c10	ENTER SQLSetStmtAttr
		SQLHSTMT            007D1F48
		SQLINTEGER                   6 <SQL_ATTR_CURSOR_TYPE>
		SQLPOINTER          0x00000002
		SQLINTEGER                   0 

PureBasic_Compi c34-c10	EXIT  SQLSetStmtAttr  with return code 0 (SQL_SUCCESS)
		SQLHSTMT            007D1F48
		SQLINTEGER                   6 <SQL_ATTR_CURSOR_TYPE>
		SQLPOINTER          0x00000002 (BADMEM)
		SQLINTEGER                   0 

PureBasic_Compi c34-c10	ENTER SQLExecDirect
		HSTMT               007D1F48
		UCHAR *             0x008E5698 [      32] "EXECUTE [dbo].[qp_Add_Langtexte]"
		SDWORD                    32

PureBasic_Compi c34-c10	EXIT  SQLExecDirect  with return code 0 (SQL_SUCCESS)
		HSTMT               007D1F48
		UCHAR *             0x008E5698 [      32] "EXECUTE [dbo].[qp_Add_Langtexte]"
		SDWORD                    32

PureBasic_Compi c34-c10	ENTER SQLNumResultCols 
		HSTMT               007D1F48
		SWORD *             0x0012FF60

PureBasic_Compi c34-c10	EXIT  SQLNumResultCols  with return code 0 (SQL_SUCCESS)
		HSTMT               007D1F48
		SWORD *             0x0012FF60 (0)

PureBasic_Compi c34-c10	ENTER SQLFetch 
		HSTMT               007D1F48

PureBasic_Compi c34-c10	EXIT  SQLFetch  with return code -1 (SQL_ERROR)
		HSTMT               007D1F48

		DIAG [24000] [Microsoft][ODBC SQL Server Driver]Invalid cursor state (0) 

PureBasic_Compi c34-c10	ENTER SQLFreeHandle 
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D1F48

PureBasic_Compi c34-c10	EXIT  SQLFreeHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D1F48

PureBasic_Compi c34-c10	ENTER SQLAllocHandle 
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D15E8
		SQLHANDLE *         009AFAEC

PureBasic_Compi c34-c10	EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D15E8
		SQLHANDLE *         0x009AFAEC ( 0x007d1f48)

PureBasic_Compi c34-c10	ENTER SQLFreeHandle 
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D1F48

PureBasic_Compi c34-c10	EXIT  SQLFreeHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  3 <SQL_HANDLE_STMT>
		SQLHANDLE           007D1F48

PureBasic_Compi c34-c10	ENTER SQLDisconnect 
		HDBC                007D15E8

PureBasic_Compi c34-c10	EXIT  SQLDisconnect  with return code 0 (SQL_SUCCESS)
		HDBC                007D15E8

PureBasic_Compi c34-c10	ENTER SQLFreeHandle 
		SQLSMALLINT                  2 <SQL_HANDLE_DBC>
		SQLHANDLE           007D15E8

PureBasic_Compi c34-c10	EXIT  SQLFreeHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  2 <SQL_HANDLE_DBC>
		SQLHANDLE           007D15E8


ODBC-Trace mit API

Code: Alles auswählen

PureBasic_Compi c44-c34	ENTER SQLAllocHandle 
		SQLSMALLINT                  1 <SQL_HANDLE_ENV>
		SQLHANDLE           00000000
		SQLHANDLE *         00433658

PureBasic_Compi c44-c34	EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  1 <SQL_HANDLE_ENV>
		SQLHANDLE           00000000
		SQLHANDLE *         0x00433658 ( 0x007d1540)

PureBasic_Compi c44-c34	ENTER SQLSetEnvAttr 
		SQLHENV             007D1540
		SQLINTEGER                 200 <SQL_ATTR_ODBC_VERSION>
		SQLPOINTER          0x00000003
		SQLINTEGER                  -6 

PureBasic_Compi c44-c34	EXIT  SQLSetEnvAttr  with return code 0 (SQL_SUCCESS)
		SQLHENV             007D1540
		SQLINTEGER                 200 <SQL_ATTR_ODBC_VERSION>
		SQLPOINTER          0x00000003 (BADMEM)
		SQLINTEGER                  -6 

PureBasic_Compi c44-c34	ENTER SQLAllocEnv 
		HENV *              0042E69C

PureBasic_Compi c44-c34	EXIT  SQLAllocEnv  with return code 0 (SQL_SUCCESS)
		HENV *              0x0042E69C ( 0x007d15e8)

PureBasic_Compi c44-c34	ENTER SQLAllocConnect 
		HENV                007D15E8
		HDBC *              0042E6A0

PureBasic_Compi c44-c34	EXIT  SQLAllocConnect  with return code 0 (SQL_SUCCESS)
		HENV                007D15E8
		HDBC *              0x0042E6A0 ( 0x007d1690)

PureBasic_Compi c44-c34	ENTER SQLConnectW 
		HDBC                007D1690
		WCHAR *             0x007D1798 [      -3] "TestBedasoft\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 

PureBasic_Compi c44-c34	EXIT  SQLConnectW  with return code 1 (SQL_SUCCESS_WITH_INFO)
		HDBC                007D1690
		WCHAR *             0x007D1798 [      -3] "TestBedasoft\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 
		WCHAR *             0x1F7A9D2C [      -3] "******\ 0"
		SWORD                       -3 

		DIAG [01000] [Microsoft][ODBC SQL Server Driver][SQL Server]Der Datenbankkontext wurde auf 'Bedasoft' geändert. (5701) 

		DIAG [01000] [Microsoft][ODBC SQL Server Driver][SQL Server]Die Spracheneinstellung wurde auf Deutsch geändert. (5703) 

PureBasic_Compi c44-c34	ENTER SQLAllocStmt 
		HDBC                007D1690
		HSTMT *             0042E6A4

PureBasic_Compi c44-c34	EXIT  SQLAllocStmt  with return code 0 (SQL_SUCCESS)
		HDBC                007D1690
		HSTMT *             0x0042E6A4 ( 0x007d1ff0)

PureBasic_Compi c44-c34	ENTER SQLExecDirect 
		HSTMT               007D1FF0
		UCHAR *             0x008E4700 [      -3] "EXECUTE [dbo].[qp_Add_Langtexte]\ 0"
		SDWORD                    -3

PureBasic_Compi c44-c34	EXIT  SQLExecDirect  with return code 0 (SQL_SUCCESS)
		HSTMT               007D1FF0
		UCHAR *             0x008E4700 [      -3] "EXECUTE [dbo].[qp_Add_Langtexte]\ 0"
		SDWORD                    -3

PureBasic_Compi c44-c34	ENTER SQLNumResultCols 
		HSTMT               007D1FF0
		SWORD *             0x0012FF64

PureBasic_Compi c44-c34	EXIT  SQLNumResultCols  with return code 0 (SQL_SUCCESS)
		HSTMT               007D1FF0
		SWORD *             0x0012FF64 (1)

PureBasic_Compi c44-c34	ENTER SQLFetch 
		HSTMT               007D1FF0

PureBasic_Compi c44-c34	EXIT  SQLFetch  with return code 0 (SQL_SUCCESS)
		HSTMT               007D1FF0

PureBasic_Compi c44-c34	ENTER SQLGetData 
		HSTMT               007D1FF0
		UWORD                        1 
		SWORD                        4 <SQL_C_LONG>
		PTR                 <unknown type>
		SQLLEN                     4
		SQLLEN *            0x0012FF68

PureBasic_Compi c44-c34	EXIT  SQLGetData  with return code 0 (SQL_SUCCESS)
		HSTMT               007D1FF0
		UWORD                        1 
		SWORD                        4 <SQL_C_LONG>
		PTR                 <unknown type>
		SQLLEN                     4
		SQLLEN *            0x0012FF68 (4)

PureBasic_Compi c44-c34	ENTER SQLFreeStmt 
		HSTMT               007D1FF0
		UWORD                        1 <SQL_DROP>

PureBasic_Compi c44-c34	EXIT  SQLFreeStmt  with return code 0 (SQL_SUCCESS)
		HSTMT               007D1FF0
		UWORD                        1 <SQL_DROP>

PureBasic_Compi c44-c34	ENTER SQLDisconnect 
		HDBC                007D1690

PureBasic_Compi c44-c34	EXIT  SQLDisconnect  with return code 0 (SQL_SUCCESS)
		HDBC                007D1690

PureBasic_Compi c44-c34	ENTER SQLFreeConnect 
		HDBC                007D1690

PureBasic_Compi c44-c34	EXIT  SQLFreeConnect  with return code 0 (SQL_SUCCESS)
		HDBC                007D1690

PureBasic_Compi c44-c34	ENTER SQLFreeEnv 
		HENV                007D15E8

PureBasic_Compi c44-c34	EXIT  SQLFreeEnv  with return code 0 (SQL_SUCCESS)
		HENV                007D15E8
Ich denke das es ein Bug ist.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten