[ASP]Rare Type Mismatch

Pagina: 1
Acties:

  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Ik ben met een pagina bezig die dingen uit een SQL server db haalt en in een table op het scherm zet.

Nu heb ik in die db drie verschillende soorten elementen staan, die ik alledrie met een andere textkleur in de table wil zetten.
Hiertoe heb ik een array gevuld met 3 hex codes(BFBFBD, 000, F8A70), en dit gaat voor het grootste gedeelte goed, behalve bij een paar queries. Die queries zijn in principe geheel onafhankelijk van het gedeelte dat de kleur van de text bepaalt, dus ik vind het nogal raar.

Het stukje code dat de kleur aangeeft:
code:
1
2
3
4
5
6
7
      Do Until rst.EOF
        Response.Write("<tr>")
        i=rst.Fields.Item("stateID")
        For field = 0 To rst.Fields.Count - 1
        if field=4 then
          Response.Write("<td><font color=""#" &statecolor(i) &""">/" & rst.Fields(field) & "&nbsp;</td>")
        else


i is in dit geval een element uit de db dat aangeeft welke toestand het element heeft, en dat wordt gebruikt om de goede code uit het array te halen. Verder is het redelijk recht toe recht aan.

De foutmelding:

Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch
/IPAdmin/search.asp, line 316


Misschien dat iemand een idee heeft hoe ik dit op kan lossen. Als jullie nog additionele info nodig hebben, zeg het maar.

Alvast bedankt!

Als blikken konden doden, waarom doen ze er dan erwten in?


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Welke regel is 316 ?

Programmer - an organism that turns coffee into software.


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
dat is in het stukje hierboven regel 6

Als blikken konden doden, waarom doen ze er dan erwten in?


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:24

gorgi_19

Kruimeltjes zijn weer op :9

En waar gaat het fout? statefield? I? rst.Fields(4) ?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Misschien ziet hij je field var aan voor een ADODB.Field object? Kan me voorstellen dat je daar geen integer in mag plempen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
voor zover ik weet is statecolor(i) dan opeens een foute Type. Maar dat kan helemaal niet. Ik heb al geprobeerd om hem even handmatig te vullen met geldige waarden, zodat er absoluut geen fout in het type kan zijn, maar dan is er dezelfde error.

Als blikken konden doden, waarom doen ze er dan erwten in?


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Nee field is een gewone variabele en dat geeft ie ook aan als ik hem laat schrijven met TypeName. Dan is ie gewoon integer.

Als blikken konden doden, waarom doen ze er dan erwten in?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Probeer in regel 6 eens dit:
code:
1
rst.Fields(field)

te veranderen in dit:
code:
1
CStr(rst.Fields(field))

Een cast heeft bij mij in het verleden nogal wat van deze problemen opgelost in ASP.

edit:
Overigens is je HTML niet erg netjes, je sluit op regel 6 je font tag niet. :)

[ Voor 19% gewijzigd door NMe op 17-09-2004 13:44 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Garoth schreef op 17 september 2004 @ 13:37:
voor zover ik weet is statecolor(i) dan opeens een foute Type. Maar dat kan helemaal niet. Ik heb al geprobeerd om hem even handmatig te vullen met geldige waarden, zodat er absoluut geen fout in het type kan zijn, maar dan is er dezelfde error.
Wat is de waarde van i of van rst.Fields.Item("stateID") als het mis gaat ? Wordt geprobeerd een array te benaderen met index NULL ?

Verder ben ik benieuwd naar het type van rst.

  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
De waarde van i is altijd of 1, of 2, of 3.

Het type van rst is als het goed is integer. Er staan alleen integers in de db.

Als blikken konden doden, waarom doen ze er dan erwten in?


Verwijderd

Garoth schreef op 17 september 2004 @ 14:11:
De waarde van i is altijd of 1, of 2, of 3.

Het type van rst is als het goed is integer. Er staan alleen integers in de db.
Het type van rst kan niet integer zijn. Als het een integer was bestaat
code:
1
rst.Fields.Item("stateID")

namelijk niet. Hoe heb je rst gedimd ?

  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
gewoon Dim rst.

rst is mijn result-set van een query.

Als blikken konden doden, waarom doen ze er dan erwten in?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

rst lijkt me gewoon het goede datatype te hebben om te doen wat het moet doen. Maar volgens mij is dit probleem gewoon op te lossen, zie [rml]NMe84 in "[ ASP]Rare Type Mismatch"[/rml]. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Dat heb ik inderdaad geprobeerd, maar het heeft helaas geen effect....

Maar in ieder geval bedankt. Ik heb de fonts nu in ieder geval afgesloten.... :P

Als blikken konden doden, waarom doen ze er dan erwten in?


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Probeer i.p.v.:
code:
1
Response.Write("<td><font color=""#" &statecolor(i) &""">/" & rst.Fields(field) & "&nbsp;</td>")

dit eens:
code:
1
Response.Write "<td><font color=""#" & statecolor(i) & """>/" & rst.Fields(field) & "&nbsp;</td>"

:?
Spaties te weinig en op de verkeerde plaats. En als je een sub aanroept hoef je geen haakjes () te gebruiken... Tenzij je dus een functie aanroept...
Dus:

myResult = MyFunc()
en:
myResult = MyFunc(myPar)
en:
myResult = MyFunc(myPar1, myPar2,...)

MySub(myPar) ==> MySub myPar
MySub(myPar1, myPar2) ==> MySub myPar1, myPar2

Je mag de haakjes wel gebruiken, maar zodra je meer dan 1 parameter meegeeft (je geeft er nu dus maar 1 mee, nml een ge-concat-te string) gaat 'ie de mist in omdat ie de expressie binnen die haakjes probeert te evalueren. Maar dat staat los van je probleem. Zoals gezegd, probeer bovenstaande eens.

[ Voor 143% gewijzigd door RobIII op 17-09-2004 14:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
En wederom geen effect. Ik snap het niet, want bij sommige aanroepen doet ie het wel, bij andere weer niet.... :?

Als blikken konden doden, waarom doen ze er dan erwten in?


Verwijderd

Als het werkt OK, maar dan snap ik nog niet goed wat er mis loopt.

code:
1
Dim rst

maakt rst een variant, maar het wordt gebruikt als resultset-object. Dan zou ik rst toch wel dimmen als
code:
1
Dim rst as ADODB.Recordset


Wat misschien verklaart wat er vervolgens mis gaat:
.Value is de default property van ADODB.Field, maar als de type info niet van tevoren beschikbaar is probeert ASP het object naar string te casten, met bekend gevolg.
CStr daarentegen blijkt dan nog wel van enige slimheid te getuigen en een default property op te kunnen rakelen.

Mijn stellingen zijn dat de code werkt als tenminste een van beide:
- rst als ADODB.Recordset gedeclareerd wordt
- in regel 6 rst.fields(field).Value gebruikt wordt

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 17 september 2004 @ 14:39:
Als het werkt OK, maar dan snap ik nog niet goed wat er mis loopt.

code:
1
Dim rst

maakt rst een variant, maar het wordt gebruikt als resultset-object. Dan zou ik rst toch wel dimmen als
code:
1
Dim rst as ADODB.Recordset

>knip>
Mijn stellingen zijn dat de code werkt als tenminste een van beide:
- rst als ADODB.Recordset gedeclareerd wordt
Uhm, ASP kent geen strong typed vars, en dus dimmen "as Something" gaat je niet lukken...

@Garoth: Doe eens wat meer je best. Probeer eens een stukje van de code, en voeg er steeds een stukje aan toe, totdat 'ie mis gaat? Dus eerst:
code:
1
Response.Write "<td><font color=""#" & statecolor(i) & """>bla&nbsp;</td>"

en als dat werkt:
code:
1
Response.Write "<td><font color=""#ff0000"">/" & rst.Fields(field) & "&nbsp;</td>"


Of verdeel je statement over meerdere .write's zodat je makkelijker ziet waar het probleem zit:

code:
1
2
3
4
5
Response.Write "<td><font color=""#"
Response.Write statecolor(i)
Response.Write """>/"
Response.Write rst.Fields(field)
Response.Write "&nbsp;</td>"


Je zult zelf ook wat initiatief moeten tonen...

[ Voor 50% gewijzigd door RobIII op 17-09-2004 14:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

RobIII schreef op 17 september 2004 @ 14:42:
[...]

Uhm, ASP kent geen strong typed vars, en dus dimmen "as Something" gaat je niet lukken...
Ah ok, dan valt de DIM optie af. Blijft over expliciet aan Field.Value te referen.
Overigens zitten troubles met default properties dan in heel ASP ;) .

[ Voor 13% gewijzigd door Verwijderd op 17-09-2004 14:48 ]


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

het zal je niet vertellen wat het probleem was, maar je kunt het ook zo proberen op te lossen:

code:
1
2
3
4
For Each fld In rs.Fields
    response.write fld.name
    response.write fld.value
Next


(of iets in die strekking dus)

Ook kun je die functie aanroep misschien op een andere regel doen dan de aanroep van je rst(field), om zeker te zien dat het probleem in dat stuk zit en niet in de functie... (vb wil nogal moeilijk zijn in het gebruik van een ampersand (&) aan een functienaam of variabele vast ;) )

(dus zonder spatie)

[ Voor 4% gewijzigd door j_du_pee op 17-09-2004 14:48 ]

kaart != map && bottel != fles
Wacht op antwoord


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 17 september 2004 @ 14:46:
[...]


Ah ok, dan valt de DIM optie af. Blijft over expliciet aan Field.Value te referen.
...En de .value is de default property... Hoewel ik persoonlijk liever expliciet het .value property gebruik, moet het zonder .value net zo goed werken...
:Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
En helaas kloppen ook die stellingen niet...

Dimmen AS iets gaat toch alleen in Visual Basic, en niet in VBScript? Is het trouwens niet mogelijk om iets als int of number te casten? String gaat immers ook...

Ik ben de hele tijd bezig met van alles, maar het probleem is niet echt te isoleren. Alle afzonderlijke stukjes doen het, maar alles samen hangt zich op. En dat dan ook nog maar 50% van de tijd...

@j_du_pee. Die optie gebruik ik om de header van de tabel te maken en dat werkt allemaal goed...

[ Voor 44% gewijzigd door Garoth op 17-09-2004 14:51 ]

Als blikken konden doden, waarom doen ze er dan erwten in?


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Garoth schreef op 17 september 2004 @ 14:49:
En helaas kloppen ook die stellingen niet...

Dimmen AS iets gaat toch alleen in Visual Basic, en niet in VBScript? Is het trouwens niet mogelijk om iets als int of number te casten? String gaat immers ook...
CInt, CCur of CLng bijvoorbeeld. Maarre: heb je mijn edit gezien waarin ik je vraag iets meer je best te doen? Er staan ook nog wat handige suggesties in...

Overigens: Shiet me net te binnen: Is niet een van je records die je probeert af te drukken NULL?

Probeer dan eens:
code:
1
Response.Write "<td><font color=""#" & statecolor(i) & """>/" & CStr(rst.Fields(field) & "") & "&nbsp;</td>"


of

code:
1
2
3
4
5
If IsNull(rst.Fields(field)) then
  Response.write "AAAARGH NULL!"
else
  Response.Write "<td><font color=""#" & statecolor(i) & """>/" & rst.Fields(field) & "&nbsp;</td>"
end if

[ Voor 74% gewijzigd door RobIII op 17-09-2004 14:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

RobIII schreef op 17 september 2004 @ 14:48:
[...]

...En de .value is de default property... Hoewel ik persoonlijk liever expliciet het .value property gebruik, moet het zonder .value net zo goed werken...
:Y)
Voor ASP is Field is een object, zonder type info. Dan behandeld VB het als een IDispatch, de bodem klasse voor ASP. Een IDispatch kan een default property hebben, maar op welke DispID die dan zit is ter invulling van de programmeerkit. Maar standaard zittie op -1.

Nu ziet ASP die Field en denkt "IDispatch". IDispatch heeft alleen admin methoden en geen AsString of wat dan ook. ASP vertikt vervolgens de optelling met "&" te doen.
CStr is blijkbaar ongedocumenteerd slim. Wanneer geconfronteerd met een of ander vaag object probeert CStr als sophisticated guess de VB default property en verrek, dr komt nog wat uit ook :) . Maar eigenlijk had CStr het dus niet kunnen weten en is expliciet .Value gebruiken de enige veilige methode.

  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Helaas, het werkt nog steeds niet. Ik zal anders maar eens helemaal van scratch beginnen.

BTW, over mijn best doen, na drie dagen al hierop te hebben gezeten had ik toch wel het idee dat ik zo'n beetje mijn best had gedaan... ;)

Ik dacht, misschien ziet iemand die er niet al drie dagen naar aan het staren is iets raars...

Als blikken konden doden, waarom doen ze er dan erwten in?


Verwijderd

[quote]RobIII schreef op 17 september 2004 @ 14:50:
[...]
Overigens: Shiet me net te binnen: Is niet een van je records die je probeert af te drukken NULL?
[/code]

Ampersands werken met NULL. Sterker, met de code
code:
1
strIets = "" & KanNullZijn

kan NULL expliciet naar text gecast worden.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 17 september 2004 @ 15:07:
Ampersands werken met NULL. Sterker, met de code
code:
1
strIets = "" & KanNullZijn

kan NULL expliciet naar text gecast worden.
Dat is dan ook precies wat ik in het eerste voorbeeld aangeef: CStr(rst.fields(field) & "") maar goed...

En verder @Garoth; Met alle respect, als je al 3 dagen zoekt naar dit probleem doe je ergens iets niet goed met het debuggen. Dit moet echt wel relatief makkelijk te vinden zijn. We krijgen gewoon erg weinig feedback van je en ik krijg de indruk dat we je aan het handje moeten houden. NOFI hoor, begrijp me niet verkeerd. Ik weet dat 't frustrerend kan zijn om problemen tegen het lijf te lopen die je niet opgelost krijgt ;)

Had je dit al geprobeerd:
code:
1
2
3
4
5
Response.Write "<td><font color=""#"
Response.Write statecolor(i)
Response.Write """>/"
Response.Write rst.Fields(field)
Response.Write "&nbsp;</td>"

:? En waar gaat het dan fout?

[ Voor 27% gewijzigd door RobIII op 17-09-2004 15:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Hoe heb je de array statecolor gevuld?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
RobIII schreef op 17 september 2004 @ 14:32:
En als je een sub aanroept hoef je geen haakjes () te gebruiken... Tenzij je dus een functie aanroept...
Ik vind een Call Blaat(......) eigenlijk veel duidelijker. Kun je tenminste zien of je een sub aanroept of een default propery ( Bweeeeech ) of weet ik wat. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
farlane schreef op 17 september 2004 @ 15:47:
[...]


Ik vind een Call Blaat(......) eigenlijk veel duidelijker. Kun je tenminste zien of je een sub aanroept of een default propery ( Bweeeeech ) of weet ik wat. :)
Eensch is ;)
Ik weet alleen effe niet zo 1 2 3 of ASP ook "Call" kende, maar dat zal dan wel :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

