Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Errore anomalo in inserimento multiplo dati

    Salve ragazzi buona sera.
    Devo fare un'inserimento multiplo di record in un db. I dati nel form di inserimento mi arrivano filtrati.
    La cosa strana è questa. Sei in fase di inserimento ho tre record da inserire non mi da nessun errore.
    Se invece i nrecord sono meno di tre mi restituisce il seguente errore:

    Request object error 'ASP 0105 : 80004005'
    Index out of range
    /demoweb/InsertFile.asp, line 10
    An array index is out of range.

    La riga 10 è questa:
    arrayNomeFile(i) = Request.Form("nomeFile")(i)

    Controllando il db però mi sono reso conto che anche se mi da errore i dati li inserisce correttamente.

    Vi posto la pagina da dove arrivano i dati filtrati:
    codice:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    
    <%
    Dim rsFile__MMColParam
    rsFile__MMColParam = "1"
    If (Request.Form("id_upload") <> "") Then 
      rsFile__MMColParam = Request.Form("id_upload")
    End If
    %>
    <%
    Dim rsFile
    Dim rsFile_numRows
    
    Set rsFile = Server.CreateObject("ADODB.Recordset")
    rsFile.ActiveConnection = MM_diCastroAr_STRING
    rsFile.Source = "SELECT * FROM uploadFile WHERE id_upload = " + Replace(rsFile__MMColParam, "'", "''") + ""
    rsFile.CursorType = 0
    rsFile.CursorLocation = 2
    rsFile.LockType = 1
    rsFile.Open()
    
    rsFile_numRows = 0
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    <style type="text/css">
    <!--
    body {
    	background-color: #000000;
    	margin-left: 0px;
    	margin-top: 0px;
    	margin-right: 0px;
    	margin-bottom: 0px;
    }
    -->
    </style>
    <link href="css/diCastro.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td align="center"><table width="400" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td class="titoloSecondarioCentrato">Gestione File </td>
          </tr>
          <tr>
            <td>[img]immagini/null.gif[/img]</td>
          </tr>
          <tr>
            <td class="testoContenutiSx">Nome del File: <%=(rsFile.Fields.Item("file_1").Value)%> </td>
          </tr>
          <tr>
            <td class="testoContenutiSx">[img]immagini/null.gif[/img]</td>
          </tr>
          <tr>
            <td class="testoContenutiSx">Descrizione file: <%=(rsFile.Fields.Item("descrizione_1").Value)%></td>
          </tr>
          <tr>
            <td class="testoContenutiSx">[img]immagini/null.gif[/img]</td>
          </tr>
          <tr>
            <td class="titoloSecondarioCentrato">Assegnare il file ai seguenti utenti: </td>
          </tr>
          <tr>
            <td class="testoContenutiSx">[img]immagini/null.gif[/img]</td>
          </tr>
          <tr>
            <td class="testoContenutiSx"><form action="InsertFile.asp" method="post" name="form" id="form">
              <table width="400" border="0" cellspacing="0" cellpadding="0">
    
    <tr>
                  <td width="400">
    
    
    
    <%
    'Connessione al database
    set con = server.createobject("ADODB.Connection")
    con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("database/dicastroAR.mdb")
    
    'Controllo quali prodotti visualizzare
    set rs = Server.CreateObject("ADODB.Recordset")
    rs.activeconnection = con
    rs.cursortype = adOpenDynamic
    rs.locktype = adLockOptimistic
    strsql = "select * from login order by nomeCognome asc"
    rs.open strsql
    
    'Elenco i prodotti e li visualizzo
    while not rs.eof
    	record = request("record_" & rs("id_login"))
    	'Visualizzo i prodotti selezionati
    	if len(record) <> 0  then
    		strsql = "select * from login where id_login = " & record
    		set rs2 = con.execute(strsql)
    			'Visualizzo il prodotto
    			if not rs2.eof then
    				idLogin = rs2("id_login")
    				nomeCognome = rs2("nomeCognome")
    				username = rs2("username")
    				password = rs2("password")
    				%>
    				[*]Nome utente: <%=nomeCognome%>
    				  <input name="id_login" type="text" id="id_login" value="<%=idLogin%>" />
    				[*]Username: <%=username%>
                      <input name="nomeFile" type="text" id="nomeFile" value="<%=(rsFile.Fields.Item("file_1").Value)%>" />
    				[*]Password: <%=password%>
    				  <input name="descrizione" type="hidden" id="descrizione" value="<%=(rsFile.Fields.Item("descrizione_1").Value)%>" />
    				  <hr>
    				<%
    			end if
    		rs2.close
    		set rs2 = nothing
    	end if
    	'Fine visualizzazione
    	
    rs.movenext
    wend
    'Fine
    
    rs.close
    set rs = nothing
    
    con.close
    set con = nothing
    'Fine
    %>
    </td>
                  </tr>
                <tr>
                  <td align="center"><label>
                    <input name="Submit" type="submit" class="testoCampiModuliSingoli" value="Conferma inserimento" />
                  </label></td>
                </tr>
              </table>
                    </form>
            </td>
          </tr>
        </table></td>
      </tr>
    </table>
    </body>
    </html>
    <%
    rsFile.Close()
    Set rsFile = Nothing
    %>
    E questa è la pagina per l'inserimento:
    codice:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <%
    
    
    For i = 1 To Request.Form.count - 1
    
    ReDim Preserve arrayNomeFile(i) 
    ReDim Preserve arrayIDLogin(i) 
    
    arrayNomeFile(i) = Request.Form("nomeFile")(i)
    arrayIdLogin(i) = Request.Form("id_login")(i)
    
    Set Connn = Server.createobject("ADODB.Connection")
    Connn.connectionstring="DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.Mappath("database/dicastroAR.mdb")
    Connn.Open
    
    strSQL = "INSERT INTO  uploadFile (file_1,id_login) VALUES ('"&arrayNomeFile(i)&"',"&arrayIdLogin(i)&")"
    response.Write strSQL
    Connn.Execute(strSQL)
    
    Next
    
    response.write("Operazione effettuata con successo")
    %>
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    
    <body>
    </body>
    </html>
    Da cosa può dipendere?

    Grazie a tutti in anticipo.
    <a href="http://www.robertodidonato.it" target="_blank">Roberto Di Donato</a>

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    1) Metti in cima On Error resume Next
    2) Fatti stampare tutte le INSERT INTO così vedi cosa cerca di inserire
    3) Apri la connessione PRIMA della FOR e chiudila dopo la NEXT

    Roby

  3. #3
    Ciao Roby, ho fatto come dici te e questo è il risultato a video quando dal filtraggio dei dati devo inserire due record:

    INSERT INTO uploadFile (file_1,id_login) VALUES ('file2.jpg',7)INSERT INTO uploadFile (file_1,id_login) VALUES ('file2.jpg',6)INSERT INTO uploadFile (file_1,id_login) VALUES ('',)

    Controllo il db ma i record non sono stati inseriti.

    Se invece dal filtraggio ho 3 record il risultato della query è il seguente:
    INSERT INTO uploadFile (file_1,id_login) VALUES ('file2.jpg',7)INSERT INTO uploadFile (file_1,id_login) VALUES ('file2.jpg',6)INSERT INTO uploadFile (file_1,id_login) VALUES ('file2.jpg',5)

    In questo caso mi fa l'inserimento solo dell'ultima record dell'istruzione.

    Ti posto il codice dopo le modifiche suggerite:
    codice:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <%
    
    On Error resume Next
    
    Set Connn = Server.createobject("ADODB.Connection")
    Connn.connectionstring="DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.Mappath("database/dicastroAR.mdb")
    Connn.Open
    
    For i = 1 To Request.Form.count - 1
    
    ReDim Preserve arrayNomeFile(i) 
    ReDim Preserve arrayIDLogin(i) 
    
    arrayNomeFile(i) = Request.Form("nomeFile")(i)
    arrayIdLogin(i) = Request.Form("id_login")(i)
    
    
    
    strSQL = "INSERT INTO  uploadFile (file_1,id_login) VALUES ('"&arrayNomeFile(i)&"',"&arrayIdLogin(i)&")"
    response.Write strSQL
    
    
    Next
    
    Connn.Execute(strSQL)
    
    response.write("Operazione effettuata con successo")
    %>
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    
    <body>
    </body>
    </html>
    Ciao e buona giornata
    <a href="http://www.robertodidonato.it" target="_blank">Roberto Di Donato</a>

  4. #4

  5. #5
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Come vedi nel primo caso fa comunque tre query ma l'ultima non inserisce nulla... e da errore.

    Roby

  6. #6
    Per Optime:

    I dati da inserire potrannio essere pure più di tre. Per ora sto in fase di test e ho al massimo come risultato del filtraggio tre dati.
    Quello che non capisco è perchè anche se inserisco 2 record il ciclo della query ne sviluppa comunque 3 con l'ultimo che non inserisce nulla.

    Per Roby 72:
    Perchè comunque se io nel caso di tre record da inserire ho una query corretta e mi inserisce solo l'ultimo?

    Ora a differenza di prima non mi restituisce nessun errore la pagina ma l' INSERT non funziona correttamente.
    <a href="http://www.robertodidonato.it" target="_blank">Roberto Di Donato</a>

  7. #7
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Fuori dal ciclo devi mettere la CHIUSURA della connessione... non la sua esecuzione

    Connn.Execute(strSQL)

    che invece va messa dentro... altrimenti esegue solo l'ultima query.

    Roby

  8. #8
    Roby scusa nn mi ero reso conto della chiusura.

    Ora funziona tutto perfettamente. Grazie mille!!

    Posto il codice corretto qualora possa servire a qualcuno in futuro:
    codice:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <%
    
    On Error resume Next
    
    Set Connn = Server.createobject("ADODB.Connection")
    Connn.connectionstring="DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.Mappath("database/dicastroAR.mdb")
    Connn.Open
    
    For i = 1 To Request.Form.count - 1
    
    ReDim Preserve arrayNomeFile(i) 
    ReDim Preserve arrayIDLogin(i) 
    
    arrayNomeFile(i) = Request.Form("nomeFile")(i)
    arrayIdLogin(i) = Request.Form("id_login")(i)
    
    
    
    strSQL = "INSERT INTO  uploadFile (file_1,id_login) VALUES ('"&arrayNomeFile(i)&"',"&arrayIdLogin(i)&")"
    response.Write strSQL
    
    Connn.Execute(strSQL)
    Next
    
    Connn.close
    
    response.write("Operazione effettuata con successo")
    %>
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    
    <body>
    </body>
    </html>
    Ciao a tutti e buona giornata.
    <a href="http://www.robertodidonato.it" target="_blank">Roberto Di Donato</a>

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    buongiorno, ho più o meno lo stesso problema ma a quanto pare a me non funziona

    pagina del form
    codice:
    SQL = "SELECT Giocatori.NomeGiocatore, giocatori.CodiceGiocatore, Clubs.NomeClub, punteggi.flgNonPartito, punteggi.CodiceGara "
    SQL = SQL & "FROM Clubs INNER JOIN (Giocatori INNER JOIN punteggi ON Giocatori.CodiceGiocatore = punteggi.codiceGiocatore) ON Clubs.CodiceClub = Giocatori.CodiceClub "
    SQL = SQL & "WHERE codicegara = "& Request.Querystring("cod") &" "
    SQL = SQL & "AND flgRitirato = true "
    SQL = SQL & "GROUP BY Giocatori.NomeGiocatore, Giocatori.CodiceGiocatore, Clubs.NomeClub, punteggi.flgNonPartito, punteggi.CodiceGara "
    SQL = SQL & "ORDER BY giocatori.nomegiocatore asc "
    
    	Set rit = Server.CreateObject("ADODB.Recordset")
    	rit.open SQL,objConn,3,1
    
    	if not rit.EOF then
    		rit.MoveFirst
    		while not rit.EOF
    
    %>
    <tr>
    <td width="340"><%=rit("nomegiocatore") & " - " & rit("nomeclub") %>
    <input type="hidden" name="codicegiocatore" value="<%= rit("codicegiocatore")%>"></td>
    <td width="170" align="center"><input type="text" name="pista" maxlength="2" size="10"></td>
    <td width="170" align="center"><input type="text" name="giro" maxlength="2" size="10"></td>
    </tr>
    
    <%
    			rit.MoveNext
    		wend
    	end if
    e poi la passo alla pagina dell'inserimento come descritto sopra
    codice:
    On Error resume Next
    
    Set Conn = Server.CreateObject("ADODB.Connection")
    strUserConn= Application("dbUserconn")
    Conn.Open strUserConn
    
    For i = 1 To Request.Form.count - 1
    
    codgiocrit(i) = Request.Form("codgiocrit")(i)
    pista(i) = Request.Form("pista")(i)
    giro(i) = Request.Form("giro")(i)
    
    
    	SQL = "insert into verbale1 (codicegiocatore, pista, giro) "
    	SQL = SQL & " Values('"
    	SQL = SQL & codicegara & "','"
    	SQL = SQL & codgiocrit(i) & "','"
    	SQL = SQL & true(i) & "','"
    	SQL = SQL & pista(i) & "','"
    	SQL = SQL & giro(i) & "') "
    
    
    Response.Write "rit sql...: " & SQL & "
    "
    
    
    				set rs=Conn.execute (SQL)
    			next
    ma non mi inserisce niente, anzi
    il response è:
    rit sql...: insert into verbale1 (codicegiocatore, pista, giro) Values('1','

    per tutti quanti i giocatori nella tabella punteggi.
    quindi c'è qualcosa che non va.

    grzie

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    Ho risolto!!

    mancava il ReDim

    2 cose:
    1) cosa è ReDim?
    2) perchè il response SQL mi visualizza tutti i giocatori in tabella ma inserisce giustamente solo quelli che devo inserire?

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.