ASP/SQL Problem
Ankha
- datenbank
Hallo~
Ich versuche, meine Datenbank mit Insert/Delete-Befehlen zu modifizieren.
Und bekomme dabei imemr den Fehler
Microsoft JET Database Engine Fehler "80040e10'
Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
Ich bin mir nicht bewusst, irgendetwas nicht angegeben zu haben~
Eine Funktion, die diesen Fehler wirft, sieht beispielsweise so aus:
sub Kompetenzenadd(w)
Set cn = Server.CreateObject("ADODB.Connection")
strPfadDB = Server.MapPath("db\Server_Konf.mdb")
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPfadDB
cn.Open strConn
dim q
q=1
do while rs.EOF=false
q=q+1
rs.moveNext
loop
tempstring = "INSERT Into [tbl_Kompetenzen]([ID], [Kompetenz]) VALUES("&q&", "&w&")"
cn.execute tempstring
cn.close
set cn = Nothing
end sub
Mein Chef hat gemeint, ich sollte versuchen die Variablen in Eckige Klammern zu packen. Das hab ich nicht ganz verstanden, aber ich habs mal versucht. Ohne sichtbaren Erfolg. ._.
Was soll ich machen?
Danke im Voraus~
Ankha
Hello,
verschiedene Anmerkungen:
tempstring = "INSERT Into [tbl_Kompetenzen]([ID], [Kompetenz]) VALUES("&q&", "&w&")"
wo kommt das w her? Kann es sein, dass dein Statement im Endeffekt (-> Response.Write(tempstring)) "... VALUE(123, )" lautet?
Mein Chef hat gemeint, ich sollte versuchen die Variablen in Eckige Klammern zu packen. Das hab ich nicht ganz verstanden, aber ich habs mal versucht. Ohne sichtbaren Erfolg. ._.
Mit eckigen Klammer sorgt man im Microsoft SQL-Dialekt dafür, dass reservierte und ansonsten ungültige Feldnamen verwendet werden können, insbesondere Feldnamen mit Leerzeichen o.ä. - eine Spalte "Name Vorname" könnte man normalerweise nicht anlegen/ansprechen, über [Name Vorname] geht es.
Schließlich, die Meldung werfen Jet-DBs gerne, wenn ein Spaltenname nicht gefunden wurde - nehmen wir an, du hast eine Tabelle Kunden mit Spalten Name und Vorname. Wenn du jetzt schreibst
SELECT vrname FROM kunden
würde das System behaupten, eine Variable sei nicht belegt, weil es davon ausgeht, dass vrname eine Variable ist, die versehentlich nicht belegt wurde.
MfG
Rouven
Danke vielmals, jezt funktioniert es ^_^
Hat daran gelegen dass w ein string ist und ich die ' vergessen hab.
Und das rs is ein Überbleibsel von nem früheren Versuch. Is jetzt auch weg. ^^
Danke nochmal~
Ankha
sub Kompetenzenadd(w)
Set cn = Server.CreateObject("ADODB.Connection")
strPfadDB = Server.MapPath("db\Server_Konf.mdb")
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPfadDB
cn.Open strConn
dim q
q=1
do while rs.EOF=false
=false ist überflüssig, und wo wird bitte schön das rs gefüllt?
q=q+1
rs.moveNext
loop
tempstring = "INSERT Into [tbl_Kompetenzen]([ID], [Kompetenz]) VALUES("&q&", "&w&")"
Führe den Befehl mal manuell aus, mit dummywerten, klappts?
-Was für Datentypen sind das? -> evtl fehlen ''
-Falls ID Numerisch, definiere ID als AutoWert
Folgendes funktioniert bei mir bei manueller Ausführung:
INSERT Into tbl_Kompetenzen(Kompetenz) VALUES("w")
-> In VB:
cn.execute "INSERT Into tbl_Kompetenzen(Kompetenz) VALUES('" & variable & "')"
cn.execute tempstring
cn.close
set cn = Nothing
end subMein Chef hat gemeint, ich sollte versuchen die Variablen in Eckige Klammern zu packen. Das hab ich nicht ganz verstanden, aber ich habs mal versucht. Ohne sichtbaren Erfolg. ._.
Das wäre sinnvoll wenn die Spaltennamen von Access reservierte Schlüsselwörter sind (evtl ID)
Was soll ich machen?
siehe oben
Danke im Voraus~
Ankha
Hello,
do while rs.EOF=false
=false ist überflüssig, und wo wird bitte schön das rs gefüllt?
ähm - nö. du hast gerade, vmtl. unabsichtlich, die Bedingung umgedreht. Die äquivalente Schreibweise wäre
Do While Not rs.EOF
MfG
Rouven