Toon posts:

[vb6] system popup's uitschakelen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste mede tweakers...

Ik heb een programma geschreven in vb6 die records uitleest van een database op een sql server. Nu heb ik een klein probleempje, ik wil niet dat als er een error uit de sql server komt, zegmaar, dat deze verschijnt, maar dat ik deze kan afhandelen. Want standaard: On Error Goto Fout
Werkt dus niet...

Ik geloof dat er ook zo iets was als een optie waar je de system pop-up's uit kon schakelen...helpt dat? En zo ja, waar kan ik dat ergens vinden?

Thnx.

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Misschien handig: een stukje code van je programma??? :O

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 22-05 00:16

Jimbolino

troep.com

try catch ?
of heeft vb6 dat niet :)

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Verwijderd

Topicstarter
Private Sub Form_Load()

On Error Goto Fout

Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
ExTijd = Time

Exit Sub
Fout:
Dim ErrCode As String
ErrCode = Err.Number
Dim ErrDisc As String
ErrDisc = "FrmMain;Form_Load(); " & Err.Description

Call FoutAfhandeling(ErrCode, ErrDisc)

End Sub


Maar als ik dus een SQL error krijg verschijnt deze in een pop-up...dat wil ik niet..

  • miniBSD
  • Registratie: Augustus 2002
  • Laatst online: 20-12-2023
'on error resume next' doelt TS op.

Quidquid latine dictum sit, altum sonatur (Whatever is said in Latin sounds profound).


Verwijderd

Topicstarter
Ja maar, dan kan ik de foutmelding toch niet wegschrijven in een log-file ofzo? Ik wil wel weten wat het was... :O

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Erm... je moet de fouthandeling per procedure / functie schrijven. Het lijkt erop dat je verwacht dat alle fouten die optreden tijdens het uitvoeren van je applicatie worden opgevangen door de routine in Form_Load.

Tip: gebruik in het vervolg de code-tags. Maakt je stuk code een stuk leesbaarder.

[ Voor 17% gewijzigd door Lorn op 09-06-2004 16:17 ]


Verwijderd

