[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference orarep::nomahs::odbc_rdb_driver

Title:DEC ODBC Driver
Notice:DEC ODBC Driver V2.0 Now Available
Moderator:SQLSRV::MAVRIS
Created:Tue Dec 29 1992
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:1357
Total number of notes:4864

1314.0. "Does VB passthru SQL work in READ ONLY mode??" by BROKE::BASTINE () Fri Mar 21 1997 10:45

I have a customer trying to write a VB application using DAO.  

He generates some SQL with his program and then uses VB passthru SQL to 
execute the SQL statements he generated.  Unfortunately his application
is failing with a 3146 error, which is ODBC call failed.

I had him turn on client logging and the error is that he is trying to
insert during a READ ONLY transaction, but he isn't setting the transaction
to read only.  Here is a snippet from the client log file.... my question
is this:

I know that MSAccess passthru SQL will only allow read only transactions, unless
you use compound statements (or something like that) to specifically set the
transacation otherwise.  Does VB passthru SQL work the same way?  How/what
can he to in order to pass an insert through passthru SQL to his Rdb db?
.
.
.
ROUTINE LEVEL LOG
----SQLSRV_EXECUTE_IMMEDIATE
--------SQL STATEMENT
------------len: 54, value: DECLARE TRANSACTION READ ONLY WAIT CONSISTENCY LEVEL
------------ 2

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET LENGTH: 68

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET ID: 18, PACKET SEQUENCE: 0
--------SQLSRV_EXECUTE_IMMEDIATE
------------SQL STATEMENT
----------------SQLSRV_ASCII_STRING, len: 54
--------------------len: 54, value: DECLARE TRANSACTION READ ONLY WAIT CONSISTEN
--------------------CY LEVEL 2
--------END OF MESSAGE

PROTOCOL LEVEL LOG CLIENT: read
----PACKET LENGTH: 20

PROTOCOL LEVEL LOG CLIENT: read
----PACKET ID: 18, PACKET SEQUENCE: 0
--------SQLSRV_EXECUTE_IMMEDIATE ACK
------------STATUS
----------------SQLSRV_GENERALIZED_NUMBER, len: 1
--------------------len: 1, value: 0
------------EXECUTE PARAMETER
----------------SQLSRV_GENERALIZED_NUMBER, len: 1
--------------------len: 1, value: 0
--------END OF MESSAGE

ROUTINE LEVEL LOG
----SQLSRV_PREPARE
--------SQL STATEMENT
------------len: 150, value: INSERT INTO INSURANCE_Policies (  Insurance_policie
------------s_stamp,  Insurance_Effective_Date ) VALUES ( '01-Jan-1997 00:00:00.
------------00', '30-Dec-1899 23:59:59.99')

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET LENGTH: 164

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET ID: 19, PACKET SEQUENCE: 0
--------SQLSRV_PREPARE
------------SQL STATEMENT
----------------SQLSRV_ASCII_STRING, len: 150
--------------------len: 150, value: INSERT INTO INSURANCE_Policies (  Insurance
--------------------_policies_stamp,  Insurance_Effective_Date ) VALUES ( '01-Ja
--------------------n-1997 00:00:00.00', '30-Dec-1899 23:59:59.99')
--------END OF MESSAGE

PROTOCOL LEVEL LOG CLIENT: read
----PACKET LENGTH: 21

PROTOCOL LEVEL LOG CLIENT: read
----PACKET ID: 19, PACKET SEQUENCE: 0
--------SQLSRV_PREPARE ACK
------------STATEMENT ID
----------------SQLSRV_GENERALIZED_NUMBER, len: 7
--------------------len: 7, value: 3542352
--------END OF MESSAGE

ROUTINE LEVEL LOG
----SQLSRV_EXECUTE
--------STATEMENT ID
------------3542352
--------EXECUTE_FLAG: 0

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET LENGTH: 25

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET ID: 20, PACKET SEQUENCE: 0
--------SQLSRV_EXECUTE
------------STATEMENT ID
----------------SQLSRV_GENERALIZED_NUMBER, len: 7
--------------------len: 7, value: 3542352
------------REPEAT COUNT
----------------len: 2, value: 1
--------END OF MESSAGE

PROTOCOL LEVEL LOG CLIENT: read
----PACKET LENGTH: 99

PROTOCOL LEVEL LOG CLIENT: read
----PACKET ID: 20, PACKET SEQUENCE: 0
--------ERROR ACK
------------ERROR_VALUE_TAG
----------------SQLSRV_GENERALIZED_NUMBER, len: 4
--------------------len: 4, value: -817
------------SPECIFIC_ERROR_TAG
----------------SQLSRV_GENERALIZED_NUMBER, len: 1
--------------------len: 1, value: 0
------------SPECIFIC_ERROR_TEXT_TAG
----------------SQLSRV_ASCII_STRING, len: 72
--------------------len: 72, value: %RDB-E-READ_ONLY_TRANS, attempt to update du
--------------------ring a read-only transaction
--------END OF MESSAGE

ROUTINE LEVEL LOG
----SQLSRV_RELEASE_STATEMENT
--------STATEMENT ID
------------[0] 3542352

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET LENGTH: 25

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET ID: 21, PACKET SEQUENCE: 0
--------SQLSRV_RELEASE_STATEMENT
------------STATEMENT COUNT
----------------len: 2, value: 1
------------STATEMENT ID
----------------SQLSRV_GENERALIZED_NUMBER, len: 7
--------------------len: 7, value: 3542352
--------END OF MESSAGE

PROTOCOL LEVEL LOG CLIENT: read
----PACKET LENGTH: 19

PROTOCOL LEVEL LOG CLIENT: read
----PACKET ID: 21, PACKET SEQUENCE: 0
--------SQLSRV_RELEASE_STATEMENT ACK
------------STATUS
----------------SQLSRV_GENERALIZED_NUMBER, len: 1
--------------------len: 1, value: 0
------------STATEMENT COUNT
----------------len: 2, value: 1
--------END OF MESSAGE

ROUTINE LEVEL LOG
----SQLSRV_EXECUTE_IMMEDIATE
--------SQL STATEMENT
------------len: 54, value: DECLARE TRANSACTION READ ONLY WAIT CONSISTENCY LEVEL
------------ 2

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET LENGTH: 68

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET ID: 22, PACKET SEQUENCE: 0
--------SQLSRV_EXECUTE_IMMEDIATE
------------SQL STATEMENT
----------------SQLSRV_ASCII_STRING, len: 54
--------------------len: 54, value: DECLARE TRANSACTION READ ONLY WAIT CONSISTEN
--------------------CY LEVEL 2
--------END OF MESSAGE

PROTOCOL LEVEL LOG CLIENT: read
----PACKET LENGTH: 106

PROTOCOL LEVEL LOG CLIENT: read
----PACKET ID: 22, PACKET SEQUENCE: 0
--------ERROR ACK
------------ERROR_VALUE_TAG
----------------SQLSRV_GENERALIZED_NUMBER, len: 2
--------------------len: 2, value: -1
------------SPECIFIC_ERROR_TAG
----------------SQLSRV_GENERALIZED_NUMBER, len: 1
--------------------len: 1, value: 0
------------SPECIFIC_ERROR_TEXT_TAG
----------------SQLSRV_ASCII_STRING, len: 81
--------------------len: 81, value: %SQL-F-NO_DCLTXN, You cannot declare a trans
--------------------action while a transaction is active.
--------END OF MESSAGE

ROUTINE LEVEL LOG
----SQLSRV_PREPARE
--------SQL STATEMENT
------------len: 150, value: INSERT INTO INSURANCE_Policies (  Insurance_policie
------------s_stamp,  Insurance_Effective_Date ) VALUES ( '01-Jan-1997 00:00:00.
------------00', '30-Dec-1899 23:59:59.99')

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET LENGTH: 164

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET ID: 23, PACKET SEQUENCE: 0
--------SQLSRV_PREPARE
------------SQL STATEMENT
----------------SQLSRV_ASCII_STRING, len: 150
--------------------len: 150, value: INSERT INTO INSURANCE_Policies (  Insurance
--------------------_policies_stamp,  Insurance_Effective_Date ) VALUES ( '01-Ja
--------------------n-1997 00:00:00.00', '30-Dec-1899 23:59:59.99')
--------END OF MESSAGE

PROTOCOL LEVEL LOG CLIENT: read
----PACKET LENGTH: 21

PROTOCOL LEVEL LOG CLIENT: read
----PACKET ID: 23, PACKET SEQUENCE: 0
--------SQLSRV_PREPARE ACK
------------STATEMENT ID
----------------SQLSRV_GENERALIZED_NUMBER, len: 7
--------------------len: 7, value: 3542352
--------END OF MESSAGE

ROUTINE LEVEL LOG
----SQLSRV_EXECUTE
--------STATEMENT ID
------------3542352
--------EXECUTE_FLAG: 0

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET LENGTH: 25

PROTOCOL LEVEL LOG CLIENT: write (logonly)
----PACKET ID: 24, PACKET SEQUENCE: 0
--------SQLSRV_EXECUTE
------------STATEMENT ID
----------------SQLSRV_GENERALIZED_NUMBER, len: 7
--------------------len: 7, value: 3542352
------------REPEAT COUNT
----------------len: 2, value: 1
--------END OF MESSAGE

PROTOCOL LEVEL LOG CLIENT: read
----PACKET LENGTH: 99

PROTOCOL LEVEL LOG CLIENT: read
----PACKET ID: 24, PACKET SEQUENCE: 0
--------ERROR ACK
------------ERROR_VALUE_TAG
----------------SQLSRV_GENERALIZED_NUMBER, len: 4
--------------------len: 4, value: -817
------------SPECIFIC_ERROR_TAG
----------------SQLSRV_GENERALIZED_NUMBER, len: 1
--------------------len: 1, value: 0
------------SPECIFIC_ERROR_TEXT_TAG
----------------SQLSRV_ASCII_STRING, len: 72
--------------------len: 72, value: %RDB-E-READ_ONLY_TRANS, attempt to update du
--------------------ring a read-only transaction
--------END OF MESSAGE
T.RTitleUserPersonal
Name
DateLines
1314.1use a compound statementM5::JBALOGHFri Mar 21 1997 10:5819
    The db engine for VB is the same as for Access and the same rules
    apply. These products specificly set the transaction mode to read only
    before executing the statement.
    
    The only way to do this is to use a compound statement. I have done
    this many times in the past on my own applications. 
    
    begin
    set transaction read write reserving whatever;
    do work;
    commit;
    end
    
    Be sure to commit or rollback the transaction before the end. 
    
    John
    
    PS: The term and implementation of SQLPassThrough is specific to
    Microsoft tools. This is a non-issue with native ODBC. 
1314.2thxBROKE::BASTINEFri Mar 21 1997 11:365
Thanks John!

That's what I thought.

Renee
1314.3What dies first if they don't commit/rollback ?NOMAHS::SECRISTRdb WWS; [email protected]Mon Mar 24 1997 14:5513
    
    ;  Be sure to commit or rollback the transaction before the end.
    
    I have a customer who never commits or rolls back (see 1318.0).
    What if compound statements are not involved ?  Will it allow
    you to keep executing SELECTs until you run out of memory on 
    the client or server and die ?  Would AUTOCOMMIT influence a
    read only transaction or only insert/update/deletes ?  
    
    Regards,
    rcs