Toon posts:

[ASP] Error converting data type varchar to numeric

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mij probleem is alsvolgt :
ik heb een SQL database met de tabellen
Medewerkers:
*mednr : numeric
naam : varchar
afdnr : numeric
indienst : varchar
uitdienst : varchar
koppeltabel :
*relatieID
mednr
prognr
En dan nog een paar maar die zijn niet van belang. De tabellen kunnen niet worden gewijzigd omdat een aantal progs deze database gebruiken.
Nou maak ik een asp pagina die deze 2 tabellen moet vullen. De gegevens worden in een form ingevuld op pagina 1 en pagina 2 moet de gegevens in de database wegschrijven. Pagina 1 doet het perfect, maar pagina 2 niet (source hieronder)
<HTML>
<BODY>
<div align='center'>

<%
Dim oConn, oRS, Naam, Afdnr, Indienst, Uitdienst, RelID, Mednr, sql, sql1

Set oConn = Server.CreateObject("ADODB.Connection")
Set oRS = Server.CreateObject("ADODB.Recordset")
oConn.ConnectionString = "DSN=Account;UID=sa"
oConn.Open

Naam = Request.Form("Naam")
Afdnr = Request.Form("Afdnr")
Indienst = Request.Form("Indienst")
Uitdienst = Request.Form("Uitdienst")
RelID = Request.Form("RelID")
Mednr = Request.Form("Mednr")

sql ="INSERT INTO koppeltabel (relatieID,mednr) VALUES "
sql =sql & "('" & RelID & "','" & Mednr & "')"
sql1 ="INSERT INTO Medewerkers (mednr,naam,afdnr,indienst,uitdienst) VALUES"
sql1 =sql1 & "('CAST(1,numeric)','Jaapie','CAST(1,numeric)','10-10-2002','20-12-2002')"

'sql1 =sql1 & "('CONVERT(numeric,1)','Jaapie','CONVERT(numeric,1)','10-10 2002','20-12-2002')"
'sql1 =sql1 & "('CONVERT(numeric," & Mednr & ")','" & Naam & "','CONVERT(numeric," & Afdnr & ")','" & Indienst & "','" & Uitdienst & "')"
'sql1 =sql1 & "('" & Mednr & "','" & Naam & "','" & Afdnr & "','" & Indienst & "','" & Uitdienst & "')"

oConn.Execute sql1,recordsaffected 'regel 29
oConn.Execute sql,recordsaffected
if err <> 0 then
Response.Write("Er is een fout opgetreden")
else
Response.Write(" " & Recordsaffected & " record toegevoegd")
end if

oConn.Close
%>

</div>
</BODY>
</HTML>

De fout melding die ik krijg is : ]Error converting data type varchar to numeric.

/Newmed/Persadmin_rectoevoegen.asp, line 29

Ik heb bij op google, w3schools, microsoft en hier gekeken. Ik vanalles geprobeert maar ik krijg het er niet uit. Weet iemand de oplossing ???

Alvast bedankt!!

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Je probeert de string 'CAST(1,numeric)' te inserten in een numeric veld en dat zal inderdaad niet werken, bovendien is je syntax van CAST() fout.
CAST(1 as numeric) zal al beter werken (zonder enkel quotes dus)

Maar waarom niet alleen de waarde zonder CAST-ing inserten? afaik kunnen integers impliciet gecast worden naar numeric.

sql1 = "INSERT INTO Medewerkers (mednr,naam,afdnr,indienst,uitdienst) VALUES"
sql1 = sql1 & "(1, 'Jaapie', 1, '10-10-2002', '20-12-2002')"

btw. ik werk zelf liever altijd met iso-dates ('yyyy-mm-dd') om verwarring te voorkomen.

Today's subliminal thought is:


Verwijderd

sql1 ="INSERT INTO Medewerkers (mednr,naam,afdnr,indienst,uitdienst) VALUES"
sql1 =sql1 & "('CAST(1,numeric)','Jaapie','CAST(1,numeric)','10-10-2002','20-12-2002')"
er moet iig nog een spatie na VALUES

ik vind het verwarrend dat je de uitgecommente code ook meestuurt, dat zijn toch weer een paar regels onnodige code, waardoor het langer duurt voor ik doorheb wat je bedoelt

en sluit voor de netheid je objecten even helemaal af op het eind met:
ASP:
1
Set Rst = Nothing

Verwijderd

