Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561

    [vb 2005] errore in una classe

    ho la seguente classe:

    Imports System.Data.OleDb
    Public Class ClsDati
    Public Enum ReturnType

    DataSetType
    DataReaderType

    End Enum
    Private m_StrConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\Dati\dbDati.mdb;"
    Public Function ExecuteQuery(ByVal Tipo As ReturnType, ByVal StringaSQL As String) As Object

    Dim vConn As New OleDbConnection(m_StrConn)
    Dim vComm As New OleDbCommand()
    Try

    vConn.Open()

    With vComm

    .CommandText = StringaSQL
    .Connection = vConn

    End With
    Select Case Tipo

    Case ReturnType.DataReaderType

    Dim dr As OleDbDataReader = vComm.ExecuteReader
    Return dr

    Case ReturnType.DataSetType

    Dim adpt As New OleDbDataAdapter()
    Dim ds As New DataSet()
    adpt.SelectCommand = vComm
    adpt.Fill(ds)
    Return ds
    adpt = Nothing
    adpt.Dispose()

    End Select

    Catch ex As Exception

    MessageBox.Show(ex.ToString, "Errore di accesso ai dati")

    Finally

    vComm.Dispose()
    vConn.Close()
    vConn.Dispose()

    End Try

    End Function

    Public Sub ExecuteNonQuery(ByVal StringaSQL As String)

    Dim vConn As New OleDbConnection(m_StrConn)
    Dim vComm As New OleDbCommand()

    Try

    vConn.Open()

    With vComm

    .CommandText = StringaSQL
    .Connection = vConn
    .ExecuteNonQuery()

    End With
    Catch ex As Exception

    MessageBox.Show(ex.ToString, "Errore di accesso ai dati")

    Finally

    vComm.Dispose()
    vConn.Close()
    vConn.Dispose()

    End Try

    End Sub

    Public Function ExecuteScalar(ByVal StringaSQL As String) As Object

    Dim vConn As New OleDbConnection(m_StrConn)
    Dim vComm As New OleDbCommand()

    Try

    vConn.Open()
    With vComm

    .CommandText = StringaSQL
    .Connection = vConn
    ExecuteScalar = .ExecuteScalar

    End With
    Catch ex As Exception

    MessageBox.Show(ex.ToString, "Errore di accesso ai dati")

    Finally

    vComm.Dispose()
    vConn.Close()
    vConn.Dispose()

    End Try

    End Function
    End Class



    in fase di compilazione ottengo un'errore sulle funzioni ExecuteQuery e ExecuteScalar di nessun valore restituito in tutte le parti del codice.

    come risolvo il problema?


    tulipan

  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Per prima cosa ti consiglio di usare i tags CODE /CODE (li ottieni con il bottone # quando scivi il post).

    Poi attento alle Imports. Il DataSet richiede la System.Data

    Fai attenzione ai valori di ritorno. il messaggio di errore indica che nella funzione non hai un valore di ritorno per alcuna/nessuna delle uscite previste nel codice.

    Senza entrare nel merito di cosa fai con il codice questa 'stesura' almeno 'compila' :

    codice:
    Imports System.Data
    Imports System.Data.OleDb
    
    Public Class ClsDati
    Public Enum ReturnType
    	DataSetType
    	DataReaderType
    End Enum
    Private m_StrConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\Dati\dbDati.mdb;"
    
    Public Function ExecuteQuery(ByVal Tipo As ReturnType, ByVal StringaSQL As String) As Object
    
    	Dim vConn As New OleDbConnection(m_StrConn)
    	Dim vComm As New OleDbCommand()
    	Din retObj as Object = Nothing
    	Try
    		vConn.Open()
    
    		With vComm
    			.CommandText = StringaSQL
    			.Connection = vConn
    		End With
    		
    		Select Case Tipo
    
    			Case ReturnType.DataReaderType
    				Dim dr As OleDbDataReader = vComm.ExecuteReader
    				retObj = dr
    			Case ReturnType.DataSetType
    				Dim adpt As New OleDbDataAdapter()
    				Dim ds As New  DataSet()
    				adpt.SelectCommand = vComm
    				adpt.Fill(ds)
    				adpt = Nothing
    				adpt.Dispose()
    				retObj =  ds
    		End Select
    
    	Catch ex As Exception
    
    		MessageBox.Show(ex.ToString, "Errore di accesso ai dati")
    		
    	Finally
    
    		vComm.Dispose()
    		vConn.Close()
    		vConn.Dispose()
    End Try
    
    Return retObj 
    
    End Function
    
    
    Public Sub ExecuteNonQuery(ByVal StringaSQL As String)
    
    	Dim vConn As New OleDbConnection(m_StrConn)
    	Dim vComm As New OleDbCommand()
    
    	Try
    
    		vConn.Open()
    
    		With vComm
    
    			.CommandText = StringaSQL
    			.Connection = vConn
    			.ExecuteNonQuery()
    
    		End With
    	
    	Catch ex As Exception
    		MessageBox.Show(ex.ToString, "Errore di accesso ai dati")
    	Finally
    
    		vComm.Dispose()
    		vConn.Close()
    		vConn.Dispose()
    
    	End Try
    
    End Sub
    
    Public function  ExecuteScalar(ByVal StringaSQL As String) As Object
    
    	Dim vConn As New OleDbConnection(m_StrConn)
    	Dim vComm As New OleDbCommand()
    	Dim retObj as object = Nothing 
    	Try
    
    		vConn.Open()
    		With vComm
    
    			.CommandText = StringaSQL
    			.Connection = vConn
    		    retObj = .ExecuteScalar
    		    
    		End With
    		
    	Catch ex As Exception
    
    		MessageBox.Show(ex.ToString, "Errore di accesso ai dati")
    
    	Finally
    		vComm.Dispose()
    		vConn.Close()
    		vConn.Dispose()
    	End Try
    	Return retObj
    	
    End Function
    
    End Class
    Ciao, Brainjar

  3. #3
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    C'è una Din al posto di una Dim.
    Correggi e compila.
    Ciao, Brainjar

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Credo che semplicemente l'errore venga segnalato in quanto non tutti i "rami" di esecuzione del codice restituiscono un valore di ritorno nella funzione che hai creato, e ciò viene - fortunatamente - segnalato, in modo che il programmatore vi ponga rimedio.

    La logica dietro le funzioni che hai creato è un po' strana, con un valore di ritorno di tipo Object estremamente generico, per non dire il più generico possibile: ti constringe a scrivere all'esterno un sacco di condizioni di verifica del tipo di oggetto restituito.

    Valuta bene l'impatto e l'utilità delle classi che crei, per accertarti che quanto scrivi per costruirti una utilità non diventi alla fine una complessità in più nel codice.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Fai attenzione ai valori di ritorno. il messaggio di errore indica che nella funzione non hai un valore di ritorno per alcuna/nessuna delle uscite previste nel codice.

    Credo che semplicemente l'errore venga segnalato in quanto non tutti i "rami" di esecuzione del codice restituiscono un valore di ritorno nella funzione che hai creato, e ciò viene - fortunatamente - segnalato, in modo che il programmatore vi ponga rimedio.
    Ciao, Brainjar

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da Brainjar
    Mi sembra di aver fatto anche altre precisazioni... non capisco il motivo della critica, onestamente.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.