VB.NET Probleem SQL query uitvoeren na .showdialog()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • genesisfm
  • Registratie: Mei 2003
  • Laatst online: 00:00
Beste,

Ik heb het volgende probleem;

Dit werkt NIET:

code:
1
2
3
4
5
6
7
8
9
10
        frm_inchecken.ShowDialog() 


        sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\DB_BESTAND_PLC.accdb" 
        Dim conn As New System.Data.OleDb.OleDbConnection(sConnectionString) 
        Dim cmd As New System.Data.OleDb.OleDbCommand(sSQL, conn) 
        conn.Open() 
        cmd.CommandText = "UPDATE BESTANDEN" & " SET LOCK = 'Uitgechecked', UITGECHECKEDDOOR = '" & inlog_naam & "', UITWHEN = '" & Date.Now & "' WHERE BESTANDSNAAM = '" & lbl_file_naam.Text & "'" 
        cmd.ExecuteNonQuery() 
        conn.Close()


Dit werkt wel:

code:
1
2
3
4
5
6
7
8
9
        sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\DB_BESTAND_PLC.accdb" 
        Dim conn As New System.Data.OleDb.OleDbConnection(sConnectionString) 
        Dim cmd As New System.Data.OleDb.OleDbCommand(sSQL, conn) 
        conn.Open() 
        cmd.CommandText = "UPDATE BESTANDEN" & " SET LOCK = 'Uitgechecked', UITGECHECKEDDOOR = '" & inlog_naam & "', UITWHEN = '" & Date.Now & "' WHERE BESTANDSNAAM = '" & lbl_file_naam.Text & "'" 
        cmd.ExecuteNonQuery() 
        conn.Close() 

        frm_inchecken.ShowDialog()


Het enige verschil is... frm.inchecken.ShowDialog() ervoor of erna.

Kan iemand mijn uitleggen waarom dit een probleem geeft en hoe ik het kan oplossen?

Groet,
Robert

Acties:
  • 0 Henk 'm!

  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Doet ie 't helemaal niet? Of wordt ie pas uitgevoerd na sluiten van het dialoogvenster...
Dialoogvenster houdt namelijk alles op totdat die wordt gesloten...

Vlinders moet je volgen, niet vangen...


Acties:
  • 0 Henk 'm!

  • genesisfm
  • Registratie: Mei 2003
  • Laatst online: 00:00
Het punt is, hij sluit het dialoog venster hij voert de update uit en bij conn.close() blijf de code hangen.
De applicatie wordt dan zonder melding afgesloten.

Acties:
  • 0 Henk 'm!

  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Doe je in frm_inchecken ook nog een update naar die database en dezelfde tabel?

Vlinders moet je volgen, niet vangen...


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Definieer "werkt NIET". Foutmeldingen? Zet eens een Try...Catch-blok om je databasecode heen? Wat is de waarde van cmd.CommandText in beide gevallen vóór de ExecuteNonQuery? Welke magie gebeurt er op het frm_inchecken, benadert die variabelen die in de querystring worden gebruikt?

