Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

515 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

29 april 2024, 01:48:39

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: User-defined type not defined  (gelezen 14246 keer)

0 leden en 1 gast bekijken dit topic.

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
User-defined type not defined
« Gepost op: 26 januari 2010, 14:21:52 »
In onderstaande code kreeg ik de in het onderwerp genoemde fout, hoewel volgens alles gedefinieerd was (misschien zlefs iets te veel in mijn poging het probleeem op te lossen). Zou er een reference of component onbreken? Ik heb recnet Windows opnieuw geïnstalleerd.
De code is
Sub SortX()
    Dim dbsAandelen As Database
    Dim rstRatios As Recordset
    Dim rstSortRatios As Recordset
    On Error GoTo FoutSortX
    Set dbsAandelen = OpenDatabase(frmInvestor.ext(App.Path) & "DATABASE\Aandelen.mdb")
    Set rstRatios = _
        dbsAandelen.OpenRecordset("Ratios", dbOpenDynaset)
    With rstRatios
        SortOutput "Original Recordset:", rstRatios
        .Sort = "Aandeel, Jaar"
        ' Print report showing Sort property and record order.
        SortOutput _
            "Recordset after changing Sort property:", rstRatios
        ' Open new Recordset from current one.
        Set rstSortRatios = .OpenRecordset
        ' Print report showing Sort property and record order.
        SortOutput "New Recordset:", rstSortRatios
       
        rstSortRatios.Close
        .Close
    End With
    dbsAandelen.Close
Exit Sub
FoutSortX:
    Foutbron = Err.Number & " " & Err.Description & " in SortX"
    If Foutbron <> VorigeFout Then
        Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & Foutbron)
        VorigeFout = Foutbron
        Resume Next
    End If

End Sub
Function SortOutput(strTemp As String, rstTemp As Recordset)
 
    With rstTemp
        Debug.Print strTemp
        Debug.Print "    Sort = " & _
            IIf(.Sort <> "", .Sort, "[Empty]")
.MoveFirst
        ' Enumerate Recordset.
        Do While Not .EOF
            Debug.Print "        " & !Aandeel & ", " & !Datum        '& ", " & !Koers & ", " & [Winst / Aandeel]
            frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "        " & !Aandeel & ", " & !Datum & ", " & !Voorspelling & ", " & !SlotKoers & vbCrLf
            frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "        " & !Koers & ", "
            frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "        " & !Winst / !Aandeel & ", " & !Dividend / !Aandeel
            frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "        " & !EigenVermogen / !Aandeel & ", " & !Jaar
            frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "        " & !DividendRendement & vbCrlf
            .MoveNext
        Loop
    End With
End Function
Public Sub SortVoorspelling()
    Dim ControleMatrix(2000, 5)
    Dim dbsKoersVoorspelling As Database
    Dim rstKoersVoorspelling As Recordset
    Dim rstSortKoersVoorspelling As Recordset
    Dim strTemp as String 
    On Error GoTo FoutSortVoorspelling
   
    Set dbsKoersVoorspelling = OpenDatabase(frmInvestor.ext(App.Path) & "DATABASE\KoersVoorspelling.mdb")
    Set rstKoersVoorspelling = _
        dbsKoersVoorspelling.OpenRecordset("KoersVoorspelling", dbOpenDynaset)
    With rstKoersVoorspelling
        SortOutput "Original Recordset:", rstKoersVoorspelling
        .Sort = "Aandeel, Datum"
        ' Print report showing Sort property and record order.
        SortOutput _
            "Recordset after changing Sort property:", rstKoersVoorspelling
        ' Open new Recordset from current one.
        Set rstSortKoersVoorspelling = .OpenRecordset
        ' Print report showing Sort property and record order.
        SortOutput "New Recordset:", rstSortKoersVoorspelling
        i = 1
        rstSortKoersVoorspelling.index = 1
        rstSortKoersVoorspelling.MoveFirst
        Do While rstSortKoersVoorspelling.Recordset("SlotKoers") > 0
            ControleMatrix(i, 1) = rstKoersVoorspelling("Datum")
            ControleMatrix(i, 2) = rstKoersVoorspelling.Recordset("Voorspelling")
            ControleMatrix(i, 3) = rstKoersVoorspelling.Recordset("SlotKoers")
            ControleMatrix(i, 4) = rstKoersVoorspelling.Recordset("SlotKoers") - rstKoersVoorspelling.Recordset("Voorspelling")
            ControleMatrix(i, 5) = rstKoersVoorspelling.Recordset("Aandeel")
            i = i + 1
            If i < rstSortKoersVoorspelling.RecordCount Then
                rstSortKoersVoorspelling.MoveNext
            End If
        Loop
           
       
        rstSortKoersVoorspelling.Close
        .Close
    End With
    dbsKoersVoorspelling.Close
   
    Exit Sub
