Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Problema INSERT INTO

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    260

    Problema INSERT INTO

    Ciao a tutti,
    ho il seguente problema, ho creato un form tramite il quale vado a modificare un database, quello che dovrebbe fare è eliminare tutti i record con l'id che gli passo e inserire quindi nel database i nuovi con i relativi valori recuperati dal form, l'unico problema è che di eliminarli li elimina tutti correttamente, mentre con l'insert into, quando deve creare i nuovi record, non crea i record distinti inserendo i giusti dati dove dovrebbero andare, ma crea un solo nuovo record con dentro i dati raccolti da tutti.
    Credo che ci sia da fare un ciclo ma non ho ancora capito come, questo è il codice:
    codice:
    <%
    DataNow = Now()
    Oggetto = Replace(Request.form("Oggetto"), "'", "''")
    TestoNews = Replace(Request.form("TestoNews"), "'", "''")
    ID = request.form("IDcheck")
    
    if len(ID) = 0 then
    Response.Write("Nessuna ..............")
    Response.Write("</br>Torna indietro .")
    Response.End
    End If
    
    
    if len(ID) > 0 then
    	Set Conn = Server.CreateObject("ADODB.Connection") 
    	conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database/News.mdb")
    	SQL = "DELETE * FROM [News] WHERE ID IN (" & ID & ")"
    	Conn.Execute SQL
    	SQL = "INSERT INTO News (Data, Oggetto, TestoNews, Pubblica) VALUES ('"& DataNow &"', '"& Oggetto &"', '"& TestoNews &"' ,'S')" 
    	Conn.Execute SQL
        conn.close
        set conn = nothing
    end if
    Response.Write("News Pubblicate Correttamente" & "</br>")
    Response.Write("</br>Visualizza News")
    Response.Write("</br>Torna indietro")
    %>
    ringrazio e aspetto suggerimenti
    ciao!!

  2. #2

    Re: Problema INSERT INTO

    Originariamente inviato da mic3000
    mentre con l'insert into, quando deve creare i nuovi record, non crea i record distinti inserendo i giusti dati dove dovrebbero andare, ma crea un solo nuovo record con dentro i dati raccolti da tutti.
    Non ho capito dove possiedi questi valori, dato che nel codice mostrato c'è solo un possibile record da aggiungere (data, oggetto, testonews).

    Ciau!
    - Dean

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    260
    io invio i valori da un form che è dentro un ciclo, quindi , mi passa tutti i valori di piu record, i dati arrivano tutti e in modo corretto solo che quando vado a fare la insert mi scrive tutto nello stesso record, e non me li inserisce suddivisi come vengono passati...
    Non so se sono riuscito a spiegarmi!!!
    Posto un po di codice che forse è meglio!
    Questo è il form
    codice:
    <form NAME="NewsDaPubblicare" method="POST" action="ModNewsDaPubblicare.asp">
    			
    <table>
    	<tr>
    		<td>Stato Pubblicazione:</td>
    		<%
    		If RS("Pubblica")="S" Then 
    		Response.Write ("Pubblicato")
    		Else
    		Response.Write ("In Attesa di Pubblicazione")
    		End If
    		%>
    		</td>
    		<td>News N°:</td>
    		<td><input type="text" readonly="readonly" size="10" name="NumNews" value="<%Response.Write RS("ID")%>"></td>
    		<td></td>
    		<td>Data Inserimento:</td>
    		<td><input type="text" readonly="readonly" size="10" name="Data" value="<%Response.Write(FormatDateTime(RS("Data"),2))%>"></td>
    	</tr>
    </table>
    <table>
    	<tr>
    		<td>Oggetto:</td>
    		<td><input type="text" readonly="readonly" style="border:none" name="Oggetto" size="95" value="<%=Rs("Oggetto")%>"></td>
    	</tr>
    	<tr>
    		<td></td>
    		<td colspan="3"><textarea readonly="readonly" style="border:none" cols="77" rows="15" name="TestoNews"><%Response.write Rs("TestoNews")%></textarea></td>
    	</tr>
    </table>
    <table width="700px">
    <tr>
    	<td><input type="button" value="Modifica" onclick="location.replace('ModNewsDaPubblicare.asp?ID=<%Response.write Rs("ID")%>')"></td>
    </tr>
    <tr>
    	<td><input type="checkbox" name="IDcheck" value="<%=Rs("ID")%>">Spunta per pubblicazione</td>
    </tr>
    <tr>
    	<td></td>
    </tr>
    </table>
    <%
    
    iRecordsShown = iRecordsShown + 1
    RS.MoveNext
    Loop
    
    RS.Close 
    Set RS=Nothing 
    conn.Close 
    Set conn=Nothing 
    %>
    <%End if%>
    
    
    <table width="700px">
    	<tr>
    		<td class="center">
    			<input type="button" value="Check all" onClick="this.value=check(this.form.IDcheck)"><input type="submit" value="Pubblica le News selezionate" onClick="document.NewsDaPubblicare.action ='PubblicaNews.asp'">
    		</td>
    	</tr>
    </table>
    
    
    	</form>
    Questa invece è la pagina che pubblica le news selezionate "PubblicaNews.asp"

    codice:
    <%
    DataNow = Now()
    Oggetto = Replace(Request.form("Oggetto"), "'", "''")
    TestoNews = Replace(Request.form("TestoNews"), "'", "''")
    ID = request.form("IDcheck")
    
    if len(ID) = 0 then
    Response.Write("Nessuna News é stata selezionata per la pubblicazione")
    Response.Write("</br>Torna indietro e seleziona almeno una News.")
    Response.End
    End If
    
    
    if len(ID) > 0 then
    	Set Conn = Server.CreateObject("ADODB.Connection") 
    	conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database/News.mdb")
    	SQL = "DELETE * FROM [News] WHERE ID IN (" & ID & ")"
    	Conn.Execute SQL
    	SQL = "INSERT INTO News(Data, Oggetto, TestoNews, Pubblica) VALUES ('"& DataNow &"', '"& Oggetto &"', '"& TestoNews &"' ,'S')"   
    	Conn.Execute SQL
        conn.close
        set conn = nothing
    end if
    Response.Write("News Pubblicate Correttamente" & "</br>")
    Response.Write("</br>Visualizza News")
    Response.Write("</br>Torna indietro")
    %>
    Il delete funziona nel modo corretto, inatti elimina tutti i record con l'id che viene passato dal form, mentre la insert mi inserisce tutto in un unico record, la mia domanda è come fare per dividere tutto e sistemare nei nuovi record solo i valori interessati.
    Grazie
    Ciao!

  4. #4
    dov'è che inizia il loop ?

    Ciau!
    - Dean

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    260
    c'è di mezzo la paginazione....
    codice:
    <%
    Dim Conn 
    Dim Rs
    Dim SQL
    Dim iPageSize
    Dim AbsolutePage
    
    iPageSize = 5 'NUMERO RECORD PER PAGINA
    
    If Request.QueryString("page") = "" Then
    iPageCurrent = 1
    Else
    iPageCurrent = CInt(Request.QueryString("page"))
    End If
    
    Set Conn = Server.CreateObject("ADODB.Connection") 
    conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database/News.mdb") 
    SQL = "SELECT * from News Where Pubblica = 'N' ORDER BY DATA DESC"
    Set Rs = Server.CreateObject("ADODB.Recordset")
    
    RS.PageSize = iPageSize
    RS.CacheSize = iPageSize
    
    RS.Open SQL , Conn , 3
    reccount = RS.recordcount
    iPageCount = RS.PageCount
    
    If iPageCurrent > iPageCount Then iPageCurrent = iPageCount
    If iPageCurrent < 1 Then iPageCurrent = 1
    
    If iPageCount = 0 Then
    
    response.Write("<font face='Arial' color='#D35B09'>Non ci sono News in archivio che attendono di essere pubblicate.</font>" & "
    ")
    response.end
    
    Else
    
    RS.AbsolutePage = iPageCurrent
    iRecordsShown = 0
    Do While iRecordsShown < iPageSize And Not RS.EOF
    
    %>
    
    <form NAME="NewsDaPubblicare" method="POST" action="ModNewsDaPubblicare.asp">
    ...............
    ...............
    ...............

  6. #6
    ciao, hai fatto un macello
    Con le textfield, i valori che hanno lo stesso nome non vengono inviati tutti o concatenati ma, generalmente, viene inviato giusto il valore dell'ultima textfield [a meno che non appartengano a form diversi].
    Le checkbox e un particolare tipo di select sono un eccezione.

    In particolare questa affermazione :
    invio i valori da un form che è dentro un ciclo, quindi , mi passa tutti i valori di piu record, i dati arrivano tutti e in modo corretto
    è falsa.

    Ciau!
    - Dean

    p.s. occhio alla tag form, la riapri ad ogni inizio del ciclo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    260
    scusa ma non è giusto?

    nella pagina dove ricavo i valori devo perforza mettere un ciclo altrimenti come faccio a visualizzare tutti i record?
    In poche parole mi faccio visualizzare per ogni record una tabella con i campi"oggetto" "data" "testo" e lo stato di pubblicazione....poi li ho messi ogniuno nel tag form in modo da passarmi tramite il metodo post i valori nella pagina che esegue, quella che elimina e fa la insert...

    ti sarei grato se mi aiutassi a risolvere.
    grazie ancora

  8. #8
    Originariamente inviato da mic3000
    poi li ho messi ogniuno nel tag form in modo da passarmi tramite il metodo post i valori nella pagina che esegue, quella che elimina e fa la insert...
    Il problema è come chiami i campi. Non puoi chiamare piu' di una textfield con lo stesso nome. Quando li prelevi, li devi ricavare esplicitamente: non sono una collection o un qualche altro tipo di insieme.

    Un modo (brutto) per risolvere il tuo problema è metterti una variabile contatore e chiamare ogni campo con associato il contatore. Ad esempio :

    codice:
    ' Pagina del form
    <form ....>
    <%
    i = 0;
    do while not rs.eof
    %>
    
    Titolo : 
    <input type="textfield" name="<%=i%>_titolo"> 
    Data : 
    <input type="textfield" name="<%=i%>_data">
    
    etc...
    
    <%
    i = i +1
    rs.moveNext
    loop
    %>
    <input type="hidden" name="numcampi" value="<%=i-1%>">
    <input type="submit">
    </form>
    
    ' Pagina per salvare i dati
    
    <%
    numcampi = Request.Form("numcampi")
    For(i = 0 To numcampi)
    titolo = Request.Form(i & "_titolo")
    data = Request.Form(i & "_data")
    ' etc...
    sql += "INSERT INTO nomeTabella (titolo, data, ...) VALUES ('" & titolo & "', '" & data & "', ...);"
    Next
    
    conn.Execute(sql)
    %>
    Ciau!
    - Dean

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    260
    e il metodo meno brutto?
    così ne approfitto anche per imparare!

  10. #10
    il metodo meno brutto sarebbe quello di inserire un solo blocco per form alla volta e quindi inserire un solo record alla volta.

    Ciau!
    - Dean

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.