[ Voor 4% gewijzigd door CodeCaster op 20-04-2012 16:56 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • genesisfm
  • Registratie: Mei 2003
  • Laatst online: 00:00
@PaulZ in het form frm_inchecken doe ik geen database oproep.

@CodeCaster, je hebt gelijk:
Eerste instantie had ik er (natuurlijk) een try..Catch omheen gezet. Ik kreeg geen melding.
De applicatie sluit gewoon ZONDER melding op het moment dat ik bij de regel conn.close() ben.

De inhoud van cmd.CommandText is zowel voor de frm_inchecken als erna hetzelfde.
Het vreemde is dat ik totaal geen verschil zie in beide gevallen qua variabelen.

Btw. de query die ik hier gebruik heb ik gecopyeerd uit een andere functie waarbij de variabele global zijn.

Het lijkt mijn meer een VB2008 bug :x

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 10:17
CTRL+ALT+E en bij "common language runtime exceptions" zorgen dat "Thrown" aangevinkt staat, nog een keer proberen.

En een kleine tip: gebruik de MSDN: SqlParameter Class (System.Data.SqlClient)

[ Voor 43% gewijzigd door sig69 op 20-04-2012 17:36 ]

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
genesisfm schreef op vrijdag 20 april 2012 @ 17:30:
Het lijkt mijn meer een VB2008 bug :x
Forget it. De kans is nihil dat 't een bug in .Net is; de kans is vele malen (zo niet oneindig maal) groter dat 't een fout betreft in je code, algoritme, werkwijze, whatever. Daarmee zeg ik zéker niet dat er géén bugs in .Net zitten, maar ervaring leert dat 99.999999999% van de tijd datgene dat als "bug" opgegeven wordt terug te voeren is op PEBKAC. .Net wordt door miljoenen devvers wereldwijd gebruikt; de kans dat jij iets ontdekt dat al die anderen over het hoofd hebben gezien is zo goed als nul. Als je je in duistere hoekjes begeeft die nooit geen hond gebruikt dan heb je nog kans, maar dat is hier zeker niet aan de orde.

[ Voor 42% gewijzigd door RobIII op 20-04-2012 17:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • genesisfm
  • Registratie: Mei 2003
  • Laatst online: 00:00
sig69 schreef op vrijdag 20 april 2012 @ 17:35:
CTRL+ALT+E en bij "common language runtime exceptions" zorgen dat "Thrown" aangevinkt staat, nog een keer proberen.

En een kleine tip: gebruik de MSDN: SqlParameter Class (System.Data.SqlClient)
Thx ga ik volgende week eens proberen :)

Acties:
  • 0 Henk 'm!

  • genesisfm
  • Registratie: Mei 2003
  • Laatst online: 00:00
Zo even een update:

@sig69 CTRL + ALT + E bij "common language runtime exceptions" Thrown aangevinkt.
Applicatie hangt en ik krijg geen melding.

@iedereen
Ik heb ben de software aan het strippen geweest en ik denk dat ik weet waarop de software vast loopt.

Wat gebeurt er:

1. ik start de applicatie en dmv een button doe ik het volgende
code:
1
frm_inchecken.ShowDialog()


2. Nu krijg ik een form met een knop OK of Cancel
Waar het nu op fout gaat is het volgende.
De bedoeling is dat ik een file selecteer (waarvan ik de naam wil hebben) die ik open in dat dialoogvenster.
Dit doe ik met de volgende script:
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
 Private Sub btn_laad_bestand_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_laad_bestand.Click
        Dim MyFileOpen As New System.Windows.Forms.OpenFileDialog
        Dim bExOccured As Boolean
        Dim retVal As DialogResult

        Try
            ' does not add an extension to a file name if the user omits the extension
            MyFileOpen.AddExtension = True

            'dialog box does not allow multiple files to be selected
            MyFileOpen.Multiselect = False

            MyFileOpen.Filter = "All files (*.*)|*.*"

            retVal = MyFileOpen.ShowDialog()
            If retVal = Windows.Forms.DialogResult.OK Then

                If MyFileOpen.CheckFileExists = True And MyFileOpen.CheckPathExists = True Then

                    lbl_bestandsnaam.Text = MyFileOpen.FileName
                End If
            End If
        Catch ex1 As AccessViolationException
            MsgBox(ex1.StackTrace.ToString)
            bExOccured = True
        Catch ex As Exception
            MsgBox(ex.StackTrace.ToString)
            bExOccured = True

        Finally
            If bExOccured = True Then
                MsgBox("Program executed with some errors!!!")
            End If
        End Try


    End Sub


Zodra ik de bovenstaande code uitvoer dan loopt de applicatie vast zonder melding.

Druk ik op de button cancel of ik skip dat stukje code dan werkt het oké.

Wat gebeurt er als ik het dialoog venster sluit?
code:
1
2
            Me.DialogResult = System.Windows.Forms.DialogResult.OK
            Me.Close()

Dan roep ik het bovenstaande stukje script op.

Voor alle duidelijkheid voeg ik hier even de complete code toe:
Button voor het oproepen van het dialoogvenster:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub btn_inchecken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_inchecken.Click


        frm_inchecken.ShowDialog()


        sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\DB_BESTAND_PLC.accdb"
        Dim conn As New System.Data.OleDb.OleDbConnection(sConnectionString)
        Dim cmd As New System.Data.OleDb.OleDbCommand(sSQL, conn)
        conn.Open()
        cmd.CommandText = "UPDATE BESTANDEN" & " SET LOCK = 'Uitgechecked', UITGECHECKEDDOOR = '" & inlog_naam & "', UITWHEN = '" & Date.Now & "' WHERE BESTANDSNAAM = '" & lbl_file_naam.Text & "'"
        cmd.ExecuteNonQuery()
        conn.Close() '<- HIER LOOPT DE CODE OP VAST


        If incheck_ok = True Then

        Else

        End If
    End Sub


Hierbij de code van de dialoogvenster welke ik oproep:

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Public Class frm_inchecken


    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
        '   If txt_info.Text = "" Or lbl_bestandsnaam.Text = "Bestandsnaam" Then
        ' MsgBox("AUB een bestand selecteren en informatie over de wijziging toevoegen!")
        'Inchecken NOK
        'incheck_ok = False
        '   Else
        Try
            bestandsnaam = lbl_bestandsnaam.Text
            Commentaar_incheck = txt_info.Text

            'file naam eruit filteren
            Dim file_naam As String = bestandsnaam.Substring(bestandsnaam.LastIndexOf("\") + 1)
            'Inchecken OK
            incheck_ok = True

            Me.DialogResult = System.Windows.Forms.DialogResult.OK
            Me.Close()
        Catch ex As Exception
            MsgBox("Melding : " & vbCrLf & ex.Message)
            'Inchecken NOK
            incheck_ok = False
        End Try
        'End If
    End Sub

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
        'Inchecken NOK
        incheck_ok = False
        MsgBox("Let op er worden geen wijzigingen gemaakt!")
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        Me.Close()
    End Sub

' HET AANROEPEN VAN DE VOLGENDE STUKJE CODE ZORGT ERVOOR DAT DE APPLICATIE VASTLOOPT ALS IK HET DIALOOGVENSTER VERLAAT:


    Private Sub btn_laad_bestand_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_laad_bestand.Click
        Dim MyFileOpen As New System.Windows.Forms.OpenFileDialog
        Dim bExOccured As Boolean
        Dim retVal As DialogResult

        Try
            ' does not add an extension to a file name if the user omits the extension
            MyFileOpen.AddExtension = True

            'dialog box does not allow multiple files to be selected
            MyFileOpen.Multiselect = False

            MyFileOpen.Filter = "All files (*.*)|*.*"

            retVal = MyFileOpen.ShowDialog()
            If retVal = Windows.Forms.DialogResult.OK Then

                If MyFileOpen.CheckFileExists = True And MyFileOpen.CheckPathExists = True Then

                    lbl_bestandsnaam.Text = MyFileOpen.FileName
                End If
            End If
        Catch ex1 As AccessViolationException
            MsgBox(ex1.StackTrace.ToString)
            bExOccured = True
        Catch ex As Exception
            MsgBox(ex.StackTrace.ToString)
            bExOccured = True

        Finally
            If bExOccured = True Then
                MsgBox("Program executed with some errors!!!")
            End If
        End Try


    End Sub
End Class


Heeft iemand een idee? Persoonlijk betwijfel ik het of VB het leuk vind dat ik 2x een dialoogvenster open.

Acties:
  • 0 Henk 'm!

  • genesisfm
  • Registratie: Mei 2003
  • Laatst online: 00:00
Iemand?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Geen zin om dit voor je te gaan debuggen, maar wat dacht je ervan om die connectie gewoon netjes in een Using-blok te gebruiken, zoals het hoort (zie example)? ;) En "= True" lijkt me niet een nuttige test (zelf niet zonder de "= True" trouwens in dit geval). :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1