Quando tento fazer uma função, que acessa o banco de dados, e no final dessa funcção ela chama uma outra função que també m acessa o banco de dados, dá erro dizendo que a conexão já está aberta, ou que já existe um data reader para essa conexao. Me ajudem por favor, segue o código:
'carrega as respostas com o resultado Public Sub carrega_resultado(ByVal intCodPerg As Integer) Dim strRespostas As String Dim cmdRespostas As OleDbCommand Dim intResultPerg As Integer 'recupera o total de vezes que a pergunta foi respondida intResultPerg = resultado_pergunta(Convert.ToInt32(cbPerguntas.SelectedValue)) Try 'abre conexao objConnP.Open() 'monta o SELECT para recuperar as respostas strRespostas = "SELECT r.cod_resposta, " & _ "r.desc_resposta " & _ "FROM respostas AS r " & _ "WHERE r.cod_pergunta = " & intCodPerg cmdRespostas = New OleDbCommand(strRespostas, objConnP) 'executa o comando e preenche o datareader das respostas drRespostas = cmdRespostas.ExecuteReader Catch erro As Exception MsgBox("Erro (039): " & erro.Message, MsgBoxStyle.Critical) End Try 'criando objetos para criar o resultado Dim dtResultado As New DataTable("Resultado") Dim dtcResultado As DataColumn Dim dtrResultado As DataRow 'criando as colunas da tabela 'codigo resposta dtcResultado = New DataColumn() dtcResultado.DataType = Type.GetType("System.Int32") dtcResultado.ColumnName = "Codigo" dtcResultado.ReadOnly = True dtcResultado.Unique = True dtResultado.Columns.Add(dtcResultado) 'resposta dtcResultado = New DataColumn() dtcResultado.DataType = Type.GetType("System.String") dtcResultado.ColumnName = "Resposta" dtcResultado.ReadOnly = False dtcResultado.Unique = False dtResultado.Columns.Add(dtcResultado) 'resultado dtcResultado = New DataColumn() dtcResultado.DataType = Type.GetType("System.Int32") dtcResultado.ColumnName = "Resultado" dtcResultado.ReadOnly = False dtcResultado.Unique = False dtResultado.Columns.Add(dtcResultado) Try 'enquanto tiverem respostas While drRespostas.Read dtrResultado = dtResultado.NewRow dtrResultado("Codigo") = drRespostas.GetInt32(0) dtrResultado("Resposta") = drRespostas.GetString(1) dtrResultado("Resultado") = Convert.ToBoolean(resultado_resposta(drRespostas.GetInt32(0)) / intResultPerg) dtResultado.Rows.Add(dtrResultado) End While 'preenche o datagrid dgResultado.DataSource = dtResultado Catch erro As Exception MsgBox("Erro (040): " & erro.Message, MsgBoxStyle.Critical) Finally 'fecha conexao objConnP.Close() End Try End Sub 'retorna o numero de vezes que uma resposta foi citada Public Function resultado_resposta(ByVal intCodResp As Integer) As Integer Dim strResultado As String Dim cmdResultado As OleDbCommand Dim drResultado As OleDbDataReader Try 'abre conexao objConnP.Open() 'monta SELECT para contar os resultados das respostas strResultado = "SELECT COUNT(rp.cod_resposta_pergunta) AS totalResp " & _ "FROM resposta_pergunta AS rp " & _ "WHERE rp.cod_resposta = " & intCodResp cmdResultado = New OleDbCommand(strResultado, objConnP) 'executa o comando e preenche o datareader drresultado = cmdResultado.ExecuteReader 'se tiver dados If drResultado.Read Then 'retorna a quantidade de vezes que uma resposta foi citada Return drResultado.GetInt32(0) End If Catch erro As Exception MsgBox("Erro (042): " & erro.Message, MsgBoxStyle.Critical) Finally 'fecha conexao objConnP.Close() End Try End Function