• User

    Modifica dei campi in un database

    Salve, è un mese che ho cominciato ad utilizzare asp ma ancora ci capisco poco e niente e tantomeno conosco la sintassi del linguaggio.

    Il problema che ho è che vorrei modificare due campi di un database access quanto richiamo dal browser un file .asp ( ad esempio con nome aggiorna.asp ); in particolare due campi numerici ( clicksin e clicksout ) e dividere il loro valore, ad es., per 2.

    Con l'aiuto di un altro, ho creato questa pagina con il seguente codice

    <% 
    Dim Conn, mysql 
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/public/it/db/topsite.mdb"&#41; 
    
    mysql = " UPDATE FROM topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = " & cInt&#40;clicksin&#41; & " AND clicksout = " & cInt&#40;clicksout&#41; 
    conn.Execute&#40;mysql&#41; 
    
    conn.close 
    set conn=nothing 
    
    response.write "Clicks aggiornati" 
    %>
    

    ma quando la richiamo mi da il seguente errore:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
    
    &#91;Microsoft&#93;&#91;ODBC Microsoft Access Driver&#93; Syntax error in UPDATE statement. 
    
    /aggiorna_clicks.asp, line 7
    

    Che significa? Qualcuno mi può aiutare e dirmi come correggerlo??
    Grazie 😞


  • User

    L'errore che ti dà è nella query SQL.

    Prova così:

    mysql = "UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = " & clicksin & " AND clicksout = " & clicksout
    

    PS: cInt() non c'è bisogno di usarlo perchè tanto la query è una stringa per il server asp.


  • User

    Grazie lockit!!!

    Ma ancora da errore 😞

    <% 
    Dim Conn, mysql 
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/topsite.mdb"&#41; 
    
    mysql = "UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = " & clicksin & " AND clicksout = " & clicksout
    conn.Execute&#40;mysql&#41; 
    
    conn.close 
    set conn=nothing 
    
    response.write "Clicks aggiornati" 
    %>
    
    Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
    
    &#91;Microsoft&#93;&#91;ODBC Microsoft Access Driver&#93; Syntax error &#40;missing operator&#41; in query expression 'clicksin = AND clicksout ='. 
    
    /aggiorna.asp, line 7
    

  • User

    Mhhmmmm :mmm: :mmm:

    L'errore sembra cambiato però.... prova a stampare la query a schermo prima di eseguirla e vedi se è completa..... potrebbe essere che clicksin e clicksout siano vuoti e quindi una query del genere dà sicuramente errore...

    UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = AND clicksout =

    ciao


  • User

    Grazie... ma non so cosa significa stampare a video una query, anzi, soprattutto come si fa ... 😞

    Comunque i campi clicksin e clicksout non sono vuoti, sono riempiti con dei numeri..


  • User

    😄 😄
    Scusa, la query è quella stringa SQL
    per stampare a video intendevo una cosa del genere:

    <% 
    Dim Conn, mysql 
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/topsite.mdb"&#41; 
    
    mysql = "UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = " & clicksin & " AND clicksout = " & clicksout 
    
    'conn.Execute&#40;mysql&#41; 
    
    Response.write&#40;mysql&#41;
    
    conn.close 
    set conn=nothing 
    
    response.write "Clicks aggiornati" 
    %>
    

    Se stampa una cosa così:
    UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = AND clicksout =

    L'errore è che non gli dai numeri per confrontare clicksin e clicksout

    Se invece stampa una cosa così:

    UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = 1 AND clicksout =1

    Non sò proprio che erore sia.... () () :bho:

    Questa è la sintassi dell'update:
    @www.w3schools.com said:

    UPDATE table_name
    SET column_name = new_value
    WHERE column_name = some_value

    Ciao


  • User

    Stampa

    UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = AND clicksout = 
    

    😉

    Allora dove sta l'errore??

    Ho capito cosa intendevi, hai messo 'conn.Execute(mysql) sotto forma di commento e hai messo un response.write davanti alla query..

    Cmq grazie :lol:


  • User

    Può essere che dia errore perchè ci siano alcuni numeri dispari da dividere per 2 ?? :arrabbiato:


  • User

    @guestone said:

    Stampa

    UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = AND clicksout = 
    

    😉

    Allora dove sta l'errore??

    Ho capito cosa intendevi, hai messo 'conn.Execute(mysql) sotto forma di commento e hai messo un response.write davanti alla query..

    Cmq grazie :lol:

    Come volevasi dimostrare..... 😄 😄

    Da quella stampa a video si capisce che le tue variabili clicksin e clicksout sono vuote !!!

    è per questo che dà errore...

    Prova così:

    <% 
    
    IF clicksin <> "" AND clicksout <> "" THEN
    	Dim Conn, mysql 
    	Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    	conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/topsite.mdb"&#41; 
    
    	mysql = "UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = " & clicksin & " AND clicksout = " & clicksout 
    
    	conn.Execute&#40;mysql&#41; 
    
    	conn.close 
    	set conn=nothing 
    
    	response.write "Clicks aggiornati" 
    ELSE
    	Response.write&#40;"Le variabili clicksin e clicksout sono vuote !!!"&#41; 
    END IF
    %>
    

    Oppure se vuoi eseguire lo stesso la query(mettiamo che il valore di default sia zero):

    <% 
    
    IF clicksin <> "" THEN
    	clicksin = 0
    END IF
    
    IF clicksout <> "" THEN
    	clicksout = 0
    END IF
    
    Dim Conn, mysql 
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/topsite.mdb"&#41; 
    
    mysql = "UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = " & clicksin & " AND clicksout = " & clicksout 
    
    conn.Execute&#40;mysql&#41; 
    
    conn.close 
    set conn=nothing 
    
    response.write "Clicks aggiornati"
    
    %>
    

    Ciao :fumato: :fumato:


  • User

    Grazie lockit, troppo gentile !!!!

    Allora, la prima soluzione mi esegue:

    Le variabili clicksin e clicksout sono vuote !!!

    quindi come dici te le varibili sono vuote.
    Ma che significa che le variabili sono vuote?? Eppure le due colonne sono riempite con dei valori numerici e sono stampate a video sulla pagina index della toplist.
    Riscaricando il database ho però notato che in corrispondenza dell'ultima riga della tabella topsite ( contatore ), ci sono degli zeri in corrispondenza di clicksin e clicksout ( però solo in questa riga !! )

    In sostanza i clicks non si aggiornano. Che soluzione posso trovare per aggiornare sta toplist?? Non vorrei stare ad azzerarla sempre, vorrei solo che i click non salissero troppo all' infinito per cui avevo pensato a questa soluzione e cioè dividerli per una cera quantità di tanto in tanto

    La seconda soluzione da errore:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
    
    &#91;Microsoft&#93;&#91;ODBC Microsoft Access Driver&#93; Syntax error &#40;missing operator&#41; in query expression 'clicksin = AND clicksout ='. 
    
    /aggiorna3.asp, line 17
    

  • User

    Non è che ci vuole per caso un

    do while .EOF

    per scorrere tutte le righe della tabella?

    E' troppo presto perchè io ci capisca qualcosa 😢


  • User

    :fumato: :fumato:

    Ho risolto e non so come ho fatto :mmm:

    Cmq ho scopiazzato dal metodo che usava nel caso si volessero azzerare click.

    Il codice che ho messo è il seguente:

    <%@ LANGUAGE="VBSCRIPT" %>

    <%  
    Set objRs = Server.CreateObject&#40;"ADODB.Recordset"&#41;
    strSQL = "SELECT * FROM topsite"
    objRs.Open strSQL, strdbpath
    
    do while objRs.EOF = false
    stridtoupdate = objRs&#40;"id"&#41;
          
    Set objRs2 = Server.CreateObject&#40;"ADODB.Recordset"&#41;
    strSQL2 = "UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE id = " & stridtoupdate & ""  
    objRs2.Open strSQL2, strdbpath
    
    objRs.MoveNext
    Loop
    
    Set objRs = Nothing
    Set objRs2 = Nothing
    
    response.write "Clicks aggiornati"
    %>
    

    dove strdbpath lo richiama dal file ="/includes/dati.asp ed è

    "DRIVER=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;DBQ=" & server.mappath&#40;"/mdb-database/topsite.mdb"&#41;
    

    E' "zozzo" come sintassi? va bene??

    Ora il problema è che non lo posso tenere caricato sul server perchè se un utente me lo becca ( ad es. tramite motore di ricerca ecc... ) mi fa un casino, ma questo si può risolvere facilmente anteponendo una parte di codice che mi identifichi come admin del tipo if Session("granted") <> "admin" then .... giusto ?

    Ora vorrei però, se lockit vuole ancora aiutarmi 😄 , complicare un pò il problema, ossia avere la possibilità che questo aggiornamento lo faccia in automatico tenendo il file sorgente sul server e facendoglielo eseguire ogni x intervalli di tempo con la funzione

    DateAdd("n", 15, Now)

    ad esempio ogni 15 minuti, come verrebbe il codice sopra??

    IF ... ?????????????

    Grazie


  • User

    In effetti c'era un piccolo errore nel mio codice, corretto è così :

    ...
    IF clicksin = "" THEN 
       clicksin = 0 
    END IF 
    
    IF clicksout = "" THEN 
       clicksout = 0 
    END IF 
    ...
    

    Comunque se come hai fatto tu funziona và bene 😄

    E per quanto riguarda l'esecuzione del file ogni tot di tempo... non sò come fare 😞 mi spiace....

    ciao


  • User

    In effetti c'era un piccolo errore nel mio codice, corretto è così :

    ...
    IF clicksin = "" THEN 
       clicksin = 0 
    END IF 
    
    IF clicksout = "" THEN 
       clicksout = 0 
    END IF 
    ...
    

    Comunque se come hai fatto tu funziona và bene 😄

    E per quanto riguarda l'esecuzione del file ogni tot di tempo... non sò come fare 😞 mi spiace....

    ciao


  • User

    In effetti c'era un piccolo errore nel mio codice, corretto è così :

    ...
    IF clicksin = "" THEN 
       clicksin = 0 
    END IF 
    
    IF clicksout = "" THEN 
       clicksout = 0 
    END IF 
    ...
    

    Comunque se come hai fatto tu funziona và bene 😄

    E per quanto riguarda l'esecuzione del file ogni tot di tempo... non sò come fare 😞 mi spiace....

    ciao


  • User

    Grazie di cuore lockit 😄

    Cmq la soluzione ripropostami

    <% 
    
    IF clicksin = "" THEN 
       clicksin = 0 
    END IF 
    
    IF clicksout = "" THEN 
       clicksout = 0 
    END IF 
    
    Dim Conn, mysql 
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/topsite.mdb"&#41; 
    
    mysql = "UPDATE topsite SET clicksin = clicksin / 2, clicksout = clicksout / 2 WHERE clicksin = " & clicksin & " AND clicksout = " & clicksout 
    
    conn.Execute&#40;mysql&#41; 
    
    conn.close 
    set conn=nothing 
    
    response.write "Clicks aggiornati" 
    
    %>
    

    non da errore e risponde con Clicks aggiornati ma in pratica non li divide in 2 i valori ........bhoooooo, si vede che c'è qualcosa per la quale l'unica soluzione è l'ultimo modo di come ho fatto ()

    Peccato per l'update automatico, cmq ancora grazie :fumato: