14 messaggi dal 14 dicembre 2008
Ciao ragazzi, grazie ad entrambi per i suggerimenti illuminanti. Conoscevo la funzione count, ma pensavo servisse "solo" per contare e non per cose un pó piú "complesse" diciamo...

In tutti i casi adesso provo ad implementare la sql che mi hai postato, spero di indovinare la sintassi delle & commerciali che sempre mi creano problemi, poi provo il codice.

Vi faccio sapere, grazie ancora!

Ciao
Surya!
14 messaggi dal 14 dicembre 2008
Allora, cosí come si invoca una funzione, invoco l'aiuto degli esperti... bene dopo sta cavolata procedo...

Allora ho implementato il codice in questo modo che commento:

///////////////////////////////////////////////////////////////////////////
<%@LANGUAGE="VBSCRIPT"%>
<%
Response.ContentType = "text/html"
Response.Charset = "iso-8859-1"
Response.Buffer = True
Response.Expires = 0

Dim cn, rs
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("/mdb-database/dotbase.mdb")

' Ricevo le variabili da flash
Dim id, voce1, voce2, voce3, voce4, voce5, voce6, voce7, voce8
id = Request.Form("vid")
voce1 = Request.Form("vVoce1")
voce2 = Request.Form("vVoce2")
voce3 = Request.Form("vVoce3")
voce4 = Request.Form("vVoce4")
voce5 = Request.Form("vVoce5")
voce6 = Request.Form("vVoce6")
voce7 = Request.Form("vVoce7")
voce8 = Request.Form("vVoce8")

'Eseguo la query per vedere se esistono doppioni con cursore in lettura
rs.Open "SELECT count(*) FROM users WHERE id <> '" & id &"' AND (voce6='"& voce6 &"' OR voce7='"& voce7 &"')", cn, 1

'Se non ci sono, procedo con l'aggiornamento rieseguendo la sql con cursore scrittura
if rs.Eof Then

rs.close

rs.Open "SELECT * FROM users WHERE id = " & id, cn, 3, 3

rs("voce1") = voce1
rs("voce2") = voce2
rs("voce3") = voce3
rs("voce4") = voce4
rs("voce5") = voce5
rs("voce6") = voce6
rs("voce7") = voce7
rs("voce8") = voce8
rs.Update

Response.write "aggiornato=ok"

' Altrimenti se esistono doppioni non eseguo nulla
Else

Response.write "aggiornato=no"

End If

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

%>
///////////////////////////////////////////////////////////////////////////

La logica mi sembra corretta, ma non essendo un aspista profondo qui ho i miei limiti.

Richiamando lo script da browser, mi dice:

aggiornato=no

Quindi mi restituisce subito il valore del secondo response write, il che farebbe comunque pensare cmq ad una certa correttezza sintattica, ma evidentemente non semantica in quanto da flash non funziona lo script.

Provo altre situazioni nel frattempo, ma voi cosa pensate?

Grazie
Surya

14 messaggi dal 14 dicembre 2008
Mettendo questo...
//////////////////////////////////////////////////////////////////////////
rs.Open "SELECT count(*) FROM users WHERE id <> '" & id &"' AND (voce6='"& voce6 &"' OR voce7='"& voce7 &"')", cn, 1

if rs.count = 0 Then

rs.close

rs.Open "SELECT * FROM users WHERE id = " & id, cn, 3, 3
////////////////////////////////////////////////////////////////////////////

...mi restituisce questo errore richiamando lo script da browser...

Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'count'

/lab/updateUsers.asp, line 26

La linea 26 é:

if rs.count = 0 Then

Sto andando un pó alla cieca..help!

Grazie
Surya
307 messaggi dal 13 luglio 2005
Ciao Surya,
... ci stavi arrivando ...  !
Puoi fare così:

rs.Open "SELECT count(*) AS Esiste FROM users WHERE id <> '" & id &"' AND (voce6='"& voce6 &"' OR voce7='"& voce7 &"')", cn, 1

If rs.Fields.Item("Esiste").Value = 0 Then

...

A presto, ciao.

Umb
14 messaggi dal 14 dicembre 2008
Scusa se abuso ancora della tua disponibilitá....