FoutSortVoorspelling:
    Foutbron = Err.Number & " " & Err.Description & " in SortVoorspelling"
    If Foutbron <> VorigeFout Then
        Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & Foutbron)
        VorigeFout = Foutbron
        Resume Next
    End If

End Sub
'Note   When you know the data you want to select, it's usually more efficient to create a Recordset with an SQL statement. This example shows how you can create just one Recordset and obtain the same results as in the preceding example.
Sub SortX2()
    Dim dbsAandelen As Database
    Dim rstRatios As Recordset
    On Error GoTo FoutSortX2
    Set dbsAandelen = OpenDatabase(frmInvestor.ext(App.Path) & "DATABASE\Aandelen.mdb")
    ' Open a Recordset from an SQL statement that specifies a
    ' sort order.
    Set rstRatios = _
        dbsAandelen.OpenRecordset("SELECT * " & _
        "FROM Ratios ORDER BY Aandeel, Jaar", _
        dbOpenDynaset)
    EnumFields rstRatios, 12
   
    dbsAandelen.Close
Exit Sub
FoutSortX2:
    Foutbron = Err.Number & " " & Err.Description & " in SortX2"
    If Foutbron <> VorigeFout Then
        Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & Foutbron)
        VorigeFout = Foutbron
        Resume Next
    End If

End Sub
« Laatst bewerkt op: 28 januari 2010, 19:33:38 door Ronald »

Offline Michel Uphoff

  • Wizop
  • *****
  • Berichten: 1.816
  • Geslacht: Man
    • Tentoonstelling
Re: User-defined type not defined
« Reactie #1 Gepost op: 26 januari 2010, 15:25:06 »
Dag Jan,
 
Citaat
Zou er een reference of component onbreken?
Dat was ook mijn eerste inval. Je hebt ze allemaal nagelopen? Vink ze desnoods even uit en weer aan. Schijnt soms te helpen. Mogelijk mis je door de herinstallatie een aantal componenten.
Michel Uphoff
Homepage

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #2 Gepost op: 26 januari 2010, 20:13:21 »
Hoi Jan,

Citaat
hoewel volgens alles gedefinieerd was (misschien zlefs iets te veel in mijn poging het probleeem op te lossen)
Het probleem van wel of niet gedefinieerd is simpelweg te voorkomen door in de 1e regel van elke module en elk formulier "Option Explicit" te plaatsen. Als dat nog niet gebeurd is, doe dat dan eerst.
 
Je plaatst 4 routines, 3 ervan hebben een eigen error-afhandeling, 1 niet.
Enkele vragen:
a) In welke routine treedt de fout op?
b) Kun je zodra de fout optreedt in de VB IDE, niet achterhalen waar je programma bezig?
c) Je logt foutmeldingen, geeft de logfile geen aanvullende informatie?

Deze variabelen zijn hier niet nader gedefinieerd:
FoutBron    waarschijnlijk een string
VorigeFout  waarschijnlijk een string

in SortVoorspelling() staat Dim strTemp As String
strTemp wordt daar netjes gebruikt!
in SortVoorspelling() wordt teller i gebruikt maar staat nergens gedefinieerd


groeten, Peter

Offline TdJ

  • Sysop
  • *****
  • Berichten: 218
  • Geslacht: Man
    • Mijn bedrijf
Re: User-defined type not defined
« Reactie #3 Gepost op: 26 januari 2010, 20:37:13 »
Jan,
 
Citaat
Dim dbsAandelen As Database
Dim rstRatios As Recordset
Dim rstSortRatios As Recordset

