tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
5598
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
DIESES THEMA IST
GESCHLOSSEN
  1. #1
    Quentin Tutorials.de Gastzugang
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
        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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    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 ;((
     

  2. #2
    Schnitz Schnitz ist offline Mitglied Gold
    Registriert seit
    Apr 2002
    Ort
    Coburg
    Beiträge
    160
    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...
     

  3. #3
    Quentin Tutorials.de Gastzugang
    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 ;((
     

  4. #4
    Quentin Tutorials.de Gastzugang
    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
     

Ähnliche Themen

  1. WebServices - Type mismatch
    Von MrCastle im Forum Java Grundlagen
    Antworten: 1
    Letzter Beitrag: 21.08.09, 09:38
  2. Data type mismatch
    Von NeMeSiS1987 im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 10.04.07, 16:53
  3. type mismatch ->utf8-string
    Von Tailor im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 11.09.06, 11:07
  4. Antworten: 3
    Letzter Beitrag: 22.02.05, 13:44
  5. Antworten: 1
    Letzter Beitrag: 18.05.04, 21:38