Purtroppo non mi funziona...

Questo il codice:

/////////////////////////////////////////////////////
<%@LANGUAGE="VBSCRIPT"%>
<%
Response.ContentType = "text/html"
Response.Charset = "iso-8859-1"
Response.Buffer = True
Response.Expires = 0

Dim cn, rs
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("/mdb-database/dotbase.mdb")

Dim id, voce1, voce2, voce3, voce4, voce5, voce6, voce7, voce8
id = Request.Form("vid")
voce1 = Request.Form("vVoce1")
voce2 = Request.Form("vVoce2")
voce3 = Request.Form("vVoce3")
voce4 = Request.Form("vVoce4")
voce5 = Request.Form("vVoce5")
voce6 = Request.Form("vVoce6")
voce7 = Request.Form("vVoce7")
voce8 = Request.Form("vVoce8")

rs.Open "SELECT count(*) AS Esiste FROM users WHERE id <> '" & id &"' AND (voce6='"& voce6 &"' OR voce7='"& voce7 &"')", cn, 1

If rs.Fields.Item("Esiste").Value = 0 Then

rs.close

rs.Open "SELECT * FROM users WHERE id = " & id, cn, 3, 3

rs("voce1") = voce1
rs("voce2") = voce2
rs("voce3") = voce3
rs("voce4") = voce4
rs("voce5") = voce5
rs("voce6") = voce6
rs("voce7") = voce7
rs("voce8") = voce8
rs.Update

Response.write "aggiornato=ok"

Else

Response.write "aggiornato=no"

End If

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

%>

//////////////////////////////////////////
Quando chiamo lo script da browser mi dá questo errore...

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id ='.

/lab/updateUsers.asp, line 30

dove linea 30 é:

rs.Open "SELECT * FROM users WHERE id = " & id, cn, 3, 3

Allora ho provato a dare alla sql dove c'é il count il cursore 3,3 e commentare la chiusura del recordset e commentare anche la sql successiva di scrittura, ma anche lí ho avuto altro errore:

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/lab/updateUsers.asp, line 32

Dove linea 32 é questa:

rs("voce1") = voce1

Il fatto é che da flash non si capisce bene cosa succeda, in quanto ottengo un errore di collegamento allo script, quindi c'é un errore nello script, forse mi conviene ricreare una situazione similare ma con un form di html e vedere cosa restituisce. Cosa pensi di questo?

Grazie
Surya
307 messaggi dal 13 luglio 2005
... allora andiamo con ordine ...
Il primo errore (quello alla riga 30), probabilmente, te lo da' perchè "id" forse è vuoto ...
Il secondo errore (quello alla riga 32), invece, ti dice che la variabile "voce1" non esiste nella select ...: per forza se tu non chiudi il primo recordset stai ancora considerando quello con "SELECT COUNT(*) ..." dove non esiste la variabile "voce1" ...

Fai così: prima di aprire il primo recordset fatti stampare tutti i valori che ti arrivano dal form (cioè: vid, vVoce1, vVoce2, ecc ...) e vedi se c'è qualcosa.

... a proposito: sei sicuro che i dati arrivano da un form? Prova anche a sosituire Request.Form con Request e basta ...

Aspetto notizie, ciao.

Umb
14 messaggi dal 14 dicembre 2008
Ciao SuperPippo, allora...

Ho fatto la prova e togliendo form le variabili passano, ma é strano perché adesso qui sotto ti posto il codice con il quale io sono sicuro che i dati arrivano, e il request contiene tranquillamente il form.

Questo codice funziona alla grande, ma é mancante della query sql con count ed é assolutamente funzionante:

//////////////////////////////////////////////////////////////////////////////
<%@LANGUAGE="VBSCRIPT"%>
<%
Response.ContentType = "text/html"
Response.Charset = "iso-8859-1"
Response.Buffer = True
Response.Expires = 0

Dim cn, rs
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("/mdb-database/dotbase.mdb")