Ik schat in dat een van deze de fout veroorzaakt, een referentie naar dao/ado/rdo in het project is denk ik datgene wat ontbreekt (is dus afhankelijk van wat je als db toegang wilt gebruiken)
 
Groeten,
 
Tony

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #4 Gepost op: 27 januari 2010, 15:53:02 »
Peter,
Option Explicit wordt al gebruikt in alle modules en formulieren. Je ziet dat niet omdat de getoonde code het voor de fout relevante deel van de betreffende module is. Daarom mis je ook de definitie van enkele variabelen.
De fout treedt op op de regel Function SortOutput(strTemp As String, rstTemp As Recordset) en onmiddellijk na selecteren van menu-item Run, er is dan nog niets gebeurd. Ik heb een break gezet op de eerste regel van Form_Load van het Main Form, maar voor hij daar is krijg ik de foutmelding al. Dat maakt het zo moeilijk zoeken naar de oorzaak. Verder is het irritant dat VB een fout al aangeeft voordat de plaats waar deze optreedt bereikt is. Dat zal waarschijnlijk wel een doel dienen, maar voor sommige dingen is het hinderlijk.
Ik heb de References en Components van de backup versie bekeken en de ontbrekende aangevinkt voorzover die niet verwijderd konden worden, maar de fout blijft. Sommige References komen onder precies dezelfde benaming onder Components voor. Deze kun je echter wel verwijderen zonder de melding te krijgen dat dit niet kan.
Wat ik gek vind, ondanks dat ik databases gebruik kunnen de
vinkjes bij alle references en components met DAO of ADO zonder problemen weggehaald worden.

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #5 Gepost op: 27 januari 2010, 16:01:20 »
Hoi Michel,
Ik had gelukkig nog een aantal recente backups. Deze heb ik gestart en de References en Components vergeleken met die ik nu heb en de ontbrekende aangevuld voorzover ze niet verwijderd konden worden, maar de fout blijft. Wat ik wel gek vind is dat aanvinken en daarna proberen te verwijderen uit References en Components met daarin ADO en DAO, dat ondanks dat ik databases gebruik (en intensief zelfs) dat verwijderen geen commentaar oplevert dat ze niet verwijderd kunnen worden.
Ook komen bepaalde references onder precies dezelfde namen onder Components voor.
Ik zou de fout wel kunnen omzeilen door de sortering via queries te regelen, maar dan kom ik nooit achter de oorzaak en die wil ik wel graag weten.
 

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #6 Gepost op: 27 januari 2010, 16:11:44 »
Dag Tony,
Ik vermoedde dit ook en heb de References en Components met DAO en ADO aangevinkt en ondanks dat ik in het betreffende project erg veel met databases werk krijg ik geen commentaar als ik de vinkjes bij de DAO en ADO References en Components weg probeer te halen. Wat ik ook gek vind is dat sommige References ook als Components voorkomen, maar daar kun je de vinkjes weghalen zonder commentaar dat ze niet verwijderd kunnen worden. Bij de References krijg je dat commentaar wel. Dit is natuurlijk wel logisch maar het dubbel voorkomen niet en het volledig kunnen ontbreken van de ADO en DAO's is m.i. onlogisch. 
 
Jan

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #7 Gepost op: 28 januari 2010, 01:05:31 »
Hoi Michel, Peter en Tony,
Ik heb de functie SortOutput Public gemaakt en ben de fout daarop kwijt. Maar ik heb hem terug op iets anders, namelijk op de declaratie van MyDB. De code is:
Option Explicit
Dim FlagLeeg As Boolean
Dim Aanvrager As String
Dim FlagDBOpen As Boolean
Private MyDB As Database    'database object
Private MyRS As Recordset   'recordset object
Private MySql As String     'sql for artikel table
Private Path                'Database path
Private Mystate As Byte     'used as state machine
Private BkMark As String    'bookmark holder
 
