Funzione apici

di il
14 risposte

Funzione apici

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

  • Re: Funzione apici

    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
     
  • Re: Funzione apici

    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.
  • Re: Funzione apici

    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.
  • Re: Funzione apici

    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ò ?
  • Re: Funzione apici

    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.
  • Re: Funzione apici

    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
  • Re: Funzione apici

    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.
  • Re: Funzione apici

    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, "'", "''").
    
  • Re: Funzione apici

    Ti mancano le basi della programmazione.

    Sai in VB.NET che differenza c'è tra una "Sub" e una "Function" ??
  • Re: Funzione apici

    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
  • Re: Funzione apici

    Vi ringrazio.
    Seguirò il vs. consiglio.
    Non c'era però bisogno di essere tanto saccenti.
  • Re: Funzione apici

    Jan ha scritto:


    Non c'era però bisogno di essere tanto saccenti.
    Questa è una tua impressione (sbagliata). Sono sono consigli spassionati ...
  • Re: Funzione apici

    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.
  • Re: Funzione apici

    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