Topicstarter
Dit heb ik nu, maar ik krijg nogsteeds SQL pop-up's... :'(

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Sub FoutAfhandeling(ErrCode As String, ErrDisc As String)
    
    If ErrCode = 524 Then
        MsgBox "Het gekozen pad is te lang om op te slaan, kies een andere locatie..", vbOKCancel + vbExclamation, "Let op!"
    
    ElseIf ErrCode = 80040100 Then
        Open App.Path & "\Log.txt" For Append As #3
        Print #3, " "
        Print #3, "   Melding opnieuw gestart..."
        Print #3, " o Actie ondernomen:"
        Print #3, "   " & ErrDisc
        Print #3, " o FoutMelding:"
        Print #3, " o Foutcode: " & ErrCode & "; Printer niet gevonden!" & " | " & CStr(Date) & " / " & CStr(Time)
        Close #3
        Unload FrmMeld
        Resume Next

end if

[ Voor 28% gewijzigd door Verwijderd op 09-06-2004 16:24 ]


Verwijderd

Topicstarter
ok sorry, ik zal de tags gebruiken...

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

In welke routine treed nu dan de fout op? Heb je in die routine wel een "On Error Goto [iets]" staan? Je kunt de errorcode en omschrijving dan doorgeven aan je FoutAfhandeling routine om het op een centrale plaats naar een logbestand te schrijven.

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Je moet uiteindelijk zoiets hebben:

Visual Basic:
1
2
3
4
5
6
7
8
9
Private Sub DoeIetsMetSQL
  On Error Goto Err_Trap
  [intelligente code]
  Exit Sub

Err_Trap:
  Call FoutAfhandeling(Err.Number, Err.Description)
  Resume Next
End Sub


Uit je routine FoutAfhandeling moet je wel even de "Resume Next" weghalen, die heeft daar helemaal niks te zoeken. Sterker nog, ik denk dat die een error zal genereren tijdens het uitvoeren van de routine.

[ Voor 3% gewijzigd door Lorn op 09-06-2004 16:23 ]


Verwijderd

Topicstarter
wat je daar beschrijft heb ik idd al...

Die: Public Sub FoutAfhandeling(ErrCode As String, ErrDisc As String)
staat in een module...die wordt dus idd door die on error goto aangeroepen. Maar de sql error's handelt ie niet af

Verwijderd

Kun je geen genbruik maken van err.source?

Verwijderd

Topicstarter
Verwijderd schreef op 09 juni 2004 @ 16:25:
Kun je geen genbruik maken van err.source?
Dat doe ik dus al...maar SQL error's hebben daar niets mee...die komen van de sql-server...

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Kun je het stuk code posten waar de fout optreed? En wat voor foutmelding krijg je?

Verwijderd

Topicstarter
Wat je dus doet is een connectie maken met de SQL server dmv een ODBC connectie:

code:
1
2
3
4
5
6
7
8
9
With Db
        Db.ConnectionString = "Provider=SQLOLEDB;Data Source=" & GegServer & ";Initial Catalog=" & GegDatabase & ";User ID=" & GegUser & ";Password=" & GegPassW
        Db.CursorLocation = adUseClient
        Db.CursorType = adOpenStatic
        Db.LockType = adLockReadOnly
        Db.CommandType = adCmdText
        Db.RecordSource = "SELECT * FROM cicmpy WHERE " & FrmMain.GeefExactIdf & " = '" & IdfNr & "'"
        Db.Refresh
    End With


Stel dat in Db.ConnectionString = ... het wachtwoord verkeerd is, dan krijg je een pop-up met de foutmelding van de SQL-server...dat wil ik dus niet.

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Waarom heb je overal "Db" voorstaan als je een "With" command gebruikt? Volgens mij is dat waar je applicatie de soep in loopt. Kan je de applicatie compileren?

Net uitgeprobeerd, het mag wel van VB maar het blijft een vreemde manier van werken. Zoals je de code nu hebt kan je het "With" statement volgens mij net zo goed niet schrijven.

[ Voor 41% gewijzigd door Lorn op 09-06-2004 16:36 . Reden: With-statement uitgeprobeerd. ]


Verwijderd

Topicstarter
Lorn schreef op 09 juni 2004 @ 16:33:
Waarom heb je overal "Db" voorstaan als je een "With" command gebruikt? Volgens mij is dat waar je applicatie de soep in loopt. Kan je de applicatie compileren?
Omdat ik een Adodc gebruik (Compoments > Microsoft ADO data control 6.0)..en als ik geen with gebruik werkt het juist niet. Ik kan dus compilen en runnen en alles werkt ja...

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Ik heb even getest maar dit stuk code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Command1_Click()
  Dim objConnect As ADODB.Connection
  Dim objRecords As ADODB.Recordset
  
  On Error GoTo Err_Trap
  Set objConnect = New ADODB.Connection
  Call objConnect.Open("Provider=SQLOLEDB;Data Source=TB_DT;Initial Catalog=RCS_Test;User ID=sa;Password=test")
  objConnect.Close
  Set objConnect = Nothing
  Exit Sub
  
Err_Trap:
  Call MsgBox("[" & Err.Source & "] Error(" & CStr(Err.Number) & ") : " & Err.Description, vbExclamation + vbOKOnly)
  If Not (objConnect Is Nothing) Then
    If objConnect.State = adStateOpen Then objConnect.Close
    Set objConnect = Nothing
  End If
End Sub


Dit resulteert toch mooi in deze foutmelding:
Afbeeldingslocatie: http://members.home.nl/lorn/Tweak/DB_Error.jpg

Ik heb gewoon een nieuw project gestart en heb alleen de reference naar "MS ActiveX Data Objects 2.7 Library" toegevoegd.

[ Voor 12% gewijzigd door Lorn op 09-06-2004 16:52 ]


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Verwijderd schreef op 09 juni 2004 @ 16:45:
[...]

Omdat ik een Adodc gebruik (Compoments > Microsoft ADO data control 6.0)..en als ik geen with gebruik werkt het juist niet. Ik kan dus compilen en runnen en alles werkt ja...
Aha, ik heb nooit gewerkt met ADO data controls 6.0. Ik was er stiekum vanuit gegaan dat je gebruik maakte van MS ActiveX Data Objects 2.x Library.

  • snoopy
  • Registratie: December 2000
  • Laatst online: 08-05 13:36
Lorn schreef op 09 juni 2004 @ 16:49:
Ik heb even getest maar dit stuk code...

Dit resulteert toch mooi in deze foutmelding:
[afbeelding]
Geen wonder...

code:
1
2
3
4
5
6
Err_Trap:
  Call MsgBox("[" & Err.Source & "] Error(" & CStr(Err.Number) & ") : " & Err.Description, vbExclamation + vbOKOnly)
  If Not (objConnect Is Nothing) Then
    If objConnect.State = adStateOpen Then objConnect.Close
    Set objConnect = Nothing
  End If


Er staat dus Call MsgBox...

[ Voor 36% gewijzigd door snoopy op 09-06-2004 16:54 ]


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

snoopy schreef op 09 juni 2004 @ 16:53:
[...]


Geen wonder...
[...]
Er staat dus Call MsgBox...
Ik doelde erop dat de SQL error werd afgevangen. Of je die dan naar een logbestand schrijft of ff snel op het scherm toont maakt niks uit. De TS gaf aan dat er geen SQL errors werden afgevangen door zijn error trap. Ik wou alleen ff laten zien dat dat dus wel kan en dat het ook niet zo heel moeilijk is.

Vervang mijn code voor de error trap door dit en je hebt wat de TS wil
Visual Basic:
1
2
3
4
Err_Trap:
  Call FoutAfhandeling(Err.Number, Err.Description)
  Resume Next
End Sub

[ Voor 44% gewijzigd door Lorn op 09-06-2004 16:59 . Reden: Toevoeging code ]


Verwijderd

Topicstarter
Ik ga het morgen metteen proberen... :*)