Topicstarter
CAST zag ik op de microsoft site en probeerde ik dus maar.
Als ik
sql1 = sql1 & "(1, 'Jaapie', 1, '10-10-2002', '20-12-2002')"
invul krijg ik dezelfde error.

De spatie werkt ook niet, maar was inderdaad wel een fout.

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
Annie schreef op 10 oktober 2002 @ 12:47:
[...]

btw. ik werk zelf liever altijd met iso-dates ('yyyy-mm-dd') om verwarring te voorkomen.
offtopic:
met dd-mmm-yyyy werken is nog veiliger, dus bv. 1-mar-2002. Dit is de enige absoluut veilige oplossing om datums in een database te gooien. Houdt er rekening mee dat het maand gedeelte in het engels moet zijn (dus oct en niet okt)

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


Verwijderd

Topicstarter
Ik heb de datums voor de zekerheid ook maar veranderd en dan krij je

sql1 = sql1 & "(1, 'Jaapie', 1, '10-mar-2002', '20-oct-2002')"

maar nog steeds de error.
Voor de duidelijkheid :

sql ="INSERT INTO koppeltabel (relatieID,mednr) VALUES "
sql =sql & "(" & RelID & "," & Mednr & ")"

sql1 ="INSERT INTO Medewerkers (mednr,naam,afdnr,indienst,uitdienst)
VALUES "
'sql1 =sql1 & "(" & Mednr & ",'" & Naam & "'," & Afdnr & ",'" & Indienst & "','" &
Uitdienst & "')"
sql1 = sql1 & "(1, 'Jaapie', 1, '10-mar-2002', '20-oct-2002')"

oConn.Execute sql1,recordsaffected
oConn.Execute sql,recordsaffected

De fout moet hier ergens zitten. De regel
sql1 = sql1 & "(1, 'Jaapie', 1, '10-mar-2002', '20-oct-2002')"
is een test, de regel
'sql1 =sql1 & "(" & Mednr & ",'" & Naam & "'," & Afdnr & ",'" & Indienst & "','" &
Uitdienst & "')"
moet het uiteindelijk worden.

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Ga eens aan de gang met:
code:
1
CONVERT(NUMERIC, [je variabele])


Je kunt er dan wel het beste voor zorgen dat het te converteren item in een variabele zit.
Ik gebruik dat best vaak, en werkt altijd.

Suc6

| Life is a game (and games are fun) | homepage |


Verwijderd

Topicstarter
akakiwi schreef op 10 oktober 2002 @ 13:59:
Ga eens aan de gang met:
code:
1
CONVERT(NUMERIC, [je variabele])


Je kunt er dan wel het beste voor zorgen dat het te converteren item in een variabele zit.
Ik gebruik dat best vaak, en werkt altijd.

Suc6
Ik neem aan dat convert een sql statement is, dan zou het zo iets moeten zijn :
test = "1"
sql1 = sql1 & "(CONVERT(NUMERIC," & test & " ) ,'Jaapie',CONVERT(NUMERIC," &
test & "),'10-mar-2002','20-oct-2002')"
maar nog steeds de error

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 16:59

Crazy D

I think we should take a look.

Ik zie door de ' en " de tekst niet meer :P maar uhmm CAST(1, NUMERIC) :? Dat is voor het eerst dat ik iemand een 1 (getal 1 dus :P) zie casten naar numeric... :)
Als mednr in de db een int veld is, moet je gewoon 1 neerzetten (zonder ' eromheen), en als het een (var)char is, '1', daar hoef je niet zo veel voor te casten....

Print anders eens je query (sql variabele dus) nadat ie is opgebouwt, en ga eens stoeien om ervoor te zorgen dat je een werkende query hebt (gewoon los, dus niet in code). Zodra je een goed werkende query hebt, is het een kwestie van de waardes even vervangen door variabelen en klaar.

Oh en vergeet ook niet je invoer te controleren...

Exact expert nodig?


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

zoepercavia schreef op 10 oktober 2002 @ 13:38:
[...]


offtopic:
met dd-mmm-yyyy werken is nog veiliger, dus bv. 1-mar-2002. Dit is de enige absoluut veilige oplossing om datums in een database te gooien. Houdt er rekening mee dat het maand gedeelte in het engels moet zijn (dus oct en niet okt)
en wat als mijn database een andere language instelling dan English heeft? :+

Today's subliminal thought is:


Verwijderd

Topicstarter
Ik heb het al gevonden :) , fout in de database dat mijn collega vergeten was te om het even te zeggen. :(

Deze topic kan wel gesloten worden.
Pagina: 1