Funzione apici

di Jan il
14 risposte
Buongiorno.Sono in difficoltà e spero quindi che mi possa venire da voi uno spunto o una soluzione al mio problema.
Ecco il codice.Esso sostanzialmente è proteso a verificare da una tabella di uffici quelli che non hanno fatto pervenire una statistica.Scadisco quindi la tabella degli uffici dal primo all'ultimo e per ciascuno cerco il documento.Se c'è ,alimento una listbox altrimento ne alimento un'altra.
Ora,se metto NON metto in funzione la Function apici (che corregge gli uffici accentati,tipo Forli',Paterno',ecc.) ottengo i risultati attesi.Se,per contro,l'attivo, mi da come risultato che NESSUN ufficio ha fatto pervenire il documento!


Sub nonp(v_anno, v_periodo)
Dim v_zona As String = "" : Dim v_contaP As Integer = 0 : Dim v_contaNP As Integer = 0
Dim strSqlZone As String = "Select comune From [ZONE] ORDER BY comune"
Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\AreaPersonale\statItalia.mdb")
Dim cmdzone As New OleDb.OleDbCommand(strSqlZone, cn)
Dim DR As OleDbDataReader
Dim DRStatistiche As OleDbDataReader
Try
If cn.State <> ConnectionState.Open Then
cn.Open()
End If
DR = cmdzone.ExecuteReader()
While (DR.Read())
v_zona = DR(0)
Dim cmdstatistiche As New OleDb.OleDbCommand("SELECT ZONA, ANNO, PERIODO FROM STATISTICHE WHERE ZONA='" & apici(v_zona) & "' and ANNO=" & v_anno & " AND PERIODO=" & v_periodo, cn)
DRStatistiche = cmdstatistiche.ExecuteReader()
If Not DRStatistiche.HasRows Then
nonpervenute.ListBoxNP.Items.Add(DR(0))
v_contaNP += 1
Else
nonpervenute.ListBoxPervenute.Items.Add(DR(0))
v_contaP += 1
End If
End While
Catch ex As Exception
MsgBox(ex.Message & Environment.NewLine & ex.StackTrace)
Finally
If cn.State = ConnectionState.Open Then
cn.Close()
End If
nonpervenute.Label3.Text = nonpervenute.Label3.Text + "(" & v_contaNP & ")"
nonpervenute.Label4.Text = nonpervenute.Label4.Text + "(" & v_contaP & ")"
End Try
End Sub

Public Function Apici(ByVal s As String) As String
Dim posizione As Integer = s.IndexOf("'")
If posizione = -1 Then
Exit Function
Else
s = Replace(s, "'", "''")
End If
End Function

