Newsgroup: it.comp.www.asp
Titolo: Errore nella cancellazione di un record!

Salve,
ho un problema che non riesco a risolvere: ho creato una pagina che elenca
tutti i campi e tutti i record di un database, compresa la chiave primaria.
E' presente poi un form dove l'utente deve inserire il numero corrispondente
al record da eliminare (questo numero è corrispondente al campo ID...,
chiave primaria della tabella).
L'istruzione per l'eliminazione è questa:
<%sql="DELETE FROM case "
sql=sql & " WHERE case.IDcasa = '"&id&"'"
response.write (sql)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open"driver={Microsoft Access Driver
(*.mdb)};dbq="&Server.MapPath("case.mdb")
Conn.Execute(sql)
Conn.close%>
dove id è il numero che arriva dal form, ma il server risponde in questa
maniera:
16
DELETE FROM case WHERE case.IDcasa = '16'
Microsoft OLE DB Provider for ODBC Drivers errore "80040e07"
[Microsoft][Driver ODBC Microsoft Access] Tipi di dati non corrispondenti
nell'espressione criterio.
Le prime due righe sono la stampa della variabile id e della stringa sql che
ho aggiunto per controllare i valori.
Sembra tutto normale, ma la cancellazione non avviene.
Qualcuno a qualche idea?
Grazie per l'aiuto.
Il califfo

Ma quell' ID è numerico o stringa?

 nell'espressione criterio.
Semplice. Il campo contatore e' numerico ma tu nella query lo metti come
testo.
Elimina gli ' prima e dopo il valore del campo.
Saluti.
Stefano.

 Elimina gli ' prima e dopo il valore del campo.
Giusto, pero' se l'ID lo prende dal Form deve prima trasformarlo in intero con
CLng(Request.Form("ID"))
se no ti da' lo stesso errore di type mismatch, perche' passi una stringa come
numero.
Ciao
Roberto
http://www.capriweb.com

 numero.
Perchè ti vuoi fare del male?
Nella sintassi della query devi usare la stringa.
Se è già stringa tanto meglio.
Altrimenti te lo converte quando lo sommi al resto della stringa....
Semmai devi controllare che nell'ID proveniente dalla form non ci siano
porcherie, perchè se arriva da un capo della form l'utente potrebbe anche
inserire caratteri alfanumerici.
E in questo caso ovviamente avresti altri errori.

 numero.
Sbagliato. In ogni caso se il passo un valore corretto, indipendentemente
dal tipo di variabile da cui viene estratto, la query funziona
perfettamente.
Saluti.
Stefano.

 Altrimenti te lo converte quando lo sommi al resto della stringa....
Logica vorrebbe che sia cosi'. In fondo, se la query e' una stringa, perche'
bisognerebbe prima convertire quel valore in numero? Resta il fatto finche' non
facevo la correzione da stringa a numero non me l'accettava e mi dava sempre
errore di tipo. Probabilmente questo accade perche' il controllo lo fa sui
codici ASCII e finche' non si specifica il tipo manda sempre il codice
corrispondente al carattere e non al numero (e' solo una ipotesi...). E' proprio
perche' non voglio farmi del male che mi assicuro di passargli un numero, anche
se poi lo converte in stringa e nella query vale da numero solo se non ha gli
apici.
Ciao
Roberto

 perfettamente.
Sara'... Intanto finche' non  gli passavo un numero la query non funzionava per
niente e mi dava sempre errore di tipo, mentre facendo precedere la conversione
di CLng va tutto liscio. Come ipotizzavo nella risposta a Paolo, forse questo
dipende dai codici ASCII che sono diversi per il numero e per il carattere che
lo identifica. Faccio una ipotesi: e' possibile che, finche' non si specifica il
tipo, si rimanga sempre nell'intervallo dei caratteri  e che quindi quel valore
non possa essere assegnato ad un campo numerico, perche' passa sempre il codice
ASCII riferito al carattere e non quello del numero?
Roberto

Boh, c'è qualcosa che non mi torna.
Al di la del fatto che io uso normalmente prendere un campo da un form e
comporci la stinga della query (e non ho mai avuto problemi), resta il fatto
che quando scrivi:
sql="DELETE FROM case "
sql=sql & " WHERE case.IDcasa = " & id
tu componi una stringa (ok, variant di tipo stringa).
Se la stinga è composta correttamente e la leggi esatta (DELETE FROM case
WHERE case.IDcasa = 9) è fatta.
Non ci sono santi ...
Piuttosto avrei qualche perplessità sulla parola 'case' , che non faccia in
qualche modo casini.