Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cacfs

Problema Com Funções

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consigo achar o "Data Access Application Block" para adicionar nas referências do meu projeto e Importar o namespace "Microsoft.DataAccess".Como faço?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.