Continua a non funzionare, anche con quello detto da elex.iava:
da errore ancora sul Replace, se attivo resume.error restituisce:
Errore riscontrato:
505
Riferimento non valido o non qualificato
Errore di run-time di Microsoft VBScript

Faccio della mia ignoranza una virtù per stimolare il cervello con soluzioni alternative.
......LELO
879 messaggi dal 09 luglio 2002
www.i-studio.it
Scusa la domanda... ma io ho cercato sulla guida Access la funzione Replace e non l'ho trovata... e infatti se provo a scrivere l'update direttamente dentro Access ho un errore... tu sei proprio sicuro che esista?

Ciao
Alex

Internetworking Studio Srl
www.i-studio.it
Io no, ma mi hanno detto che si può fare!

Faccio della mia ignoranza una virtù per stimolare il cervello con soluzioni alternative.
......LELO
879 messaggi dal 09 luglio 2002
www.i-studio.it
Secondo me non c'e' una funzione di Access che fa quello che vuoi fare tu....
La soluzione che ti suggerisco e' questa:
- fai una select di tutti i record che vuoi aggiornare
- apri un ciclo e leggi tutti i record
- per ogni record leggi il valore che vuoi modificare
- usi la REPLACE di ASP per sostituire al valore che hai quello nuovo
- fai un UPDATE per modificare il campo con il nuovo valore
Se segui questa strada, allora ha anche senso usare le transazioni perche' se qualcosa va male in uno degli n update fai un rollback e torni indietro. Se invece tutto va bene, fai un commit alla fine e chiudi il tutto.

Ciao
Alex

Internetworking Studio Srl
www.i-studio.it
Infatti è quello che ho fatto, ma sono tornato a ADODB

<% On Error Resume Next %>
<% to_path = 1 %>
<!--#include file="../inc_top.asp"-->
<%
Dim Conn
Dim dbConnection
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
dbConnection = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/users.mdb")
' lettura
Conn.Open dbConnection
Sql_read="SELECT id,qualifica,nome,cognome FROM users where qualifica like '% %'"
RS.cursorlocation=3
RS.Open (Sql_read), Conn, 3, 3
'' fine lettura
do while Not RS.EOF
new_valore = Replace( RS("qualifica") , " ", "_")
Response.Write RS("cognome") &"&nbsp;"& RS("nome") &" ("& RS("qualifica") &"): "
sql = "UPDATE users SET qualifica = '" & new_valore &"' where id = " &RS("id")
Response.Write "modificato in "& new_valore &"<br>"
Conn.Execute sql
RS.MoveNext
Loop
if Conn.Errors.Count <> 0 then
Conn.RollbackTrans
numero_errore = err.number
descrizione = err.description
risorsa = err.source
Response.Write "<font size=""2""><u>Errore riscontrato</u>:<br>"&_
numero_errore &"<br>"&_
descrizione &"<br>"&_
risorsa&"</font>"
else
Response.Write "<font size=""2""><strong>OPERAZIONE RIUSCITA</strong></font>"
end if
Conn.close
Set Conn = Nothing
%>

Faccio della mia ignoranza una virtù per stimolare il cervello con soluzioni alternative.
......LELO
879 messaggi dal 09 luglio 2002
www.i-studio.it
Il tipo di connessione che usi e' indifferente. Quella che hai tu ora e' ODBC DSN-LESS, mentre l'OLEDB e' migliore in termini di performance.

Per quanto riguarda il codice, ti suggerisco di modificarlo in questo modo:
...
tutto_ok = true
do while Not RS.EOF 
new_valore = Replace( RS("qualifica") , " ", "_") 
Response.Write RS("cognome") &"&nbsp;"& RS("nome") &" ("& RS("qualifica") &"): "
err.clear 
sql = "UPDATE users SET qualifica = '" & new_valore &"' where id = " &RS("id") 
Response.Write "modificato in "& new_valore &"<br>" 
Conn.Execute sql

if err.number <> 0 then
tutto_ok = false
exit do
end if 
RS.MoveNext 
Loop 

if not tutto_ok then
Conn.RollbackTrans 
numero_errore = err.number 
descrizione = err.description 
risorsa = err.source 
Response.Write "<font size=""2""><u>Errore riscontrato</u>:<br>"&_ 
numero_errore &"<br>"&_ 
descrizione &"<br>"&_ 
risorsa&"</font>" 
else 
conn.committrans

Response.Write "<font size=""2""><strong>OPERAZIONE RIUSCITA</strong></font>" 
end if 
Conn.close 
Set Conn = Nothing 
%>


Cioe' se una delle update va in errore ti conviene uscire dal do...while e fare il rollback. Se invece tutto va bene, devi comunque fare il commit alla fine.

Ciao
Alex

Internetworking Studio Srl
www.i-studio.it
Direi che mi piace molto la tua proposta.
Infatti la terrò buona, anzi l'ho eventualemte sviluppata, piccole modifiche che con una nota di personalizzazione ulteriore di chiunque la desideara, per esempio con un FORM, sarà possibile effettuare ogni modifica su database, tabella, campo, singolo carattere (o insieme di caratteri = stringhe) contenute in un intero record, oppure su tutto il record, predetrminandoli.
Forse a parole è molto poco chiara, ma buttando un occhio sarà sicuramente più comprensibile:

<% On Error Resume Next %>
<%
Dim nome_db, nome_campo, nome_tabella, char_old, char_new, operatore
nome_db = "users.mdb" 'inserisco il nome del db in cui effettuare la modifica
nome_campo = "qualifica" 'inserisco il nome del campo del record in cui effettuare la modifica
nome_tabella = "users" 'inserisco il nome della tabella in cui effettuare la modifica
char_old = "_" 'inserisco quello da modificare
char_new = "#" 'inserisco in cosa modificare
operatore = "char" '"char" per il singolo carattere e/o stringa oppure "all" per l'intero campo

Dim Conn
Dim dbConnection
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
dbConnection = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/"& nome_db &"")
' lettura
Conn.Open dbConnection
Sql_read="SELECT id,"& nome_campo &" FROM "& nome_tabella &" where "& nome_campo &""
if operatore = "char" then
Sql_read = Sql_read &" like '%"& char_old &"%'"'modifica il solo carattere e/o stringa
else if operatore = "all" then
Sql_read = Sql_read &" = '"& char_old &"'" 'modifica l'intero campo
end if
end if
RS.cursorlocation=3
RS.Open (Sql_read), Conn, 3, 3
'' fine lettura
tutto_ok = true
do while Not RS.EOF
new_valore = Replace( RS(nome_campo) , char_old , char_new)
Response.Write RS(nome_campo)
err.clear
sql = "UPDATE "&nome_tabella&" SET "& nome_campo &" = '" & new_valore &"' where id = " &RS("id")
Response.Write " modificato in "& new_valore &"<br>"
Conn.Execute sql

if err.number <> 0 then
tutto_ok = false
exit do
end if
RS.MoveNext
Loop

if not tutto_ok then
Conn.RollbackTrans
numero_errore = err.number
descrizione = err.description
risorsa = err.source
Response.Write "<font size=""2""><u>Errore riscontrato</u>:<br>"&_
numero_errore &"<br>"&_
descrizione &"<br>"&_
risorsa&"</font>"
else
conn.committrans
Response.Write "<font size=""2""><strong>OPERAZIONE RIUSCITA</strong></font>"
end if
Conn.close
Set Conn = Nothing
%>

Faccio della mia ignoranza una virtù per stimolare il cervello con soluzioni alternative.
......LELO

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.