cacfs 0 Denunciar post Postado Abril 5, 2005 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
Tiago Colombo 0 Denunciar post Postado Abril 6, 2005 Olá, dê uma olhada nesse post, no último item: http://www.imasters.com.br/forum/index.php?showtopic=126579 Espero que ajude, Compartilhar este post Link para o post Compartilhar em outros sites
cacfs 0 Denunciar post Postado Abril 6, 2005 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
cacfs 0 Denunciar post Postado Abril 6, 2005 Ainda ta dando alguns erros, vou tentar solucionar e posto depois.valeu Compartilhar este post Link para o post Compartilhar em outros sites