'all command button selections processed here
Public Sub Command1_Click(index As Integer)
On Error GoTo FoutNieuweAandeel
Dim i As Integer
'Screen.MousePointer = vbHourglass
Select Case index
    Case 0 ' move first
        MyRS.MoveFirst
        ' disable move previous because
        ' there we are at the beginning
        ' of recordset.
        Command1(1).Enabled = False
        ' enable move next button
        Command1(2).Enabled = True
        ' populate the edit display
        LeesRatios
    Case 1 ' move previous
        MyRS.MovePrevious
        If MyRS.BOF Then
            ' oops, moved past the first row
            ' so move back to valid row and
            MyRS.MoveFirst
            ' disable moveprevious
            Command1(1).Enabled = False
        End If
            ' enable the movenext button
            Command1(2).Enabled = True
            ' populate the edit display
            LeesRatios
    Case 2
        MyRS.MoveNext
        If MyRS.EOF Then
            ' oops, moved past the last row
            ' so move back to valid row and
            MyRS.MoveLast
            ' disable the movenext button
            Command1(2).Enabled = False
         End If
            ' enable the moveprevious button
            Command1(1).Enabled = True
            ' populate the edit display
            LeesRatios
    Case 3  ' move last
            MyRS.MoveLast
            ' enable the moveprevious button
            Command1(1).Enabled = True
            ' disable the movenext button
            Command1(2).Enabled = False
            ' populate the edit display
            LeesRatios
    Case 4  'addnew
        'enable editing in text boxes
        LockText False
        'allow only a commit or cancels
        LockEditButtons False
        'set the AddNew state
        Mystate = Mystate Or ADDMODE
        'clear the text boxes
        WisAandeelTab
        Label14 = "Database in Add New Record Mode" & Mystate
    Case 5  'edit
        'enable editing in the text boxes
        LockText False
        'allow only commit and cancel buttons
        LockEditButtons False
        'set the Edit state
        Mystate = Mystate Or EDITMODE
        Label14 = "Database in Edit Current Record Mode " & Mystate
    Case 6  'delete
        'allow only the commit and cancel buttons
        LockEditButtons False
        'set the Delete state
        Mystate = Mystate Or DELETEMODE
        'Warn user of impending delete
        Label14 = "BENT U ER ZEKER VAN DAT U DIT RECORD WILT VERWIJDEREN" & Mystate
        Label14.ForeColor = vbRed
    Case 7  'commit
        'disable editing in text boxes
        LockText True
        'enabe main selection buttons
        LockEditButtons True
        Label14.ForeColor = vbBlue
        'if we are in a Deletemode state
        If Mystate And DELETEMODE Then
            Label14 = "Deleten van Current Record"
            'look for row to land on
            'after the delete is completed
            MyRS.MoveNext
            If Not MyRS.EOF Then
                'set up move to next row
                'if its available
                BkMark = MyRS.Bookmark
                'move back to row marked
                'for deletion
                MyRS.MovePrevious
            Else
                'if there are no subsequent rows
                'then we look for a previous row
                'to move to after delete
                MyRS.MovePrevious
                MyRS.MovePrevious
                If Not MyRS.BOF Then
                    'set up move to previous row
                    'after delete
                    BkMark = MyRS.Bookmark
                Else
                    BkMark = ""
                End If
                MyRS.MoveNext
            End If
            MyRS.Delete
            If Len(BkMark) > 0 Then
                MyRS.Bookmark = BkMark
                LeesRatios
            Else
                For i = 0 To 10
                    Command1(i).Enabled = False
                Next i
                'no records left
                Mystate = Mystate Or EMPTYDATABASE
            End If
        Else
            Label14 = "Opslaan van de wijzigingen in de database"
            SchrijfAandeelTab
            Mystate = Mystate And VALIDRECORDS
        End If
        Mystate = Mystate And NOTEDITMODE
    Case 8  'cancel
        LockText True
        LockEditButtons True
        LeesRatios
        Mystate = Mystate And NOTEDITMODE
        Label14.ForeColor = vbBlue
        Label14 = "Cancellen van veranderingen aan de Database" & Mystate
    Case 9  'end program
        Unload Me
    Case 10 'FIND
'        Aanvrager = "AandeelFrm"
        Aanvrager = "RatiosFrm"
        Set frmFindFormRatios.MyRecordset = MyRS
        Set frmFindFormRatios.MyForm = Me
        Mystate = Mystate Or FINDBOXOPEN
        frmFindFormRatios.LadenVeldnamen
        frmFindFormRatios.Show 1
    Case 11 'get data
        frmInvestor.CommonDialog1.filename = "*.mdb"
        GetDatabase
   
