Quick Guess:
There could be some problem with trying to execute your data object,
outside the context of the transaction, in order to see how many rows there
are. We ran into something like this once. Maybe try executing the DO for
this purpose before doing 'begin' on the transaction.
Question:
Why are you executing setSQLTextFullInsert when you are doing an update,
not an insert?
Request for Context:
What are you trying to do? How does this relate to values coming back from
the user? Do the rows share a common foreign key value? How are primary
key values handled? Is it possible to change primary key values?
-- Curt
At 05:32 PM 8/23/99 -0400, [EMAIL PROTECTED] wrote:
>**Help! This one needs a speedy reply, please!**
>
>I'm trying to make my Save button UPDATE all rows in my Repeated in one nice
>Transaction. But alas, I'm getting an error right after I call trx. execute():
>that says:
>
>"right after I call the trx. execute()....I get this error:
>
>"spider.database.CSpTransaction.execute(): Called when database transaction is
>still 'active'. The current active one is
>automatically 'rolledback"
>
>This is my first time doing a "Trx on a Repeated" stuff, so likely I've got
>something messed up.
>
>Way down below is my code. (I've also attached it in case that's easier to
>read)
>
>You'll notice I'm doing this with my DO:
>
>DO.setSqlTextOverrideInsert(CSpSQLObject.FULL_TEXT_OVERRIDE);
>
>for (int i=numOfRows-1; i>=0; i--) {
> sSQL = new String(...);
> DO.setSqlTextFullInsert(sSQL);
> trx.addDataObject(DO);
>}
>if ((trx != null) && (trx.isActive ()) )
>{
> trx.execute();
>}
>
>I wonder if maybe i have to do this kind of thing instead:
>
>int numOfRows = _questionIndex.size();
>for (int i=numOfRows-1; i>=0; i--) {
> DO.clearAllValues();
> DO.setValue(0,name);
> DO.setValue(1,address.get(i));
> DO.addDataObjec(tDOt);
>}
>insertTrans.execute();
>if (!insertTrans.succeeded()) {
> returnValue = false;
>}
>...
>I would try that but my only problem (a very basic embarrassing one!) how do I
>specifiy what ROW (i.e the WHERE clause) I'm setting those values for?
>NOTE: I'm
>doing UPDATE not an INSERT on each row, so would I have to do "setDynCriteria"
>on the DO in each row (i.e inside the FOR loop) before I then do a
>setValue?
>
>Any pseuodocode, snippets are appreciated!
>Thanks....below is my code.....Janet
>=====================================================
> //[[SPIDER_EVENT<BtnSave_onWebEvent>
> public int BtnSave_onWebEvent(CSpWebEvent event)
> {
>int command = PROCEED;
>CSpTransaction trx = null;
>
>CSpMultiSQL doMulti;
>int update = 0;
>int nNumRows;
>
>try {
> trx = new CSpTransaction();
>
> if (trx.begin ("dsProjMgmtDB"))
> {
> // determine number of displayed rows
> doMulti = (CSpMultiSQL) CSpider.getDataObject("doWPBdgtLevel");
> doMulti.execute();
> nNumRows = doMulti.getNumOfRows();
>
> //get a handle to the dummy DO to use in the UPDATE transaction
> CSpMultiSQL doUpdate = (CSpMultiSQL)
> CSpider.getDataObject("doDummy");
>
> //this is cheap trick we need to do to get around a ND bug.
> //must do a dummy setValue on one of the fields to get the
> insert to
>work
> doUpdate.setValue ("informix_iproj_wp_bdgt_iproj_id", new
>CSpInteger(0));
>
> //NOTE: it doesn't seem to matter if I
> use setSqlTextOverrideInsert
> //or setSqlTextOverrideUpdate
> doUpdate.setSqlTextOverrideInsert(CSpSQLObject.FULL_TEXT_OVERRIDE);
>
> for(int i = 0; i < nNumRows; i++){
>
> //here I get the hidden fields & current values
>
> //next I call this method to see if anything has been changed
>
> update = isUpdate(hStart, sStart, hFinish, sFinish,
> hHrs, sHrs, hStatus, sStatus);
>
> // if row is being updated
> if (update > 0){
>
> //next I build up the SQL syntax, and it's perfectly correct!
>
> //Build the SQL for the update of the current table
> sSQL = new String("UPDATE iproj_wp_bdgt SET " +
> "plnd_bgn_dt = '" + sStart + "', plnd_end_dt = '" + sFinish +
> "', iproj_wp_stat_cd = " + sStatus + ", wp_task_bdgt_hrs = " +
> sHrs + ", last_upd_user_id = '" + sUserID + "', last_upd_ts =
>CURRENT " +
> "WHERE iproj_id = '" + sProjID + "' AND iproj_wp_nm = '" +
> sWP +
> "' AND wp_phs_cd = " + sPhs + " AND wp_seg_cd = " + sSeg +
> " AND wp_step_cd = " + sStep + " AND wp_task_cd = " + sTask +
> " AND wp_sub_task_id = '" + hSubtask + "'");
>
>
> doUpdate.setSqlTextFullInsert(sSQL);
>
> //clone the DO to make an identical copy of it to hold until
>execution
> trx.addDataObject(doUpdate);
>
> }//end of if row is being updated.
> else
> {//nothing to update
>
> CSpHtml.sendMessage ("nothing to update <BR>");
> //do something here
>
> }//end of if (update > 0)
>
> }//for loop end.
>
> //if something has been added to the trx, execute the transaction
> if ((trx != null) && (trx.isActive ()) )
> {
> trx.execute();
> }
> }
>} //end of the try
>catch (Exception ex)
>{
> /// JT later fix or remove, or maybe OK. chk how this exception affects
>trx.
> CSpHtml.sendMessage ("An error occurred while saving the " +
> "budgeting information for this segment. Please notify a " +
> "ProjTrac Administrator. Details: "+ ex + " <BR>");
>
>}
>finally
>{
> //NOTE: this code is executed regardless if an exception
> //occurred or not.
>
>
> //HELP!!! Here's where it dies. . it hits this IF test:
>
> //It says there's no active TRX.
> //this gets written to Software messages:
> // if ((trx != null) && (trx.isActive ()) )
> //and that is FALSE, so it won't go further. if I remove that if
> //and force it to go furhter, sure enough I get this error:
> //"spider.database.CSpTransaction.commit: Called when database
> transaction
> //is NOT 'active'. Call has been ignored"
>
>
> if ((trx != null) && (trx.isActive ()) )
> {
> if (trx.succeeded ())
> {
> trx.commit();
>
> CSpHtml.sendMessage("commit the trx <BR>");
>
> //load the same page
> command = load("PgBudgetLevel");
> }
> else
> {
> trx.rollback();
>
> //failure, display error page
> CSpString sErrMsg = new CSpString
> ("An error occurred while saving the budgeting
> information "
> +
> "for this segment.<BR>Please notify a ProjTrac
>Administrator.");
>
> CSpider.putUserSessionObject("soErrMsg",sErrMsg);
>
> command = load("PgErrorPage");
> }
> } //if active transaction
> else
> {//no active transaction. load same page...though really do nothing!
> return
> (SKIP)?
>
> //load the same page
> command = load("PgBudgetLevel");
>
> }
>
>} //end of the try-catch-finally
>
>return(command);
>
> }
> //]]SPIDER_EVENT<BtnSave_onWebEvent>
>
> //]]SPIDER_EVENTS END
>}
>============================================
>THX!
>Janet
>
>
>_________________________________________________________________________
>
>For help in using, subscribing, and unsubscribing to the discussion
>forums, please go to: http://www.netdynamics.com/support/visitdevfor.html
>
>For dire need help, email: [EMAIL PROTECTED]
_________________________________________________________________________
For help in using, subscribing, and unsubscribing to the discussion
forums, please go to: http://www.netdynamics.com/support/visitdevfor.html
For dire need help, email: [EMAIL PROTECTED]