# vb-dll, recordset, type mismatch fehler



## Quentin (16. Mai 2002)

*vb-dll, recordset, type mismatch fehler (updated 15:40)*

hi!

bin gerade dabei eine activex-dll mit visual basic zu erstellen. leider gibt es häufig punkte an denen ich stecken bleibe. so einen punkt habe ich jetzt wieder erreicht. ;((

das projekt nennt sich "PPMTEST", das klassenmodul heißt "CONTENT".

beispiel ausgabedatei:


```
dim mycontent
    set myCONTENT = Server.CreateObject("PPMDDDAK.CONTENT")
    mycontent.testing
    myCONTENT.ConnectToDB
    myCONTENT.ExecuteQuery "select * from myusers"

    Do While Not myCONTENT.EOF
	myContent.WriteField("UserName") & "<br>"
    myCONTENT.Movenext
    Loop

    myCONTENT.CloseRS
    myCONTENT.DisconnectFromDB
    set mycontent=nothing
```

der fehler den ich hierbei bekomme:



> PPMDDDAK-Fehler '800a000d'
> 
> Type mismatch
> 
> /ppmTest.asp, Zeile 6



zeile 6: *myContent.ExecuteQuery "select * from myusers"*

also habe ich mich damit beschäftigt ein paar testausgaben zu machen um zu sehen welche werte vorhanden sind.

die sql abfrage wird korrekt übergeben. hier der ganze code der dll:


```
Public objResponse As ASPTypeLibrary.Response
Public objApplication As ASPTypeLibrary.Application
Public objSession As ASPTypeLibrary.Session
Public rs As New ADODB.Recordset
Public strConnectionString As String
Public cn As New ADODB.Connection

Public Sub OnStartPage(sc As ScriptingContext)
    Set objResponse = sc.Response
    Set objApplication = sc.Application
    Set objSession = sc.Session
End Sub
Public Sub ConnectToDB()
    strConnectionString = objApplication("CONNSTRING")
    cn.ConnectionString = strConnectionString
    cn.Open
End Sub

Public Sub DisconnectFromDB()
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
End Sub

Public Sub WriteField(fname As String)
 objResponse.Write rs.Fields(fname)
End Sub

Public Sub CloseRS()
    rs.Close
End Sub

Public Sub ExecuteQuery(ByVal strSQLString As String)
    Dim cmd As New ADODB.Command
    cmd.ActiveConnection = cn
    cmd.CommandText = strSQLString
    cmd.CommandType = adCmdText
    Set rs = cmd.Execute
    Do While Not rs.EOF
        For Each Field In rs.Fields
            objResponse.Write rs(Field.Name)
        Next
    rs.MoveNext
    Loop
    CloseRS
End Sub

Public Sub testing()
    objResponse.Write "hell-O"
    rsIsOpen = False
    objResponse.Write "<br>rsisopen = " & rsIsOpen & "<br><br>"
    objResponse.Write "<br>" & objApplication("CONNSTRING") & "<br><br>"
End Sub
```

die microsoft active data object library 2.5, sowie die asp type library wurde dem projekt korrekt hinzugefügt. die methode TESTING erledigt die ausgaben korrekt und auch der zugriff auf die application-variable hat funktioniert.

dann habe ich versucht herauszufinden in welcher zeile der executequery methode der fehler 

auftritt indem ich testausgaben gemacht habe:


```
Public Sub ExecuteQuery(ByVal strSQLString As String)
objResponse.write "1<br>"
    Dim cmd As New ADODB.Command
objResponse.write "2<br>"
    cmd.ActiveConnection = cn
objResponse.write "3<br>"
    cmd.CommandText = strSQLString
objResponse.write "4<br>"
    cmd.CommandType = adCmdText
objResponse.write "5<br>"
    Set rs = cmd.Execute
objResponse.write "6<br>"
    Do While Not rs.EOF
objResponse.write "7<br>"
        For Each Field In rs.Fields
objResponse.write "8<br>"
            objResponse.Write rs(Field.Name)
objResponse.write "9<br>"
        Next
objResponse.write "10<br>"
    rs.MoveNext
objResponse.write "11<br>"
    Loop
objResponse.write "12<br>"
    CloseRS
objResponse.write "13<br>"
End Sub
```

für testzwecke ist das vertretbar. die ausgabe kam bis zu "5<br>" das heißt doch, das der fehler bei dieser zeile aufgetreten ist: *set rs = cmd.Execute*, oder?

aber was passt da nicht? ich habe das projekt zuvor als exe getestet und da ist dieser fehler nicht aufgetreten. nachdem ich den code in eine dll übernommen habe fing das problem 

mit dem "TYPE MISMATCH" an. doch was passt an dieser zeile nicht? ich habe schon oft queries oder stored procedures aufgerufen mit dieser zeile - in ASP dateien wohlgemerkt. woran liegt 

das problem innerhalb der dll wenn es doch mit exe funktioniert hat?

liegt es an der deklaration des recordsets oder anderer variablen?

wie gesagt, als exe-projekt lief die sache einwandfrei

ich hoffe jemand kann mir helfen, die sache ist für mich persönlich ziemlich dringend 

1024 dank im voraus
quentin


*UPDATE * unter windows xp mit dem iis funktioniert die dll einwandfrei, unter windows nt (4... mit option pack) kommen die fehler, habe vergessen das zu erwähnen, bzw erst jetzt rausgefunden das es unter iis auf xp läuft ;((


----------



## Schnitz (16. Mai 2002)

Also warum das mit den verschiedenen Systemen funktioniert, weiß ich nicht... Evtl. ne fehlende Komponente oder andere Fehlerroutinen...

Aber müsstest du nit sowas wie
set rs = myCommand.execute "sqlString"
schreiben?

Denn in asp ist das ja sonst nicht vorhanden als Collection.
Aber naja, daran liegts wohl nicht...

Leider weiß ich da auch nicht weiter, trotz ner 1MB dll die hier rumliegt...

Hast du das schon mal unter nem 2000er System ausprobiert?
Denn evtl. ists wirklich nur ne Routine, die von NT nicht unterstützt wird...


----------



## Quentin (16. Mai 2002)

naja meine einzige vermutung ist es das das visual basic zu neu ist und es daher zu problemen mit dem "alten" nt kommt... ich versuch mal ein visual basic 4 aufzutreiben und auszuprobieren ob das alles funktioniert, aber es sieht nicht gut aus ;((


----------



## Quentin (21. Mai 2002)

wens interessiert: das thema hat sich vor 5 minuten erledigt, ich musste lediglich statt der active data objects 2.5 die active data objects 2.0 einbinden und das ding lief auch unter NT


----------