14 Risposte

  • Prima di tutto usa i tag CODE per il codice ...

    Poi correggi la funzione Apici perché scritta in quel modo non ha senso.
    
        Public Function Apici(ByVal s As String) As String
            Return Replace(s, "'", "''")
        End Function
     
  • Jan ha scritto:


    ...
    Ora,se metto NON metto in funzione la Function apici (che corregge gli uffici accentati,tipo Forli',Paterno',ecc.) ottengo i risultati attesi.Se,per contro,l'attivo, mi da come risultato che NESSUN ufficio ha fatto pervenire il documento!
    qual'è il problema ? basta non usarla.
  • Ho corretto la funzione,ma il problema resta.
    Il fatto è che se non la utilizzo la procedura si blocca e mi viene segnalato l'errore.
  • Il problema adesso è un altro. Prima la funzione NON restituiva proprio nulla.

    Comunque adesso, con la funzione corretta, cosa succede? Qual è il contenuto dei vari record?

    Sicuro che è scritto Paterno' e non Paternò ?
  • Grazie mille, Oregon.
    Ti confermo di aver corretto la funzione come da te indicatomi. Il problema però è rimasto! Tutti i 200 records vengono inseriti nella lista degli Uffici che non hanno fornito riscontro, mentre -in realtà- devono 86,come del resto accade se elimino la funzione apici.

    P.S: per quanto possa sembrarti anomalo, ti segnalo che la funzione svolgeva il suo compito.Infatti, i dati venivano tutti elaborati ed il programma non si bloccava più se trovava un comune accentato.
  • Dopo la riga
    v_zona = DR(0)
    inserisci la riga
     MsgBox("SELECT ZONA, ANNO, PERIODO FROM STATISTICHE WHERE ZONA='" & apici(v_zona) & "' and ANNO=" & v_anno & " AND PERIODO=" & v_periodo)
    e controlla che il comando SQL abbia senso
  • Jan ha scritto:


    Grazie mille, Oregon.
    Ti confermo di aver corretto la funzione come da te indicatomi. Il problema però è rimasto! Tutti i 200 records vengono inseriti nella lista degli Uffici che non hanno fornito riscontro, mentre -in realtà- devono 86,come del resto accade se elimino la funzione apici.
    Possiamo vedere qualche record di un tipo e dell'altro? Te lo avevo già chiesto ma non l'hai mostrato ...

    P.S: per quanto possa sembrarti anomalo, ti segnalo che la funzione svolgeva il suo compito.Infatti, i dati venivano tutti elaborati ed il programma non si bloccava più se trovava un comune accentato.
    La funzione che avevi scritto tu? No, quella non aveva senso.
  • Grazie per il suo ennesimo intervento.
    Ho risolto spostando su questa linea di codice la funzione apici :
    
    v_zona = Apici(DR(0))
    
    .
    Vorrei nel contempo chiederLe un chiarimento.Il senso della mia funzione era il seguente :
    cerca nella stringa s un apostrofo.Se non c'è ,esci dalla funzione.Se invece c'è,rimpiazza l'apostrofo con un doppio apice.
    
    s = Replace(s, "'", "''").
    
  • Ti mancano le basi della programmazione.

    Sai in VB.NET che differenza c'è tra una "Sub" e una "Function" ??
  • Jan ha scritto:


    Grazie per il suo ennesimo intervento.
    Ho risolto spostando su questa linea di codice la funzione apici :
    
    v_zona = Apici(DR(0))
    
    .
    Vorrei nel contempo chiederLe un chiarimento.Il senso della mia funzione era il seguente :
    cerca nella stringa s un apostrofo.Se non c'è ,esci dalla funzione.Se invece c'è,rimpiazza l'apostrofo con un doppio apice.
    
    s = Replace(s, "'", "''").
    
    Come ti ha detto sirjo tu non sai come si scrive una funzione e cosa vuol dire restituire un valore. Quindi insistere non cambia le cose. Segui il consiglio... ripassa le basi
  • Vi ringrazio.
    Seguirò il vs. consiglio.
    Non c'era però bisogno di essere tanto saccenti.
  • Jan ha scritto:


    Non c'era però bisogno di essere tanto saccenti.
    Questa è una tua impressione (sbagliata). Sono sono consigli spassionati ...
  • Esatto, come dice oregon il mio voleva solo essere un consiglio su cosa iniziare a studiare.
    Una funzione, a differenza di una sub, DEVE ritornare un valore, utilizzando il "return", mentre se tu guardi la tua funzione vedrai che non ritorna nulla, ecco perchè oregon ti diceva che non ha senso.
    Strano che VB.NET non ti abbia segnalato che quella funzione non ritornava nulla, non hai visto qualche warning ??
    Comunque lungi da me voler sembrare saccente, ci mancherebbe altro, era solo uno spunto per te.
  • Sono andato a rileggere cosa vuol dire 'saccente'.

    Che ostenta in modo irritante un'erudizione o una cultura più PRESUNTA che reale

    Che non centra niente con 'sapiente'

    Detto di persona, che è ricco di sapienza

    @Jan, non siamo/facciamo i saccenti, ma siamo ABBONDANTEMENTE sapienti.
    Non stiamo dimostrando piu' conoscenza di quella che abbiamo.
    A risolvere questi problemini usiamo MOOOOOOLTA meno conoscenza di quella che possediamo

Devi accedere o registrarti per scrivere nel forum
14 risposte