Q
Quentin
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:
der fehler den ich hierbei bekomme:
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:
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:
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 ;((
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:
Code:
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:
Code:
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:
Code:
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