Vraag & Antwoord

Programmeren

[VB6] Een lijst creëren met alle variabelen en Form.Values

6 antwoorden
  • Is het mogelijk om op eenvoudige wijze een overzicht te krijgen van de variabelen en form.values die zich in het geheugen bevinden? Ik ben namelijk bezig met het schrijven van een stukje software dat op een andere locatie gebruikt gaat worden. Mochten er zich daar problemen voordoen, dan zou ik graag een log-bestandje ontvangen met deze waarden. Iemand een idee? Ik kan het natuurlijk handmatig doen zoals ik hieronder als voorbeeldje heb getyped, maar het lijkt mij zo makkelijk als ik iets heb wat ik in iedere routine kan CopyPasten! Hier een voorbeeldje waaruit hopelijk naar voren komt met wat ik precies wil in het bestandje, maar dan dynamisch: [b:81fbaa32c9]ErrorHandler: If <no other handled error> then File_Content = "Error in sub Test_This()" & vbnewline & _ "date en time:" & now() & vbNewline & _ myTeller & vbNewline & _ myCount & vbNewline & _ myString & vbNewline & vbNewline & _ "Form1" & vbnewline & _ "form1.textbox1.text: " & form1.textbox1.text & vbnewline & _ etc, etc, etc file_Name = "C:\Temp\Errorlog_" & now() & ".txt" Open file_Name For Output As #1 Print #1, File_Content Close #1 msgbox "unexpected error blabla if error continues sent errorlog to ME!" end if[/b:81fbaa32c9] Alvast bedankt voor het meedenken!
  • Maak een aparte routine die je aan kunt roepen. Je kan het formulier(-object) waar de fout optreedt als parameter doorgeven aan deze routine. Daarnaast kun je van alles en nog wat doorgeven: als je voor de fout-routine als laatste parameter een paramarray definieert, kun je daarin alles kwijt wat je nodig hebt. Een voorbeeld om het wat duidelijker te maken: [code:1:aa217e58fa] Public Sub LogUnhandled(objForm_IN as Form, ParamArray args() as Variant) ' Routine om unhandled errors te loggen Dim File_Content as string Dim i as Integer File_Content = "Error in Form: " & objForm_IN.Name & vbNewLine For i = 0 to Ubound(args) ' Voeg de tekst van de argumenten toe aan je string Next ' Wegschrijven naar log End Sub [/code:1:aa217e58fa] Je kan ook alle controls (en de waarden daarvan) van het formulier via het object objForm_IN loggen. Je roept de functie als volgt aan: [code:1:aa217e58fa] ErrHandler: Dim argumenten(<aantal>) as variant ' aantal is 0-based ' vul de argumenten, bijvoorbeeld: argumenten(0) = "textbox1.text=" & textbox1.text ' klaar met vullen? roep maar call LogUnhandled(me,argumenten) [/code:1:aa217e58fa] Het kan zijn dat je de functie moet aanroepen met LogUnhandled(me,argumenten()), maar dat moet je maar even testen. Lees ook [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbcondebuggingyourcodehandlingerrors.asp]dit [/url] eens goed door.
  • Bedankt voor je snelle antwoord, maar het is helaas niet helemaal wat ik bedoel. In jouw antwoord moet ik nog steeds alle variablen die in het overzicht komen zelf aangeven, en dat probeer ik te omzeilen. Wat ik hoop is dat er een soort routine bestaat die er uit ziet als: [b:182abb7bc6] myTeller = 0 do while form1.object(myTeller).exist = True myCount = 0 ____Do while form1.object(myTeller).propertyname(mycount).exist = true ______File_Content= File_Content & propertyname(mycount).name & propertyname(mycount).value & vbnewline ____myCount = myCount +1 ____Loop myteller = myteller +1 loop[/b:182abb7bc6] (NB: Deze code werkt dus NIET, maar is er iets wat hier op lijkt?) Als je ook zoiets soortgelijks ook zou hebben voor variabelen, dan heb je alle geheugeninfo die relevant kan zijn. Ik weet dus niet of wat ik wil ook bestaat. Mocht het niet bestaan dan zal ik zeker gebruik maken van jouw manier door alles middels een array door te geven. (bedankt trouwens voor de tip msdn, ik zag het er zo gauw niet bijstaan, maar er staat in iedergeval zeer veel andere info)
  • Via het formulier object kun je alle controls langsgaan. Dus om nog even door te gaan op mijn vorige voorbeeld, nog wat meer. In de procedure doe je het volgende: [code:1:0d5d243434] Dim objControl as Control For Each objControl in objForm_IN.Controls ' Doe wat met de controls, bijvoorbeeld File_Contents = File_Contents & objControl.Name & "=" & ObjControl.Value & vbnewline Next[/code:1:0d5d243434] Elk type Control heeft in ieder geval deze twee eigenschappen. Er zijn er nog meer, maar dat mag je zelf uitzoeken :wink: Wat de variabelen betreft: tenzij je deze globaal definieert (wat ik je kan afraden, maar dat is een topic op zich :o ), zul je die toch als parameter moeten meegeven. Daar ontkom je niet aan.
  • Volgens mij is dit wat ik wilde weten. Het is nu bijna half zeven, maar ik ga het morgenochtend gelijk uitproberen! (Eindelijk weer een goede reden om morgen vroeg op het werk te verschijnen...)
  • Dit werkt inderdaad heel mooi! Ik moet nog even kijken welke eigenschappen relevant zijn, maar ik dit is precies wat ik wilde weten. Jammer dat het niet mogelijk is om variablen simpel te achterhalen, maar ik bedacht net dat die aan het begin van iedere Sub gedeclareerd staan, dus met wat knip en plak hoeft dat ook niet zo'n probleem te zijn. BEDANKT!!! (overigens kwam ik er proefondervindelijk achter dat een timer geen .value heeft)

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.