End Select
Screen.MousePointer = vbDefault
Exit Sub
FoutNieuweAandeel:
       Foutbron = Err.Number & " " & Err.Description & " in Nieuwe Aandeel"
       Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & Foutbron & NaamFonds(1))
       Resume Next
End Sub
Private Sub KeyCheck(Ctrl As Control, OK$, MaxLen, KeyAscii)
 
  If InStr(OK$, Chr$(KeyAscii)) = 0 Then KeyAscii = 0
  If Len(Ctrl.Text) >= MaxLen And KeyAscii <> 8 Then KeyAscii = 0
End Sub

Public Sub GetDatabase()
' Deze procedure public gemaakt op 25-03-2500
On Error GoTo BadOpen
Dim i As Integer
On Error Resume Next
'use the common dialog to get database
frmInvestor.CommonDialog1.Action = 1
'put the full path into the Path variable
Path = frmInvestor.CommonDialog1.filename
Label14.ForeColor = vbBlue
Label14 = "Probeer " & Path & "te openen"
'allow screen to redraw
DoEvents
'if there is an error then user cancelled
'loading the database
If Err Then
    Label14 = "OPEN DATABASE GECANCELLED DOOR GEBRUIKER"
    Label14.ForeColor = vbRed
    Exit Sub
End If
'set up the sql string
MySql = "Select * from Ratios"
'if an error occurs from this point onward
'then handle it as a bad database error
On Error GoTo BadOpen
'open the database in the default workspace
Set MyDB = Workspaces(0).OpenDatabase(Path, False, False)
'open recordset as a dynaset type so we can use
'the find methods
Set MyRS = MyDB.OpenRecordset(MySql, dbOpenDynaset)
If MyRS.RecordCount > 0 Then
    MyRS.MoveFirst
    Label14 = Path & " Nu klaar voor gebruik"
    'populate the text boxes
    LeesRatios
    'set the command buttons
    Mystate = Mystate And VALIDRECORDS
Else
    Label14 = Path & " Nu klaar voor gebruik met lege database"
    Mystate = Mystate Or EMPTYDATABASE
    FlagLeeg = True
End If
LockEditButtons True
' enable knop toevoegen en afsluiten.
Command1(4).Enabled = True
Command1(9).Enabled = True
'disable the moveprevious button
Command1(1).Enabled = False
FlagDBOpen = True
Exit Sub
'what ever the error is we need
'to exit the sub in a no-database mode
BadOpen:
    Label14 = Error$
    Label14.ForeColor = vbRed
    'make sure we are in no database mode
    For i = 1 To Command1.count - 3
    Command1(i).Enabled = False
    Next i
    'allow user to retry opening a database
    'or exit the program entirely
    Exit Sub
End Sub
Private Sub SchrijfAandeelTab()
On Error GoTo FoutSchrijvenRecord
'depending on the value of MyState the
'procedure initiates an AddNew or Edit
Dim i As Integer
If Mystate And EDITMODE Then
    MyRS.Edit
Else
    MyRS.AddNew
End If
'it then writes the contents of the text
'boxes to the Recordset fields
For i = 0 To Ratios.count - 1
    MyRS.Fields(i) = Ratios(i)
Next
'updates the recordset and reads in the current
'record data back into the text boxes
MyRS.Update
LeesRatios
Exit Sub
FoutSchrijvenRecord:
       Foutbron = Err.Number & " " & Err.Description & " in Schrijven artikelrecord"
       Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & Foutbron & NaamFonds(1))
       Resume Next
End Sub
Private Sub LockText(myflag As Boolean)
'lock or unlock the text boxes base on Myflag
'True = Locked
'False = unlocked
Dim i As Integer
'noedit CInt(ArtikelTab(0).hwnd), True
For i = 0 To Ratios.count - 1
    noedit CInt(Ratios(i).hWnd), myflag
Next
End Sub
Private Sub WisAandeelTab()
'sets all the text boxes to empty strings
    Dim i As Integer
    For i = 0 To Ratios.count - 1
        Ratios(i) = ""
    Next