RobIII schreef op 17 september 2004 @ 16:07:
[...]

Eensch is ;)
Ik weet alleen effe niet zo 1 2 3 of ASP ook "Call" kende, maar dat zal dan wel :Y)
ASP kent geen call hoor ;)


vbscript wel daarentegen ;)

kaart != map && bottel != fles
Wacht op antwoord


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
j_du_pee schreef op 17 september 2004 @ 16:18:
[...]

ASP kent geen call hoor ;)


vbscript wel daarentegen ;)
Owh...hhhm. Zal wel een hele logische reden voor zijn dan. ;) ( Eentje die mij verder compleet ontgaat moet ik zeggen )

[ Voor 11% gewijzigd door farlane op 17-09-2004 17:05 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

ASP is geen programmeertaal maar een technologie. Je kunt in ASP ook programmeren in C, perl, php, of cobol :P

Er is genoeg over te vinden, maar de reden dat ik het opmerk is dat het nogal handig kan zijn om te weten of je zoiets in een ASP reference wilt gaan opzoeken of een vbScript reference :)

kaart != map && bottel != fles
Wacht op antwoord


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
j_du_pee schreef op 17 september 2004 @ 17:10:
ASP is geen programmeertaal maar een technologie. Je kunt in ASP ook programmeren in C, perl, php, of cobol :P

Er is genoeg over te vinden, maar de reden dat ik het opmerk is dat het nogal handig kan zijn om te weten of je zoiets in een ASP reference wilt gaan opzoeken of een vbScript reference :)
Ah, op die manier :) Moet eerlijk zeggen dat ik ASP meteen associeer met VBScript. Zal wel door de voorbeelden van MS komen denk ik. :) Die paar ASP dingen die ik gemaakt hebt heb ik ook geen seconde hoeven te denken over welke (script)taal ik nu weer eens zou gaan gebruiken. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1