Ciao a tutti,
questo è il mio problema.
All'interno di una form ho inserito il codice (che trovate qui sotto) che richiama una procedura pl/sql per l'aggiornamento dei dati su un DB Oracle. La procedura (vi posto anche questa) è semplicissima. Infatti esegue un semplice update in tabella.
La form rappresenta le informazioni di un cliente e i dati che devo modificare sono i servizi da questo acquistati. Ora, nella tabella RelaServAzie che vado a modificare i servizi possono essere distribuiti su più mesi (ovvero vari record) oppure su un solo mese (un solo record).

Bene, l'update funziona qualche volta si e altre no VVoVe: , ovvero alcune volte mi esegue l'update, mentre altre non fa assolutiamente nulla, oppure mi da questo errore

document.datiformserv(); è nullo o non è un oggetto
Qualche consiglio, perchè sono davvero in alto mare

Grazie a tutti in anticipo.

Di seguito i codici (in alcuni casi sono dovuto andare a capo per problemi di visualizzazione di questo post)


pagina principale

codice:
      <tr>
         <td class=rigatabella colspan="4" bgcolor="#979CA9">
        SERVIZI
         </td>
        </tr>
        <%
      sqlcont = "SELECT CODI_AZIE,CODI_SERV FROM RELASERVAZIE 
where CODI_AZIE="&vc_codiazie&" GROUP BY CODI_AZIE,CODI_SERV"
      Set rscont = Server.CreateObject("ADODB.Recordset")
      Set cn = Server.CreateObject("ADODB.Connection")
      cn.Open  application("ConnDB")
      Set rscont.ActiveConnection = cn
      rscont.Open sqlcont, cn
%>
 <SCRIPT LANGUAGE="JavaScript">
<%
      do while not(rscont.eof)
%>   
 
function checkCommitServ() {

   document.datiformserv.submit();
}

<%

      rscont.movenext
      loop
%>
    </script>
           
      <%
      
      sqlvasprelaservaziefatt ="SELECT CODI_AZIE,CODI_SERV FROM RELASERVAZIE 
where CODI_AZIE="&vc_codiazie&" GROUP BY CODI_AZIE,CODI_SERV"
      
      response.write sqlvasprelaservaziefatt 
      Set rsserv = Server.CreateObject("ADODB.Recordset")
      Set cn = Server.CreateObject("ADODB.Connection")
      cn.Open  application("ConnDB")
      Set rsserv.ActiveConnection = cn
      rsserv.Open sqlvasprelaservaziefatt, cn
      if not rsserv.EOF then
      %>
      <tr>
         <td colspan="4">
         <table border="0" width="100%">
          <tr class=rigatabella>
            <td width="40%" class=rigatabella>Servizio</td>
            <td width="40%" class=rigatabella>Data Disdetta</td>
            <td width="10%" align="center" class=rigatabella >Modifica</td>
          </tr>
<%
      do while not(rsserv.eof)
%>    
    <form name="datiformserv" method="post" 
action="procedure/pr_modirelaservaziedatadisd.asp?vc_tipooper=U">          
          <tr>
          <td>
          <%
          	sqldescserv =" SELECT DESC_SERV "_
         		&"    from PARASERV "_
         		&"    where CODI_SERV='"& rsserv("CODI_SERV") &"' "
         		
         		response.write sqldescserv
       
         		Set rsdescserv = cn.Execute(sqldescserv) 
         		if not rsdescserv.eof then      
         		%>
<input type="text" readonly maxlength="300" name="CODI_AZIE" 
value="<%=rsserv("CODI_AZIE")%>" size="38" class="campireadonlynotnull">
<input type="text" readonly maxlength="300" name="CODI_SERV" 
value="<%=rsserv("CODI_SERV")%>" size="38" class="campireadonlynotnull">
<input type="text" readonly maxlength="300" name="DESC_SERV" 
value="<%=rsdescserv("DESC_SERV")%>" size="60" class="campireadonlynotnull">
	         <% 
	           end if
          		rsdescserv.Close
          		set rsdescserv = Nothing
             %>
         	   
              	</td>
              	<td>
    	        <%
          	sqldatadisd =" SELECT DATA_DISD "_
         		&"    from RELASERVAZIE "_
         		&"    where CODI_SERV='"& rsserv("CODI_SERV") &"' "_
         		&"    AND   CODI_AZIE='"& rsserv("CODI_AZIE") &"' "
         		
         		response.write sqldescserv
       
         		Set rsdatadisd = cn.Execute(sqldatadisd)
         		if not rsdatadisd.eof then
         		%>

              	
<input type="text" maxlength="100" name="DATA_DISD" 
value="<%=rsdatadisd("DATA_DISD")%>" onchange="javascript:contdata(DATA_DISD)"  size="12" class="campinull">
          		<% 
          		end if
          		rsdatadisd.Close
          		set rsdatadisd = Nothing
             %>
              	</td>
            	<td align="center">   