Verwijderd

Topicstarter
Het werkt nog steeds niet, misschien iemand anders nog met ideeen?

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Ik denk dat het ligt aan het weer... je applicatie kan niet omgaan met een hoog drukgebied. (lees: het zou wel handig zijn als je relevante code + fout zou posten).

Verwijderd

Topicstarter
Lorn schreef op 15 juli 2004 @ 15:29:
Ik denk dat het ligt aan het weer... je applicatie kan niet omgaan met een hoog drukgebied. (lees: het zou wel handig zijn als je relevante code + fout zou posten).
Lees hierboven: Ik maak gebruik van een adodc connectie...maar de foutafhandeling werkt niet.

Maar mensen, ik dank jullie voor al jullie inspanningen..ik ben er al achter.

Dag

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 15 juli 2004 @ 16:41:
[...]

Lees hierboven: Ik maak gebruik van een adodc connectie...maar de foutafhandeling werkt niet.

Maar mensen, ik dank jullie voor al jullie inspanningen..ik ben er al achter.

Dag
En de oplossing was/is?

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Het werkte ook met een adodb connectie, het ligt er alleen aan hoe je connectie maakt met de database...
</br>


code:
1
2
3
'General declerations
Dim Db As ADODB.Connection
Dim Rst As ADODB.Recordset


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
54
55
56
57
58
Public Function LeesExactId(Id As String) As String

On Error GoTo Fout
    
    Dim GegGeldig As String
    Dim GegServer As String
    Dim GegDatabase As String
    Dim GegUser As String
    Dim GegPassW As String
    Dim StrSql As String
        
    Set Db = New ADODB.Connection
    Call Db.Open("Provider=SQLOLEDB;Data Source=" & GegServer & ";Initial Catalog=" & GegDatabase & ";User ID=" & GegUser & ";Password=" & GegPassW)
    Db.CursorLocation = adUseServer
    
    Set Rst = CreateObject("ADODB.Recordset")
    Rst.CursorLocation = adUseServer
    StrSql = "SELECT * FROM cicmpy WHERE " & FrmMain.GeefExactId & " = '" & IdNr & "'"
    Rst.Open StrSql, Db, adOpenDynamic, adLockReadOnly, -1
        
    'waarde terug geven
    LeesExactId = CStr(Rst("debnr"))
    Rst.Close
    Unload Me
    

Exit Function
Fout:
    Dim ErrCode As String
    ErrCode = Err.Number
    Dim ErrDisc As String
    
    If Err.Number = 3421 Then
        LeesExactId = "0"
        Exit Function
    ElseIf Err.Number = 3021 Then
        LeesExactId = "0"
        Exit Function
    ElseIf Err.Number = 3265 Then
        'ErrDisc = "FrmLeesExact;LeesExactId3421();" & Err.Description
        Exit Function
    ElseIf Err.Number = 524 Then
        ErrDisc = "FrmLeesExact;LeesExactId524();" & Err.Description
        LeesExactId = "0"
        Call FoutAfhandeling(ErrCode, ErrDisc)
    ElseIf Err.Number = 3001 Then
        'Id-nummer niet gevonden
        LeesExactId = "0"
    Else
        ErrDisc = "FrmLeesExact;LeesExactId(); " & Err.Description
        LeesExactId = "0"
        Call FoutAfhandeling(ErrCode, ErrDisc)
    End If
    
    'LeesExactId = "0"
    'Call FoutAfhandeling(ErrCode, ErrDisc)
    
End Function


code:
1
2
3
4
5
6
7
8
9
10
11
12
Public Sub FoutAfhandeling(ErrCode As String, ErrDisc As String)

        Open App.Path & "\Log.txt" For Append As #3
        Print #3, " "
        Print #3, "   Programma opnieuw opgestart, melding vestuurd..."
        Print #3, " o Actie ondernomen:"
        Print #3, "   " & ErrDisc
        Print #3, " o FoutMelding:"
        Print #3, " o Foutcode: " & ErrCode & " | " & CStr(Date) & " / " & CStr(Time)
        Close #3

End Sub

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

code:
1
Print #3, "   Programma opnieuw opgestart, melding vestuurd..."
Je bent de 'r' vergeten in verstuurd :)
Pagina: 1