448{
449
450 for (size_t i = 0; i < Query::__paramCount; i++) {
452 return false;
453 }
454
455 SQLRETURN rc = SQLExecute(
__hstmt);
456 switch (rc) {
457 case SQL_NO_DATA: {
458
459 Query::__affectedRows = 0;
460 return true;
461 }
462 case SQL_NEED_DATA: {
464 SQLPOINTER ptr;
465 while ((rc = SQLParamData(
__hstmt, &ptr)) == SQL_NEED_DATA) {
466 if (!(((ODBCParam*)ptr)->onNeedData())) {
467 return false;
468 }
469 }
471 break;
472 }
473 case SQL_SUCCESS: {
474 break;
475 }
476#if 0
477
478 case SQL_SUCCESS_WITH_INFO: {
479
480 bool ignore = true;
481 SQLSMALLINT RecNumber = 0;
482 SQLINTEGER NativeError;
483 SQLCHAR SQLState[SQL_SQLSTATE_SIZE + 1];
484 SQLCHAR ErrorMsg[1024];
485 SQLSMALLINT ErrorMsgLen;
486 while ((rc = SQLGetDiagRecA(
487 SQL_HANDLE_STMT,
__hstmt, ++RecNumber, SQLState, &NativeError,
488 ErrorMsg,
__countof(ErrorMsg, SQLCHAR), &ErrorMsgLen
489 )) == SQL_SUCCESS) {
491 RecNumber, SQLState, ErrorMsgLen, ErrorMsg);
492 if (memcmp(SQLState, "22001", 5)) {
493 ignore = false;
494 break;
495 }
496 }
499 if (ignore) {
500 break;
501 }
502 }
503#endif
504 default: {
506 return false;
507 }
508 }
509
510
511 for (size_t i = 0; i < Query::__paramCount; i++) {
512 if (!
__params[i].onAfterExecute()) {
513 return false;
514 }
515 }
516
517 SQLSMALLINT columnCount = 0;
518 rc = SQLNumResultCols(
__hstmt, &columnCount);
519 if (!SQL_SUCCEEDED(rc)) {
521 return false;
522 }
524
525
526
527 Query::__eof = columnCount == 0;
528 Query::__affectedRows = -1;
529
530 if (columnCount) {
531
533 return false;
534 }
535 }
536 else {
537
538
539 SQLLEN rowCount;
540 rc = SQLRowCount(
__hstmt, &rowCount);
541 if (!SQL_SUCCEEDED(rc)) {
543 return false;
544 }
546 Query::__affectedRows = rowCount;
547 }
549
550 return true;
551}
#define __countof(array, type)
#define __DCL_TRACE1_N(fmt, arg)
#define __DCL_TRACE2_N(fmt, arg1, arg2)
#define __DCL_TRACE4_N(fmt, arg1, arg2, arg3, arg4)
#define __DCL_TRACE0_N(fmt)
#define __SET_ERROR_HANDLE(_SQLCODE)
#define __SET_INFO_HANDLE(_rc, _htype, _handle)
#define __DCL_ASSERT(expr)
bool initFields(SQLSMALLINT _columnCount)