Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    14

    [VB6] Applicazione: stallo casuale

    Ho realizzato un applicazione VB6 che legge dei dati presenti su
    connessione TCI/IP e li memorizza in un database sql server.
    Sempre dal database "estrae" dei dati e li invia come risposta.
    Ora la problematica è che l'applicativo deve restare in piedi per
    diversi giorni continuamente ed accade che, dopo qualche ora (a volte
    dopo 12 ore,a volte dopo 20 ore, altre dopo pochi minuti ecc..) l'applicativo si blocca o meglio
    sembra entrare in stallo, nel senso che anche se clicco su qualche
    pulsante non sembra reagire (come se fosse freezzato).
    Il tutto senza ritornare apparentemente alcun errore e tra l'altro, andando a vedere in task manager, lo stato dell'applicativo questo è running.
    Nell'event viewer comunque alcune volte vengono riportati i seguenti errori:

    Faulting application UCP_gateway.exe, version 1.0.0.0, faulting module unknown, version 0.0.0.0, fault address 0x0051001e.

    The application UCP_gateway.exe, generated an application error The error occurred on 04/11/2006 @ 09:30:35.484 The exception generated was c0000005 at address 0051001F (<nosymbols>)

    Ho realizzato il tutto su una macchina w2000, mentre l'applicativo gira su una macchina w2003

    Cosa può essere? Scusate ma sono un neofita di VB6


    Grazie mille dell'aiuto che mi vorrete dare.


    P.S: aggiungo che la connessione al database la faccio con
    ADODB.Connection in una variabile globale, così come globale è il
    recordset. Non se sarebbe più giusto aprirla e chiuderla di volta in
    volta.
    Per verificare se l'applicativo è in piedi, ho realizzato una routine
    che ogni minuto scrive all'interno del database la data e l'ora, valori
    che posso leggere con una pagina .asp creata giusto per controllare lo
    stato dell'applicativo. ovviamente quando l'applicativo si "blocca" la data non viene più aggiornata.
    Non so se così facendo ho appesentito o meno il tutto.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Difficile a dirsi ...

    L'unica cosa che vedo e' quell'errore c0000005 che indica l'accesso ad un indirizzo di memoria che non appartiene al processo.

    Questo tipo di problemi non e' direttamente causato da codice VB.
    In genere e' generato da un puntatore che ha un valore non corretto e quindi da codice di qualche controllo (che non e' aggiornato) o di qualche chiamata ad API non corretta.

    Piu' di questo non posso dirti ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    14
    grazie oregon.
    Purtroppo non riesco neanche io a capire come poterlo risolvere.
    allego il codice vb6 sperando che qualcuno abbia una illuminazione ho abbia già risolto un problema del genere.

    Vi prego help me!!!



    Option Explicit
    Dim CONN As ADODB.Connection


    ' Connect to SMSC
    Private Sub cmdConnect_Click()
    Dim Result As Long
    Dim Result1 As Long
    txtLog = ""
    AddConnectingEvent txtLog
    txtLog.Refresh

    Result = SMSCRelayUCP1.Connect(txtHost, txtPort)
    Result1 = SMSCRelayUCP2.Connect(txtHost, txtPort)

    If Result <> 0 Then
    AddConnectionErrorEvent txtLog, Result + "48235"
    Else
    AddConnectedEvent txtLog
    End If

    If Result1 <> 0 Then
    AddConnectionErrorEvent txtLog, Result1 + "98235"
    Else
    AddConnectedEvent txtLog
    End If
    End Sub

    ' Disonnect from SMSC
    Private Sub cmdDisconnect_Click()
    SMSCRelayUCP1.Disconnect
    SMSCRelayUCP2.Disconnect


    End Sub

    ' Initialize session with SMSC
    Private Sub cmdInitialize_Click()
    Dim Result As Long
    Dim Result1 As Long

    Result = SMSCRelayUCP1.InitializeSession("48235", "6", "5", "wqwqwqw", chkUseAuthentication.Value = vbChecked)
    Result1 = SMSCRelayUCP2.InitializeSession("98235", "6", "5", "qwqwqwqw", chkUseAuthentication.Value = vbChecked)
    If Result <> 0 Then
    AddInitializationErrorEvent txtLog, Result + " 48235"
    Else
    AddInitializedEvent txtLog
    Connetti
    End If
    If Result1 <> 0 Then
    AddInitializationErrorEvent txtLog, Result1 + " 98235"
    Else
    AddInitializedEvent txtLog
    End If
    End Sub

    ' Submit message to the SMSC
    Private Sub cmdSubmit_Click()
    Dim Result As Long
    Dim TimeStamp As Date
    Dim Encoding As EncodingType
    Dim Options As Long


    Select Case cbEncoding.ListIndex
    Case 2
    Encoding = etUCS2Text
    Case 1
    Encoding = et8bitHexadecimal
    Case Else
    Encoding = et7bitText
    End Select

    If Encoding = etUCS2Text Then
    If MsgBox("Because of the nature of the VB controls, which do not " & _
    "support UNICODE the message will only be sent correctly if the " & _
    "characters entered in the Message box match the default code page. " & _
    vbCrLf & vbCrLf & "Do you want to continue?", vbQuestion + vbYesNo) <> vbYes Then
    Exit Sub
    End If
    End If

    Options = 0
    If chkStatusReport.Value = vbChecked Then Options = Options Or soRequestStatusReport
    If chkDirectDisplay.Value = vbChecked Then Options = Options Or soDirectDisplay



    Result = SMSCRelayUCP2.SubmitMessageEx(txtDestination, txtOriginator, txtSubmit, Encoding, txtUDH, Options, "0C0D5072656D69756D3A3938323335", TimeStamp)

    If Result <> 0 Then
    AddMessageSubmissionErrorEvent txtLog, Result
    Else
    AddMessageSubmitedEvent txtLog, , TimeStamp
    End If

    'inserisci_sms txtSubmit, txtOriginator
    End Sub

    ' Display about box
    Private Sub cmdAbout_Click()
    fmAbout.Show vbModal
    End Sub

    Private Sub Form_Load()
    Set CONN = New ADODB.Connection
    cbEncoding.ListIndex = 0

    End Sub

    'Private Sub SMSCRelayUCP1_Disconnected(ByVal Reason As Long)

    'End Sub

    ' Disconnected from SMSC
    Private Sub SMSCRelayUCP1_Disconnected(ByVal Reason As Long)
    AddDisconnectedEvent txtLog, "48235 " + Reason
    CONN.Close
    AddEvent txtLog, "DB chiuso"
    End Sub

    ' Message received from SMSC
    Private Sub SMSCRelayUCP1_MessageReceived(ByVal Destination As String, ByVal Originator As String, ByVal SMText As String, ByVal Encoding As EncodingType, ByVal UserDataHeader As String, ByVal TimeStamp As Date)
    AddMessageReceivedEvent txtLog, Destination, Originator, SMText, Encoding, UserDataHeader, TimeStamp

    Dim Options As Long
    Dim Result2 As Long
    Dim txtris As String
    Dim cont As Integer
    Dim udh As String



    Options = 0
    If chkStatusReport.Value = vbChecked Then Options = Options Or soRequestStatusReport
    If chkDirectDisplay.Value = vbChecked Then Options = Options Or soDirectDisplay

    inserisci_sms SMText, Originator, cont, txtris

    udh = ""

    If cont < 3 Then
    Result2 = SMSCRelayUCP1.SubmitMessageEx(Originator, Destination, txtris, Encoding, udh, Options, "0C0F5072656D69756D3A39383233354E55", TimeStamp)
    ElseIf cont = 3 Then
    Result2 = SMSCRelayUCP2.SubmitMessageEx(Originator, Destination, txtris, Encoding, udh, Options, "0C0D5072656D69756D3A3938323335", TimeStamp)
    End If


    If Result2 <> 0 Then
    AddMessageSubmissionErrorEvent txtLog, Result2
    Else
    AddMessageSubmitedEvent txtLog, , TimeStamp
    End If

    End Sub

    ' Status Report (SR) received from SMSC
    Private Sub SMSCRelayUCP1_StatusReportReceived(ByVal MessageTimeStamp As Date, ByVal Destination As String, ByVal Originator As String, ByVal SMStatus As Byte, ByVal FailureReason As Long, ByVal TimeStamp As Date)
    AddStatusReportReceivedEvent txtLog, Destination, SMStatus, FailureReason, Originator, , MessageTimeStamp, TimeStamp
    End Sub

    'Private Sub SMSCRelayUCP2_Disconnected(ByVal Reason As Long)

    'End Sub

    Private Sub SMSCRelayUCP2_Disconnected(ByVal Reason As Long)
    AddDisconnectedEvent txtLog, "98235 " + Reason
    End Sub




    Private Sub Connetti()
    'On Error Resume Next
    On Error GoTo errore

    '**********************************************
    'CONNESSIONE CON IL DATABASE
    '**********************************************



    Dim strSQLServerName As String
    Dim strSQLDBUserName As String
    Dim strSQLDBPassword As String
    Dim strSQLDBName As String
    Dim strsql As String
    Dim Result2 As Long
    Dim query As String
    Dim cont As Integer



    strSQLServerName = "localhost"

    strSQLDBUserName = "tizio"

    strSQLDBPassword = "caioa"
    strSQLDBName = "sempronio"
    strsql = "Provider=SQLOLEDB;Server=" & strSQLServerName & ";User ID=" & strSQLDBUserName & ";Password=" & strSQLDBPassword & ";Database=" & strSQLDBName & ";"
    CONN.Open strsql

    AddEvent txtLog, "Connesso al db"


    errore:
    If Err.Number <> 0 Then
    AddEvent txtLog, "Errore in connessione al db"
    End If


    End Sub


    Private Sub inserisci_sms(txt As String, mittente As String, numero_risposte As Integer, txtrisposta As String)
    On Error GoTo errore

    Dim RCDS As ADODB.Recordset
    Dim query As String
    Dim conta As Integer
    Dim risposta As String
    Dim strrisp As String
    Dim id_risposta As Long
    Dim cnt As Integer
    Dim f As Double
    Dim cont As Integer

    If CONN.State = adStateClosed Then
    Connetti
    End If

    If CONN.State <> adStateClosed Then


    'controllo il numero di messaggi inviati dall'utente
    query = "SELECT count(id_sms) as conta FROM tbl_sms WHERE numero='" + mittente + "'"
    Set RCDS = CONN.Execute(query)
    conta = RCDS("conta")

    If (conta = 3) Then
    ' seleziono il quarto messaggio da inviare all'utente
    query = "SELECT id_risposta, testo FROM tbl_risposte WHERE quarto=1"
    Set RCDS = CONN.Execute(query)
    risposta = RCDS("testo")

    ElseIf (conta < 3) Then
    ' seleziono un messaggio randomico da inviare all'utente
    query = "SELECT id_risposta FROM tbl_sms WHERE numero='" + mittente + "'"
    Set RCDS = CONN.Execute(query)
    strrisp = ""
    Do While Not RCDS.EOF
    id_risposta = RCDS("id_risposta")
    strrisp = strrisp & " AND id_risposta <> " & id_risposta
    RCDS.MoveNext
    Loop
    ' seleziono il numero di risposte valide non quarte
    query = "SELECT count(id_risposta) as cnt FROM tbl_risposte WHERE quarto=0 and attivo=1" + strrisp
    Set RCDS = CONN.Execute(query)
    cnt = RCDS("cnt")
    Randomize
    f = Int(Rnd() * cnt) + 1
    If f > cnt Then
    f = cnt
    End If

    query = "SELECT id_risposta,testo FROM tbl_risposte WHERE quarto=0 and attivo=1" + strrisp
    Set RCDS = CONN.Execute(query)
    cont = 1
    Do While Not RCDS.EOF

    If cont = f Then
    risposta = RCDS("testo")
    id_risposta = RCDS("id_risposta")
    End If
    RCDS.MoveNext
    cont = cont + 1
    Loop

    End If
    '************* FACCIO IL PARSING DELLA MESSAGGIO *******************
    Dim pos, pos2, provincia As Integer
    Dim prov, nome As String

    pos = InStrRev(txt, " ")
    prov = Mid(txt, pos + 1, 2)
    'seleziono id provincia
    query = "SELECT id_provincia FROM tbl_province WHERE sigla='" + prov + "'"
    Set RCDS = CONN.Execute(query)
    If Not RCDS.EOF Then
    provincia = RCDS("id_provincia")
    Else
    provincia = 104
    End If

    nome = ""
    If provincia <> 104 Then
    nome = Mid(txt, 1, pos - 1)
    pos2 = InStrRev(nome, " ")
    nome = Mid(nome, pos2 + 1, pos - pos2)
    End If


    '************ inserisco sms nel database ***********
    Dim o As String
    Dim scritta As String

    o = Time
    query = "INSERT INTO tbl_sms (id_operatore,id_risposta,id_provincia,numero,test o,data,ora,nome) values (4," & id_risposta & "," & provincia & ",'" & mittente & "','" & txt & "','" & Date & "','" + o + " ' ,'" & nome & "' )"
    CONN.Execute (query)

    scritta = risposta & " - " & id_risposta & "-" & Date & "-" & Time
    AddEvent txtLog, scritta

    numero_risposte = conta
    txtrisposta = risposta

    End If

    errore:
    If Err.Number <> 0 Then
    AddEvent txtLog, "errore in fase di inserimento sms"
    End If

    End Sub



    Private Sub gest_errore(errore_txt As String)
    Dim query As String

    query = "Update tbl_controllo SET tempo='" & Now & "', errore='" & errore_txt & "' where id_controllo=1"

    If CONN.State = adStateClosed Then
    Connetti
    End If

    If CONN.State <> adStateClosed Then
    CONN.Execute (query)
    Else
    AddEvent txtLog, "Non posso aggiornare la query, connessione db chiusa"
    End If


    End Sub






    Private Sub Timer1_Timer()
    gest_errore "0"
    End Sub

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    14
    scusate ma copiando ed incllando la formattazione non so perchè si è persa

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se posti del codice devi usare i tag appositi (bottoncino CODE sopra la maschera di edit del forum ...).

    Comunque, il codice VB c'entra poco ...

    Come ti ho detto il problema e' di accesso non consentito ad un indirizzo di memoria ed e' un errore di piu' basso livello.

    Io sospetto che sia il componente che usi per gli oggetti

    SMSCRelayUCP1
    SMSCRelayUCP2

    ... magari in una delle chiamate ad un metodo di quegli oggetti, passi dei parametri non corretti ... o e' proprio il codice del componente ad avere problemi ...

    Dovresti cercare di capire quale riga causa quell'errore inserendo delle scritture su un file di log subito prima di ogni chiamata. In questo modo capisci dove si ferma.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    14
    grazie oregon e scusa per i tag (non uso spesso il forum).

    Dove posso trovare degli esempi su come scrivere su dei file di log?

    Grazie mille e scusami il disturbo.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' una normale scrittura su file di testo ...

    All'inizio del programma (nella Form_Load) apri il file, per esempio

    codice:
    Open "C:\FileLog.txt" For Output As #1
    e prima di ogni riga inserisci una istruzione di scrittura, ad esempio

    codice:
    Print #1, "SMSCRelayUCP1.Connect ... ";
    Result = SMSCRelayUCP1.Connect(txtHost, txtPort)
    Print #1, "OK.";
    
    Print #1, "SMSCRelayUCP2.Connect ... ";
    Result1 = SMSCRelayUCP2.Connect(txtHost, txtPort)
    Print #1, "OK.";
    Nella Form_Unload metti una

    codice:
    Close #1
    ed esegui il programma. Quando si ferma, esamina il file creato ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    14
    grazie mille oregon.
    testerò il tutto sperando che si blocchi velocemente senza farmi attendere ore.


  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se vuoi, inserisci anche una indicazione del tempo nel log, in questo modo

    codice:
    Print #1, Now() & " : SMSCRelayUCP1.Connect ... ";
    ... naturalmente in ogni riga posta prima di una chiamata.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    14
    ok thanks

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.