End Sub
Private Sub LockEditButtons(myflag As Boolean)
    If Not Mystate And EMPTYDATABASE Then
        'locks and unlocks buttons depending on
        'edit state
        Command1(0).Enabled = myflag
        Command1(1).Enabled = myflag
        Command1(2).Enabled = myflag
        Command1(3).Enabled = myflag
        Command1(4).Enabled = myflag
        Command1(5).Enabled = myflag
        Command1(6).Enabled = myflag
        Command1(7).Enabled = Not myflag    'Commit
        Command1( 8) .Enabled = Not myflag    'cancel
        Command1(9).Enabled = myflag
        Command1(10).Enabled = myflag
        Command1(11).Enabled = myflag
    Else
        'only addnew allowed on empty database
        Command1(0).Enabled = myflag
        Command1(1).Enabled = False
        Command1(2).Enabled = False
        Command1(3).Enabled = False
        Command1(4).Enabled = False
        Command1(5).Enabled = False
        Command1(6).Enabled = False
        Command1(7).Enabled = Not myflag    'Commit
        Command1( 8) .Enabled = Not myflag    'cancel
        Command1(9).Enabled = False
        Command1(10).Enabled = myflag
        Command1(11).Enabled = myflag
        If FlagLeeg = True Then
            ' enable knop toevoegen en afsluiten.
            Command1(4).Enabled = True
            Command1(9).Enabled = True
        End If
    End If
End Sub
Private Sub Command2_Click()
    frmAandelenOverzicht.Show
End Sub
Private Sub Form_Load()
LockText True
End Sub

Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
MyRS.Close
MyDB.Close
Set MyRS = Nothing
Set MyDB = Nothing
End Sub
 
Public Sub LeesRatios()
    For i = 0 To Ratios.count - 1
        Ratios(i) = "" & MyRS.Fields(i)   'Artikelnummer
    Next i
   
End Sub
« Laatst bewerkt op: 28 januari 2010, 19:28:41 door Ronald »

Offline Ronald

  • Forum Manager
  • *****
  • Berichten: 1.856
  • Geslacht: Man
    • NL Computer Forum
Re: User-defined type not defined
« Reactie #8 Gepost op: 28 januari 2010, 19:33:00 »
Hoi Jan,

Even een tip tussendoor: als je code plaatst, kun je dat het beste tussen [code] en [/code] tags zetten. Je voorkomt dan, dat bijv. :) wordt vertaald in een :)

Er is ook een knopje voor; zie het # knopje. ;)

Groeten,

Ronald
Forum Manager NL Computer Forum
Microsoft Certified Solutions Expert (MCSE) - Business Intelligence

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #9 Gepost op: 28 januari 2010, 20:05:46 »
Hoi Jan,

Citaat
Ik heb de functie SortOutput Public gemaakt en ben de fout daarop kwijt.
Die logica snap ik niet. Bestaat er soms ook iets anders in je code met de naam SortOutput, bijv. een variabele of type?

Citaat
Maar ik heb hem terug op iets anders, namelijk op de declaratie van MyDB.
Je zei dat Windows opnieuw geinstalleerd is, dus ook VB6. Heb je daarna ook Service Pack 6 voor VB6 geinstalleerd?

Op deze manier kan ik je fout reproduceren (VB6/SP6):
Open een nieuw project
Plaats een Data control op het formulier
In de lijst met referenties wordt nu "Microsoft DAO 3.6 Object Library" aangevinkt.
Plaats deze code in het formulier:
Sub Test(RS As RecordSet)
End Sub

Haal het vinkje weg bij "Microsoft DAO 3.6 Object Library"
Start je project
De fout "User-defined type not defined" verschijnt nu op de regel Sub Test... omdat het type RecordSet onbekend is.

Maak eens een screenshot van de lijst referenties en plaats dat in een bericht.


groeten, Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #10 Gepost op: 28 januari 2010, 23:57:58 »
Ik heb de volgende references aangevinkt staan:
Visual Basic Objects and Procedures, Visual Basic runtime objects and procedures, Visual Basic objects and procedures, Visual Basic for Applications, GraphicsServer  Extended Graph, VB6 Application Wizard, Microsoft Common Dialog Control 6.0 (SP6), Microsoft Flex Grid Control 6.0 (SP6), Microsoft DataBound Grid Control 5.0 (SP3), Crystal Reports Control, Crystal OLAP Dimension Explorer Control 2.0, Crystal ActiveX Report Viewer Library 11.0, Crystal Common File Dialog Library 11.0, Crystal Reports Print Control Library 11.0, Crystal Reports File Dialog 11.0.
Nu ik Microsoft DAO 3.6 Object Library aangevinkt heb is mijn "user-defined type not defined" verdwenen. Deze is dus kennelijk nodig, maar weghalen van het vinkje wordt niet geweigerd. Anderzijds komen er geen MISSING references voor, terwijl er duidelijk toch ontbreken. Erg duidelijk zijn die Microsoft aanwijzingen niet.
Het gekke is dat ik het "user-defined type not defined" kwijt ben, maar krijg er mijn oude bekende "Unknown", "Cannot find Installable ISAM" en "Disk or network error"  voor terug.
Ik gebruik in mijn project geen andere databases dan Access en heb Installable ISAM dus niet nodig, dus waarom vraagt VB er dan om?

Offline TdJ

  • Sysop
  • *****
  • Berichten: 218
  • Geslacht: Man
    • Mijn bedrijf
Re: User-defined type not defined
« Reactie #11 Gepost op: 29 januari 2010, 00:16:38 »
 
Citaat

Nu ik Microsoft DAO 3.6 Object Library aangevinkt heb is mijn "user-defined type not defined" verdwenen.

Dat verbaasd me eerlijk gezegd niet, volgens mij was dat ook als suggestie gegegeven als mogelijke oplossing.
 
Citaat

Deze is dus kennelijk nodig, maar weghalen van het vinkje wordt niet geweigerd. Anderzijds komen er geen MISSING references voor, terwijl er duidelijk toch ontbreken.

Als je iets gebruikt dat niet in de runtime zelf zit is het nodig, het feit dat je de verwijzing weg kunt laten zorgt er nog niet voor dat het dus maar niet nodig is. Denk in dat kader ook eens aan de zogenoemde 'late binding', dan wordt pas tijdens runtime gecontroleerd hoe het zit. Dat de refences kan worden verwijderd is eigenlijk ook heel logisch, er is nergens een mechanisme dat controleert in de code of die reference noodzakelijk is, alleen references die bijvoorbeeld als objecten op een form worden geplaats worden gecontroleerd. De code wordt tijdens compile of runtime gecontroleerd en levert dan fouten voor userdefined types op, want dat zijn het gewoon. Je kunt ipv de refences namelijk ook zelf types maken die diezelfde naam hebben en iets heel anders doen of zijn. Dat is o.a. de reden dat je het vinkje 'zomaar' weg kunt halen en het niet te controleren is of ze noodzakelijk zijn, maar door de types te gebruiken weet je zelf dat de refentie noodzakelijk is.
 
TdJ

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #12 Gepost op: 29 januari 2010, 00:38:33 »
Hoi Jan,

Ik vroeg dit al eerder: "Je zei dat Windows opnieuw geinstalleerd is, dus ook VB6. Heb je daarna ook Service Pack 6 voor VB6 geinstalleerd?"

Citaat
maar krijg er mijn oude bekende "Unknown", "Cannot find Installable ISAM" en "Disk or network error"  voor terug.
Worden de database bestanden niet op meer plaatsen tegelijk geopend en/of bewerkt?
Misschien heb je HIER wat aan.
Maak tijdelijk zoveel mogelijk commentaar van je code om te achterhalen wat en waar er iets fout gaat.
Dat gaat super-makkelijk met de knoppen "Comment Block" en "Uncomment Block".


groeten, Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #13 Gepost op: 29 januari 2010, 10:30:22 »
Dank je Peter. Ik zal het proberen.

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: User-defined type not defined
« Reactie #14 Gepost op: 29 januari 2010, 10:36:03 »
TdJ,
Bedankt voor je reactie. Dit maakt iets duidelijk dat ik niet wist.
Maar VB zou toch uit de code moeten kunnen opmaken welke references nodig zijn en welke niet? Ik heb nergens op internet kunnen vinden welke references nodig zijn bij welke programma-onderdelen. Bestaat iets dergelijks wel?