Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Mcrosoft JET Database Engine error '80040e07'
sabato 29 dicembre 2012 - 16.59
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
Windows 7
|
Access (.mdb)
|
Internet explorer 8.0
|
Chrome
|
Firefox
|
Javascript
|
CSS 3.0
|
HTML 4.01
DarioZ
Profilo
| Newbie
5
messaggi | Data Invio:
sab 29 dic 2012 - 16:59
Buone feste a tutti!
Sto scrivendo a mano un sito HTML+JScript+ASP+ADO e funziona bene anche per inserire nuovi prodotti, ma ho problemi a cancellarli.
Ecco il codice interessato:
else if(Request.Form("modo")==0){
var prod=String(Request.Form("pID"))
var con
var conString
con = Server.CreateObject("ADODB.Connection")
conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=" +Server.MapPath("negozio.mdb")
con.Open(conString)
var rst
var sSQLString
rst = Server.CreateObject("ADODB.Recordset")
Response.Write(sSQLString)
sSQLString=" DELETE FROM prods WHERE pid=' "+prod+" ' "
con.Execute(sSQLString)
Response.Write("<p>Cancellazione correttamente eseguita.</p>")
}
Viene generato il seguente errore:
Microsoft JET Database Engine error '80040e07'
Tipi di dati non corrispondenti nell'espressione criterio.
Che punta alla riga "con.Execute(sSQLString)"
Grazie anticipate a tutti i forumisti che mi aiuteranno!
renarig
Profilo
| Expert
517
messaggi | Data Invio:
sab 29 dic 2012 - 21:14
> sSQLString=" DELETE FROM prods WHERE pid=' "+prod+" ' "
pid è il campo chiave numerico ???
se è numerico devi scriverlo senza apici
___ sSQLString="DELETE pid FROM prods WHERE pid= "+prod+";"
Altre osservazioni meno importanti
__ Vedo degli spazi fra i doppi apici e l'inizio della stringa
__ Non hai specificato un nome di campo
__ Non hai messo il puntoevirgola finale
__ Nel tuo linguaggio il + è la concatenazione di stringhe Giusto ??
Facci sapere
.
DomA
Profilo
| Expert
537
messaggi | Data Invio:
sab 29 dic 2012 - 22:41
Ciao,
utilizzi Classic ASP, vero?
Vedo che hai utilizzato un Response.Write:
>>Response.Write(sSQLString)
potresti postare la stringa restituita?
Comunque come ha suggerito renarig se
>>pid è il campo chiave numerico
>>se è numerico devi scriverlo senza apici
____________________________________________________________________________________
Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.
http://www.infomidia.it
Domenico
DarioZ
Profilo
| Newbie
5
messaggi | Data Invio:
dom 30 dic 2012 - 00:04
@renarig
>> sSQLString=" DELETE FROM prods WHERE pid=' "+prod+" ' "
>
>
>pid è il campo chiave numerico ???
>se è numerico devi scriverlo senza apici
>
>___ sSQLString="DELETE pid FROM prods WHERE pid= "+prod+";"
>
>
>
>Altre osservazioni meno importanti
>__ Vedo degli spazi fra i doppi apici e l'inizio della stringa
>__ Non hai specificato un nome di campo
>__ Non hai messo il puntoevirgola finale
>
>__ Nel tuo linguaggio il + è la concatenazione di stringhe
>Giusto ??
>
>
>
>Facci sapere
>
Ciao, gli spazi erano solo per far vedere gli apici usati (sembravano masse di apici singoli altrimenti) il nome di campo è pid (ha 4 colonne la tabella prods: pid (chiave), pname, qty, price) o sbaglio? Si in JScript concateno con +
pid è numerico, ho provato pure ad usare il metodo parseInt per esserne sicuro ma non cambia il risultato precedente. Se provo a cambiare il codice di prima con questo cambia l'errore:
(JScript considera il LFCR come terminatore stringa al pari del ; ma l'ho inserito per scrupolo)
else if(Request.Form("modo")==0){
var prod=parseInt(Request.Form("pID"));
var con;
var conString;
con = Server.CreateObject("ADODB.Connection");
conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=" +Server.MapPath("negozio.mdb");
con.Open(conString);
var rst;
var sSQLString;
rst = Server.CreateObject("ADODB.Recordset");
Response.Write(sSQLString);
sSQLString="DELETE FROM prods WHERE pid=prod";
con.Execute(sSQLString);
Response.Write("<p>Cancellazione correttamente eseguita.</p>");
in:
Microsoft JET Database Engine error '80040e10'
Nessun valore specificato per alcuni parametri necessari.
@DomA
>Ciao,
>utilizzi Classic ASP, vero?
>
>Vedo che hai utilizzato un Response.Write:
>
>>>Response.Write(sSQLString)
>
>potresti postare la stringa restituita?
>
>Comunque come ha suggerito renarig se
>
>>>pid è il campo chiave numerico
>>>se è numerico devi scriverlo senza apici
>
Confermo Classic ASP, ho provato
Response.Write(sSQLString)
al posto di
con.Execute(sSQLString)
e mi ha ritornato (nel corpo HTML):
DELETE FROM prods WHERE pid=prod
Cancellazione correttamente eseguita.
Sto provando a sperimentare con gli apici dovessi avere novità vi faccio sapere asap!
Grazie già per l'aiuto!
PS: Nulla anche lavorandoci non va eppure non capisco, ad aggiungere prodotti con stringhe riesco bene a cancellare no.
DarioZ
Profilo
| Newbie
5
messaggi | Data Invio:
lun 31 dic 2012 - 12:38
Ho provato a inserire:
Response.write(typeof(pID))
Response.write(typeof("+rst('pid')+"))
ottenendo StringString
allora ho riaggiunto gli apici (perchè stringa) e mi dice nuovamente il solito errore di type mismatch:
else if(Request.Form("modo")==0){
var prod=String(Request.Form("pID"));
var con;
var conString;
con = Server.CreateObject("ADODB.Connection");
conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=" +Server.MapPath("negozio.mdb");
con.Open(conString);
var rst;
var sSQLString;
rst = Server.CreateObject("ADODB.Recordset");
sSQLString="DELETE FROM prods WHERE pid='"+prod+"'";
Response.Write(typeof(prod));
Response.Write(typeof("+rst('pid')+"));
Response.write(sSQLString);
con.Execute(sSQLString);
Response.Write("<p>Cancellazione correttamente eseguita.</p>");
}
stringstringDELETE FROM prods WHERE pid='5'
Microsoft JET Database Engine error '80040e07'
Tipi di dati non corrispondenti nell'espressione criterio.
renarig
Profilo
| Expert
517
messaggi | Data Invio:
lun 31 dic 2012 - 12:52
> sSQLString="DELETE FROM prods WHERE pid='"+prod+"'";
> ......
>Tipi di dati non corrispondenti nell'espressione criterio.
Hai provato a togliere gli apici dal criterio ?
sSQLString="DELETE FROM prods WHERE pid="+prod;
.
DarioZ
Profilo
| Newbie
5
messaggi | Data Invio:
lun 31 dic 2012 - 16:45
Funziona! Grazie infinite, come mai le virgolette non comprendono l'intera espressione? Mi sembra poco logico (detto da un ignorantone sulla questione come me!)
Purtroppo non capisco la logica dietro le virgolette esterne a questo punto.
renarig
Profilo
| Expert
517
messaggi | Data Invio:
lun 31 dic 2012 - 22:01
> ..... come mai le virgolette non comprendono
>l'intera espressione? ......
1A)________________________________________________
Immaginiamo che hai una variabile NUMERICA
percio quello che devi spedire al tuo DB è
( questa è solo la parte SQL )
DELETE FROM prods WHERE pid=21
2A)_____________________________________________________
inserita nel tuo codice diventa
sSQLString="DELETE FROM prods WHERE pid=21";
ed è una stringa di testo percio racchiusa fra doppi apici
3A)___________________________________________________________
potresti scriverla anche cosi
sSQLString="DELETE FRO"+"M prods WHERE pid=21";
4A)_____________________________________________________
oppure cosi
sSQLString="DELETE FROM prods WHERE pid="+"21";
5A)________________________________________________________
ma il tuo 21 non è noto bensi una variabile di nome prod
percio
sSQLString="DELETE FROM prods WHERE pid="+prod;
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
1B)_____________________________________________________________
Immaginiamo adesso che la variabile sia TESTUALE
percio quello che devi spedire al tuo DB è
( questa è solo la parte SQL )
DELETE FROM prods WHERE pid='xyz'
2B)_____________________________________________________
inserita nel tuo codice diventa
sSQLString="DELETE FROM prods WHERE pid='xyz'";
3B)___________________________________________________________
potresti scriverla anche cosi
sSQLString="DELETE FROM prods "+"WHERE pid='xyz'";
4B)_____________________________________________________
oppure cosi
sSQLString="DELETE FROM prods WHERE pid='"+"xyz"+"'";
5B)________________________________________________________
ma il tuo xyz non è noto bensi una variabile di nome Vaar
percio
sSQLString="DELETE FROM prods WHERE pid='"+Vaar+"'";
___________________________________________________________
Spero di essere stato chiaro
.
DarioZ
Profilo
| Newbie
5
messaggi | Data Invio:
lun 31 dic 2012 - 23:13
Chiarissimo, grazie infinite, pensavo di dover includere tutta la stringa tra virgolette anche per variabili numeriche.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !