Vraag & Antwoord

Programmeren

VB6.0 ON ERROR + VERVOLG

18 antwoorden
  • Hoi allemaal Ik heb een communicatie programma dat perfect werkt, maar er is een klein probleem. Als ik een COM poort selecteer die niet op de computer zit dan krijg ik de meldig [b:fdf00094ce]Run time error 8012 The device is not open.[/b:fdf00094ce] Het afvangen van de error in de sub waar de keuze voor de COM poort wordt gemaakt lukt mij niet. Ik heb dat geprobeerd met: [b:fdf00094ce]On Error Go to err[/b:fdf00094ce] Maar ik heb met die [b:fdf00094ce]ON ERROR [/b:fdf00094ce]nog wel wat te leren. [code:1:fdf00094ce] Public Sub optComPort(frm As Form, Index As Integer) On Error GoTo err kiezen: ' In de If Then Else constructie wordt eerst gekeken of de CommPort ' open staat, "zo ja" dan wordt deze gesloten, "zo niet" ga dan door ' naar de select case If frm.MSComm1.PortOpen = True Then frm.MSComm1.PortOpen = False Else: End If ' In de onderstaande select case wordt bepaald welke compoort er ' geopend gaat worden. Select Case Index Case 1 PortValue = "1" frm.Label4(1).Caption = "1" Case 2 PortValue = "2" frm.Label4(1).Caption = "2" Case 3 PortValue = "3" frm.Label4(1).Caption = "3" Case 4 PortValue = "4" frm.Label4(1).Caption = "4" Case 5 PortValue = "5" frm.Label4(1).Caption = "5" Case 6 PortValue = "6" frm.Label4(1).Caption = "6" Case 7 PortValue = "7" frm.Label4(1).Caption = "7" Case 8 PortValue = "8" frm.Label4(1).Caption = "8" End Select ' Geef de keuze van de CommPort aan MSCOMM. frm.MSComm1.CommPort = PortValue ' Open de gekozen CommPort voor communicatie. frm.MSComm1.PortOpen = True Exit Sub err: MsgBox ("De gekozen compoort bestaat niet op uw computer, kies opnieuw") End Sub [/code:1:fdf00094ce] Kunnen jullie een oplossing aandragen ???? [img:fdf00094ce]http://home.hccnet.nl/f.x.van.b.henegouwen/yvonterm.gif[/img:fdf00094ce] groetjes, Yvonne
  • probeer eens [b:afac8042bd]goto fout[/b:afac8042bd] ipv [b:afac8042bd]goto err[/b:afac8042bd]. Err is namelijk een variabele van Basic... (natuurlijk ook je label varanderen)
  • Hoi WebSpider Ik ga het uitproberen :D . Tot morgen. groetjes, Yvonne
  • [quote:d34ffc6cf6="webspider"]probeer eens [b:d34ffc6cf6]goto fout[/b:d34ffc6cf6] ipv [b:d34ffc6cf6]goto err[/b:d34ffc6cf6]. Err is namelijk een variabele van Basic... (natuurlijk ook je label varanderen)[/quote:d34ffc6cf6] Bijna goed. Err is het error object. Da's niet hetzelfde als een variabele. Het is gebruikelijk (maar niet verplicht uiteraard) in programmeerland om je error handler de naam van de betreffende funktie (of in dit geval sub) te geven met de toevoeging Err. In dit geval dus optComPortErr.
  • Beste Webspider Bedankt, het werkt. Nu ga ik nog wat code toevoegen waardoor na de keuze van een niet aanwezige COM poort de COM poort automatisch op 1 komt. Of misschien beter nog, dat je gedwongen wordt om een nieuwe keuze te maken, net zolang tot je een goede keuze hebt gemaakt. Ook Laurens bedankt voor de toevoeging. Net zoals de naam van bv een button of label. Dan begin/eindig je bv met cmd of lbl. Hopelijk lukt het mij om deze error verder netjes af te maken. En anders doe ik nog een beroep op jullie. groetjes, Yvonne
  • Is dat programma al bijna af?
  • Beste Wout Het is af, op die ON ERROR van die COMpoort na. Wij gebruiken het om data af te vangen van apperatuur. Alleen loopt het vast als je een compoort activeert die je niet hebt. Maar wij laten het altijd op dezelfde COMpoort staan. Vandaar dat wij geen haast hadden om er aan te sleutelen. Dat wil niet zeggen dat het aan de eisen voldoet die jij misschien stelt. Je kunt het testen door op een andere machine Norton te installeren. De programma's communiceren dan keurig met elkaar. Maar beste Wout. Laten wij vanmiddag nog aan jou gedacht hebben. :D Je denkt toch niet dat wij onze email/communicatie met jou zijn vergeten. Ik heb de email hier nog, waarin ik schreef dat wij volop bezig zijn met oa FX-Plus. Maar dat is al wel weer een tijdje geleden. :oops: groetjes van Yvonne en FX ps Zal ik je het programmaatje toesturen. En dan later met de verbeterde ON ERROR nogmaals ?
  • Het heeft op zich geen haast hoor :) - je kan hem wel mailen wanneer de foutafhandeling ook af is. In ieder geval alvast bedankt! WOut
  • Hoi Het gaat nu goed met ON ERROR. Maar ik wil meer, ja ja Nu wordt na een ON ERROR de compoort op COM 1 gezet. Maar het is mooier als na de foutafvang je opnieuw wordt gedwongen om een keuze te maken, dus net zolang totdat je een compoort hebt gekozen die geen foutmelding geeft. Ofwel: Wat moet ik doen om na de foutafvang weer direct de sub optComPort in te komen waardoor ik weer een keuze moet maken uit één van de compoorten met de option buttons. Want als COM 1 niet kan dan zit ik in een cirkeltje waar ik niet meer uit kom. Met onderstaande code wordt de sub optComPort aangeroepen. [code:1:8b85795610] Private Sub Option1_Click(Index As Integer) Call optComPort(Me, Index) End Sub[/code:1:8b85795610] Onderstaande code is de sub optComPort in de module. [code:1:8b85795610] Public Sub optComPort(frm As Form, Index As Integer) On Error GoTo comporterr kiezen: ' In de If Then Else constructie wordt eerst gekeken of de CommPort ' open staat, "zo ja" dan wordt deze gesloten, "zo niet" ga dan door ' naar de selec case If frm.MSComm1.PortOpen = True Then frm.MSComm1.PortOpen = False Else: End If ' In de onderstaande select case wordt bepaald welke compoort er ' geopend gaat worden. Select Case Index Case 1 PortValue = "1" frm.Label4(1).Caption = "1" Case 2 PortValue = "2" frm.Label4(1).Caption = "2" Case 3 PortValue = "3" frm.Label4(1).Caption = "3" Case 4 PortValue = "4" frm.Label4(1).Caption = "4" Case 5 PortValue = "5" frm.Label4(1).Caption = "5" Case 6 PortValue = "6" frm.Label4(1).Caption = "6" Case 7 PortValue = "7" frm.Label4(1).Caption = "7" Case 8 PortValue = "8" frm.Label4(1).Caption = "8" End Select ' Geef de keuze van de CommPort aan MSCOMM. frm.MSComm1.CommPort = PortValue ' Open de gekozen CommPort voor communicatie. frm.MSComm1.PortOpen = True Exit Sub comporterr: MsgBox ("De gekozen compoort bestaat niet op uw computer,de Compoort wordt 1.") If frm.MSComm1.PortOpen = True Then frm.MSComm1.PortOpen = False Else: End If PortValue = "1" frm.MSComm1.CommPort = PortValue frm.Label4(1).Caption = "1" frm.MSComm1.PortOpen = True End Sub[/code:1:8b85795610] groetjes, Yvonne
  • Ik volg je code niet helemaal maar ik zou zeggen, maak een herhaling warin je alle 'selected'-properties op 'false' zet; er is in dat geval dus geen enkel knopje geselecteerd.
  • Hoi Webspider Jeetje wat snel zeg. Ik ga het bekijken, tot forums. Ofwel ik laat het nog even weten dus. groetjes, Yvonne
  • Als ik het zou moeten maken dan zou ik van tevoren al controleren welke poorten openstaan, dus een sub maken die checkt welke poorten vrij zijn. Dat ziet er wat netter uit en mensen hoeven niet te gokken wat ze moeten kiezen. Na het selecteren natuurlijk ook nog checken of de poort nog steeds open is. Op je vraag van de foutafvang zou ik na de foutmelding de regel : call optComPort variabele, variabele toevoegen. Probeer ook het keyword public niet te gebruiken waar het niet nodig is. Public maakt de applicatie namelijk wat trager.
  • Hoi Ten eerste bedankt voor de [b:5be2988a76]nette[/b:5be2988a76] oplossing. Maar zo'n sub die de compoorten checkt, daar moet ik toch eerst even voor gaan zitten denk ik. Maar het progje ziet er netjes uit en werkt hier hartstikke goed. Dus het zou het wel waard zijn. Maar ja, dit soort probleempjes zijn altijd lastig, totdat je het een keer het uitgezocht en weet wat je moet doen. :wink: DarthV, alvast bedankt, ook voor de overige info. groetjes, Yvonne
  • Hoi Yvonne, Ik heb weinig verstand van communicatie via de COMM-poorten, maar je kunt je code een stuk makkelijker maken. Dat is zowel beter te lezen als een verbetering van de performance van je programma. De code wordt dan als volgt: [code:1:b79d06aab6] Public Sub optComPort(frm As Form, Index As Integer) On Error GoTo comporterr kiezen: ' In de If Then Else constructie wordt eerst gekeken of de CommPort ' open staat, "zo ja" dan wordt deze gesloten, "zo niet" ga dan door ' naar de selec case If frm.MSComm1.PortOpen = True Then frm.MSComm1.PortOpen = False Else: End If ' Select Case is vervangen door een snellere oplossing frm.Label4(1).Caption = CStr(Index) ' Geef de keuze van de CommPort aan MSCOMM. frm.MSComm1.CommPort = CStr(Index) ' Open de gekozen CommPort voor communicatie. frm.MSComm1.PortOpen = True Exit Sub comporterr: MsgBox ("De gekozen compoort bestaat niet op uw computer,de Compoort wordt 1.") If frm.MSComm1.PortOpen = True Then frm.MSComm1.PortOpen = False Else: End If frm.MSComm1.CommPort = "1" frm.Label4(1).Caption = "1" frm.MSComm1.PortOpen = True End Sub [/code:1:b79d06aab6] Wat je deed was kijken is Index bijv. 1, dan moet op het label een 1 en dan moet poort 1 geopend worden. Dit sla ik over door de Index om te zetten naar een string middels CStr. Hopelijk kun je er je voordeel mee doen en succes met het echte probleem. Groeten Ruben
  • Hoi Ruben Bedankt voor je reactie. Ik zal het in de loop van de dag (vanavond)bekijken. groetjes, Yvonne Sorry. Het gaat nog wat langer duren. :( Probleempje met FX-Plus. Maar dat komt wel weer goed. :D
  • Beste Ruben. Ik heb jouw code in mijn sub voor de keuze van de compoort geplaatst. Dus dat zegt bij deze genoeg, ofwel: dank je wel voor de [b:71ff8420f1]performance[/b:71ff8420f1] van de code. En dan nog DarthV, [b:71ff8420f1]onderstaande code zo naar je zin ?[/b:71ff8420f1] Zet onderstaande code in een form en plaats daar MSCOMM32.OCX in. [code:1:71ff8420f1]Option Explicit Private Function PortExists(Portnum As Long) As Boolean On Error GoTo errcheck ' trap the error 'set the port MSComm1.CommPort = Portnum 'try to open it MSComm1.PortOpen = True 'close it if it opened MSComm1.PortOpen = False PortExists = True Exit Function errcheck: If Err.Number = 8002 Then PortExists = False Else MsgBox "Error " & Err.Number & " " & Err.Description & "when checking for Port " & Portnum End If On Error GoTo 0 Exit Function End Function Private Sub Form_Load() Dim Loopcount As Long Dim strMsg As String For Loopcount = 1 To 16 If PortExists(Loopcount) Then strMsg = "Port " & Loopcount & " exists" MSComm1.CommPort = Loopcount If MSComm1.PortOpen Then strMsg = strMsg & " and is open" Else strMsg = strMsg & " and is closed" End If Else strMsg = "Port " & Loopcount & " does not exist" End If MsgBox strMsg Next End Sub[/code:1:71ff8420f1] Ik zeg wel, dit heb ik met hulp verkregen. Ik vond er al niets over in de MSDN. Maar dit bedenk je niet zo snel bij code voor COM poorten. Of jullie nu ineens wel ? Zo, het heeft even geduurd maar het is hier druk, druk, druk ............... Maar beter laat gereageerd, dan ....................... Groetjes, Yvonne
  • Kijk zo zie ik het graag :wink: mooie snelle code , ziet er goed uit.
  • [quote:fecf8e8d48="Yvonne"] If frm.MSComm1.PortOpen = True Then frm.MSComm1.PortOpen = False [/quote:fecf8e8d48] [url=http://support.microsoft.com/default.aspx?scid=kb;en-us;Q171472]MSComm32.ocx leak memory[/url]

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.