Re: SQLBulkOperations - Mailing list pgsql-odbc

From Hiroshi Inoue
Subject Re: SQLBulkOperations
Date
Msg-id 5392AA58.5030101@tpf.co.jp
Whole thread Raw
In response to Re: SQLBulkOperations  ("John C. Frickson" <john@frickson.us>)
Responses Re: SQLBulkOperations  ("John C. Frickson" <john@frickson.us>)
List pgsql-odbc
(2014/06/07 1:14), John C. Frickson wrote:
> Ok, I boiled my code down to the following sample. The comments show
> the errors that get printed.
>
> ----------8<----------8<----------8<----------8<----------8<----------8<----------
> #include <stdio.h>
> #include <string.h>
> #include <sql.h>
> #include <sqlext.h>
>
> void printerr(int);
>
> SQLHANDLE    henv, hdbc, hstmt;
>
> int main()
> {
>     SQLLEN        length_or_ind[3];
>     char        connOut[2048], colVal[3][32];
>     const char    *query = "SELECT * FROM pvsystem.loginfails WHERE userid='foo'";
>     const char    *cstr = "DRIVER={PSQL};SERVER=server.frickson.pvt;UID=pvwebuser;"
>             "PWD=Zjgg2WuNwO52XGVT;UseServerSidePrepare=1;DATABASE=PortVantage;";
>     int            i, rc;
>
>     colVal[0][0] = colVal[1][0] = colVal[2][0] = 0;
>
>     rc = SQLSetEnvAttr(NULL, SQL_ATTR_CONNECTION_POOLING, (SQLPOINTER)SQL_CP_ONE_PER_HENV, 0);
>     if (rc) printerr(rc);
>     rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
>     if (rc) printerr(rc);
>     rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
>     if (rc) printerr(rc);
>     rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

>     rc = SQLSetConnectAttr(hdbc, SQL_ATTR_ODBC_CURSORS, (SQLPOINTER)SQL_CUR_USE_ODBC, 0);
 >     if (rc) printerr(rc);

Please try to skip the above SQLSetConnectAttr operation.

>     rc = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)cstr, strlen(cstr),
>                         (SQLCHAR*)connOut, 2048, NULL, SQL_DRIVER_NOPROMPT);
>     if (rc) printerr(rc);
>     rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
>     if (rc) printerr(rc);
>     rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, SQL_IS_INTEGER);
>     if (rc) printerr(rc);
>     rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_KEYSET_DRIVEN, 0);
> // rc=1  State=01S02  Native=0  Message=[unixODBC][Driver Manager]Option value changed
>     if (rc) printerr(rc);
>     rc = SQLSetStmtAttr(hstmt, SQL_ATTR_MAX_ROWS, 0, SQL_IS_INTEGER);
>     if (rc) printerr(rc);
>     rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER)SQL_CONCUR_ROWVER, 0);
> // rc=1  State=01S02  Native=0  Message=[unixODBC][Driver Manager]Option value changed
>     if (rc) printerr(rc);
>     rc = SQLPrepare(hstmt, (UCHAR*)query, strlen(query));
>     if (rc) printerr(rc);
>     rc = SQLExecute(hstmt);
>     if (rc) printerr(rc);
>     for (i = 0; i < 3; ++i) {
>         length_or_ind[i] = SQL_NTS;
>         rc = SQLBindCol(hstmt, (SQLUSMALLINT)i+1, SQL_C_CHAR, colVal[i], 32, &length_or_ind[i]);
>         if (rc) printerr(rc);
>     }
>     rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
> // rc=100 - Record Not Found
>     if (rc) printerr(rc);
>     strcpy(colVal[0], "foo");
>     length_or_ind[0] = 3;
>     strcpy(colVal[1], "1");
>     length_or_ind[1] = 1;
>     strcpy(colVal[2], "2014-06-06 10:15:00");
>     length_or_ind[2] = 19;
>     rc = SQLBulkOperations(hstmt, SQL_ADD);
> // rc=-1  State=IM001  Native=0  Message=[unixODBC][Driver Manager]Driver does not support this function
>     if (rc) printerr(rc);
>     rc = 0;
> }



pgsql-odbc by date:

Previous
From: "Inoue, Hiroshi"
Date:
Subject: Re: Need new psqlODBC release to update OpenSSL again
Next
From: "John C. Frickson"
Date:
Subject: Re: SQLBulkOperations