Mcrosoft JET Database Engine error '80040e07'

sabato 29 dicembre 2012 - 16.59
Tag Elenco Tags  Windows 7  |  Access (.mdb)  |  Internet explorer 8.0  |  Chrome  |  Firefox  |  Javascript  |  CSS 3.0  |  HTML 4.01

DarioZ Profilo | Newbie

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

> 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

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

@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

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

> 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

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

> ..... 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

Chiarissimo, grazie infinite, pensavo di dover includere tutta la stringa tra virgolette anche per variabili numeriche.
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5