<a href="javascript:javascript:checkCommitServ()" title="Salva le modifiche">
[img]images/Icons/images.jpg[/img]</a>
            	</td>
            
          </tr>
  	</form>      
      <%      
      rsserv.movenext
      loop
      %>

    </table>
  

      <%      
		rsserv.Close
       set rsserv = Nothing
       
       rscont.Close
       set rscont = Nothing
       
       else
      %>
     <td colspan="4">
     <table border="0" width="100%">
          <tr class=testolabel>
      	 <td>
      	  Nessun servizio acquistato
      	 <td>
      </tr>
      </table>
       <%
       end if 
       
      %>
         	</td>
          </tr>
Procedura pr_modirelaservaziedatadisd.asp
codice:
<%
iStoredProc = 4
Set conn = Server.CreateObject("ADODB.Connection") 
set command = Server.CreateObject("ADODB.Command") 
      conn.Open  application("ConnDB")
command.ActiveConnection = conn 
command.CommandText = "PR_MODISERVAZIEDATADISD" 
command.CommandType = iStoredProc
vc_user = session("vc_userprop")

if request("vc_tipooper")="U" then
  'PROCEDURA DI MODIFICA  
  ' parametri 
    ' formato: nomecampo, tipo CAMPO 200=VARCHAR,7= DATA, tipo di parametro 1= INPUT 2=OUTPUT , lunghezza, valore 
    set objParameter = command.CreateParameter ("VN_CODI_SERV_AZIE_FATT",200,1,200,request.form("CODI_AZIE")) 
    command.Parameters.Append objParameter
    set objParameter = command.CreateParameter ("VN_CODI_PIAN_FATT",200,1,200,request.form("CODI_SERV")) 
    command.Parameters.Append objParameter
    set objParameter = command.CreateParameter ("VN_IMPO_MENS",200,1,200,request.form("DATA_DISD")) 
    command.Parameters.Append objParameter
    set objParameter = command.CreateParameter ("VC_USERPROC",200,1,50,vc_user) 
    command.Parameters.Append objParameter
    set objParameter = command.CreateParameter ("VC_CODITIPOOPER",200,1,2,"U") 
    command.Parameters.Append objParameter
'PAREMETRI OUTPUT  
  set objParameter = command.CreateParameter ("vc_coditiro",200,2,16) 
  command.Parameters.Append objParameter
  set objParameter = command.CreateParameter ("vc_codierro",200,2,16) 
  command.Parameters.Append objParameter
  set objParameter = command.CreateParameter ("vc_descerro",200,2,200) 
  command.Parameters.Append objParameter
  command.Execute , , adExecuteNoRecords 
  ' VERIFICO EVENTUALI ERRORI  
  vn_coditiro = command.Parameters("vc_coditiro") 
  vc_risuinse = command.Parameters("vc_descerro") 
  vc_codirisuinse = command.Parameters("vc_codierro")
  'Response.write "esito " & vc_risuinse 
  
  	 response.redirect "../anagazie.asp?codiazie="&request.form("CODI_AZIE")&"&err="&vc_codirisuinse&"&descerro="&vc_risuinse
end if
%>
Procedura PL/SQL
codice:
CREATE OR REPLACE  PROCEDURE "SIAG"."PR_MODISERVAZIEDATADISD" (
    VN_CODIAZIE     IN VARCHAR2,
                                                VN_CODISERV     IN VARCHAR2,
                                                VC_DATADISD     IN VARCHAR2,
                                                VC_USERPROC     IN VARCHAR2,
                                                VC_CODITIPOOPER IN VARCHAR2,
                                                V_CODINEXTVAL   OUT VARCHAR2,
                                                       V_CODIERRO      OUT VARCHAR2,
                                                       V_DESCERRO      OUT VARCHAR2)
IS
 VC_DESC_MODI VARCHAR2(4000);
BEGIN
IF VC_CODITIPOOPER ='U' --MODIFICA DEI DATI
THEN
 BEGIN
     UPDATE RELASERVAZIE set
       DATA_DISD  = to_date(VC_DATADISD,'dd/mm/yyyy')
           WHERE CODI_AZIE      = VN_CODIAZIE
           AND   CODI_SERV      = VN_CODISERV;


    Commit;

           IF VN_CODISERV= 2 then
           BEGIN
            UPDATE ANAGUTEN set
           DATA_FINE  = to_date(VC_DATADISD,'dd/mm/yyyy')
               WHERE NOME_UTEN   = (SELECT USER_PROP FROM ANAGAZIE WHERE CODI_AZIE=VN_CODIAZIE);
    END;
           END IF;


    Commit;
   V_CODIERRO:=2;
   V_DESCERRO :='Il dato è stato modificato';
         EXCEPTION
    WHEN OTHERS THEN
    --***********************************************************************************
    --  L'ERRORE NELLA MODIFICA DEI DATI
    --***********************************************************************************
   V_CODIERRO:=1;
    PR_GESTERRO (sqlcode,V_DESCERRO);
   P_SPEDMAILSERV('Errore Procedura PR_MODISERVAZIEDATADISD',
         'Errore UPDATE2. Azienda : '||VN_CODIAZIE ||' Servizio: '||VN_CODISERV||' Errore Oracle '||sqlcode||'-'||sqlerrm);
  END;
 END IF;
END;