Newsgroup: it.comp.www.asp
Titolo: transazioni e access

Salve a tutti,
questa volta un problemino un po' più complicato.
Ho bisogno di fare una insert di un record in cui il valore di un campo è
data dal valore di una select max sulla tabella stessa. Siccome si tratta di
un data entry via web è necessario risolvere il problema della concorrenza.
Su internet ho trovato scarsissime informazioni sull'argomento e l'unica
cosa che ho trovato è l'utilizzo delle transazioni all'interno di
ADODB.Command. Siccome però ho bisogno di ricavare prima il valore da un
recordset e poi eseguire la insert, non ho capito in che modo devo usare la
begintrans e la commit in modo da far diventare le 2 operazioni sql come
un'operazione atomica. Uso Javascript.
Un grazie a chi mi aiuta.
ciao

non sapevo che begin tran fosse usabile anche con access, sotto sintassi per
sql (a memoria, spero sia corretta):
tuastringasql="begin tran q;declare @idmax int;select @idmax=max(id) from
tuatabella;select @idmax=@idmax+1;insert into tuatabella(id)
values(@idmax);commit tran q"

Ti ringrazio per la risposta che però non mi ha risolto il problema poiché
non viene accettata da access come sequenza di istruzioni valide anche
tenendo conto che la sintassi giusta dovrebbe essere BeginTrans.
Mi spiego meglio con il codice
  var MM_editCmd = Server.CreateObject('ADODB.Command');
  MM_editCmd.ActiveConnection = MM_editConnection;
  MM_editCmd.CommandText = "insert into PERSONE
(AUFN,AUFB,AUTO,AUTC,AUTP,AUTZ,AUTQ) values
('"+v_AUFN+"','"+v_AUFB+"','"+v_AUTO+"','"+v_AUTC+"','"+v_AUTP+"','"+v_AUTZ+
"','"+v_AUTQ+"')";
  MM_editCmd.Execute();
  MM_editCmd.ActiveConnection.Close();
  var RS_Id = Server.CreateObject("ADODB.Recordset");
  RS_Id.ActiveConnection = MM_Artinf_STRING;
  RS_Id.Source = "SELECT MAX (ID_PERSONE) AS ID FROM PERSONE";
  RS_Id.CursorType = 0;
  RS_Id.CursorLocation = 2;
  RS_Id.LockType = 3;
  RS_Id.Open();
  if  (!RS_Id.EOF || !RS_Id.BOF) {aut_id=RS_Id.Fields("ID").Value};
  RS_Id.Close();
ID_PERSONE è ovviamente autoincrementante e ho bisogno che queste 2
operazioni sql diventino una operazione atomica
Ho trovato su internet questo codice (vbscript purtroppo) che però non sono
riuscito a tradurre in javascript perchè non prevede l'uso anche con
ADODB.Recordset ma solo all'interno di ADODB.Command
    Dim con
      Set con = Server.CreateObject("ADODB.Connection")
      con.Open connStr
        Response.Write "Opening Connection...<br><br>"
      con.BeginTrans
        Response.Write "BeginTrans Called...<br>"
      con.Execute("insert into TestTable(name) values ('Salim Elahi')")
        Response.Write "Trying to insert records .no1...<br>"
      con.Execute("insert into TestTable(name) values ('Arshad Khan')")
        Response.Write "Trying to insert records .no2...<br>"
      If ErrorsFound(con) = False Then
        con.CommitTrans
        Response.Write "Committing Transaction...<br>"
        Response.Write "Records added successfully...<br><br>"
      Else
        con.RollbackTrans
        Response.Write "Rolling back transaction...<br>"
        Response.Write "Records were not added...<br><br>"
      End If
    con.Close
      Response.Write "Closing Connection...<br>"
    Set con = Nothing
      Response.Write "Setting Con = Nothing...<br><br><br>"
Qualche suggerimento?

sono>riuscito a tradurre in javascript perchh non prevede l'uso anche con>ADODB.Recordset
ma solo all'interno di ADODB.Command>>    Dim con>      Set con = Server.CreateObject("ADODB.Connection")>>
     con.Open connStr>        Response.Write "Opening Connection...<br><br>">>
     con.BeginTrans>        Response.Write "BeginTrans Called...<br>">>     
con.Execute("insert into TestTable(name) values ('Salim Elahi')")>        Response.Write
"Trying to insert records .no1...<br>">>      con.Execute("insert into TestTable(name)
values ('Arshad Khan')")>        Response.Write "Trying to insert records .no2...<br>">>
     If ErrorsFound(con) = False Then>        con.CommitTrans>        Response.Write
"Committing Transaction...<br>">        Response.Write "Records added successfully...<br><br>">>
     Else>        con.RollbackTrans>        Response.Write "Rolling back transaction...<br>">
       Response.Write "Records were not added...<br><br>">>      End If>>   
con.Close>      Response.Write "Closing Connection...<br>">>    Set con = Nothing>
     Response.Write "Setting Con = Nothing...<br><br><br>">>Qualche suggerimento?
Messaggio spedito dal sito Risorse.net
La comunita' virtuale di Web masters e Web designers
http://www.risorse.net


scusate per il gap di questa risposta ma sono stato in trasferta all'isola
d'Elba  :-))
 E' proprio questo il mio problema: non so come aprire una transazione. Cioè
non so come modificare il codice javascript inserito nel mio messaggio
precedente (senza transazioni) per gestire appunto le transazioni.
E' possibile che su internet non si trovi niente? Altrimenti non vi avrei
rotto...
ciao