Dim id, voce1, voce2, voce3, voce4, voce5, voce6, voce7, voce8
id = Request.Form("vid")
voce1 = Request.Form("vVoce1")
voce2 = Request.Form("vVoce2")
voce3 = Request.Form("vVoce3")
voce4 = Request.Form("vVoce4")
voce5 = Request.Form("vVoce5")
voce6 = Request.Form("vVoce6")
voce7 = Request.Form("vVoce7")
voce8 = Request.Form("vVoce8")

rs.Open "SELECT * FROM users WHERE id = " & id, cn, 3, 3
rs("voce1") = voce1
rs("voce2") = voce2
rs("voce3") = voce3
rs("voce4") = voce4
rs("voce5") = voce5
rs("voce6") = voce6
rs("voce7") = voce7
rs("voce8") = voce8
rs.Update

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

Dim aggiornato
Response.write "aggiornato=ok"
%>
///////////////////////////////////////////////////////////////////////////

Mentre questo sotto che sarebbe la naturale evoluzione... non ne vuol sapere, o meglio... io credo che flash con actionscript 3 sia diventato particolarmente esigente con le variabili coppie-valore, mentre invece con AS 2 era molto piú semplice... Te lo posto...

/////////////////////////////////////////////////////////////////////
<%@LANGUAGE="VBSCRIPT"%>
<%
Response.ContentType = "text/html"
Response.Charset = "iso-8859-1"
Response.Buffer = True
Response.Expires = 0

Dim cn, rs
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("/mdb-database/dotbase.mdb")

Dim id, voce1, voce2, voce3, voce4, voce5, voce6, voce7, voce8
id = Request("vid")
voce1 = Request.Form("vVoce1")
voce2 = Request.Form("vVoce2")
voce3 = Request.Form("vVoce3")
voce4 = Request.Form("vVoce4")
voce5 = Request.Form("vVoce5")
voce6 = Request.Form("vVoce6")
voce7 = Request.Form("vVoce7")
voce8 = Request.Form("vVoce8")

rs.Open "SELECT count(*) AS Esiste FROM users WHERE id <> '" & id &"' AND (voce6='"& voce6 &"' OR voce7='"& voce7 &"')", cn, 1

If rs.Fields.Item("Esiste").Value = 0 Then

rs.close

rs.Open "SELECT * FROM users WHERE id = " & id, cn, 3, 3
rs("voce1") = voce1
rs("voce2") = voce2
rs("voce3") = voce3
rs("voce4") = voce4
rs("voce5") = voce5
rs("voce6") = voce6
rs("voce7") = voce7
rs("voce8") = voce8
rs.Update

Dim aggiornato
Response.write "aggiornato=ok"

Else

Response.write "aggiornato=no"

End If

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
%>
/////////////////////////////////////////////////////////////////////////

Non capisco davvero... credo che davvero mi rimane l'unica soluzione, cioé creare lo stesso form che ho in flash, in html. Se funzione, allor il problema non puó essere che il passaggio delle variabili, che non capisco poi cosa cambi visto che le differenze fra il primo (funzionante al 100% anche con request.form) e il secondo non dovrebbero andare a toccare minimanmente nulla...

Senti io ti ringrazio moltissimo, faccio questa prova con il form html, poi torno qui...


Ciao
Surya
14 messaggi dal 14 dicembre 2008
Era tutto giusto....

Ho fatto la prova con l'html e andava bene, il problema era flash...

Ci ho sbattuto la testa tutto il pomeriggio e sera, poi alla fine ho fatto funzionare tutto!!!

Cosa era?

Da cosí...
"SELECT count(*) AS Esiste FROM users WHERE id <> '" & id & "' AND (voce6='"& voce6 &"' OR voce7='"& voce7 &"')"

A cosí...
"SELECT count(*) AS Esiste FROM users WHERE id <> " & id & " AND (voce6='"& voce6 &"' OR voce7='"& voce7 &"')"

Dove c'é la variabile & id & flash non voleva anche gli apici per circoscrivere la variabile, ma solo le virgolette... avevo letto da qualche parte che per circoscrivere una variabile numerica come l'id non ci volevano gli apici o qualcosa del genere....

In tutti i casi funziona, grazie a tutti per le dritte e l'attenzione.

Buon anno a tutti!!

Ciao
Surya

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.