Ir para o conteúdo
Chamuanza

Consulta sem resultados

Mensagens Recomendadas

Chamuanza

Boas tardes pessoal

Depois de algum tempo eis-me aqui com umpedido de ajuda

Numa aplicação minha particular sobre despesas familiares tenho uma consulta (de Valor) que funciona bem, no entanto ao proceder a outra consulta ( por Categoria/SubCat/Familiar) dentro do mesmo Form que tambem funciona, quando retorno a consulta (de Valor) já não consigo que funcione. Tenho que fechar a aplicação e reabrir

consultadespesas.gif

Private Sub ValorDespesaToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ValorDespesaToolStripButton.Click


        Try
            Me.Table1TableAdapter.ValorDespesa(Me.ReceitaDespesaDataSet.Table1, CType(Param2ToolStripTextBox.Text, Decimal))


        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)

        End Try

        ''Coloca o nº de registos na label
        'Label2.Text = "Este Filtro Encontrou - " & Me.Table1DataGridView.RowCount & " Registos"

        Call SomarDespesa()

       
    End Sub

 Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click



      
        'Faz a exibição de todos os registos
        Me.Table1TableAdapter.FillBy(Me.ReceitaDespesaDataSet.Table1)
        Me.Param2ToolStripTextBox.Text = ""


      
        'End If

        Call SomarDespesa()

    End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        'SELECT sobre Despesas

        ' Declaração de variáveis privadas
        Dim da As SqlDataAdapter
        Dim ds As DataSet

        If DateTimePicker1.Value > DateTimePicker2.Value Then
            MsgBox("A Data Inicial não pode ser Superior a Data Final", MsgBoxStyle.Information, "Data Inicial Maior que Data Final")
            DateTimePicker1.Focus()
            Exit Sub
        End If


        Dim DataInicio As New DateTime(DateTimePicker1.Value.Year, DateTimePicker1.Value.Month, DateTimePicker1.Value.Day, 0, 0, 0)
        Dim DataFim As New DateTime(DateTimePicker2.Value.Year, DateTimePicker2.Value.Month, DateTimePicker2.Value.Day, 23, 59, 59)

        ' Texto de ligação à base de dados
        Dim myConnectionString As String = _
        "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Utilizador\" & _
        "My Documents\ReceitaDespesa.mdf;" & _
        "Integrated Security=True;Connect Timeout=30;User Instance=True"


        ' Cria uma nova ligação à base de dados
        Dim connection As New SqlConnection(myConnectionString)


        Dim SQL As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Data BETWEEN '" & DataInicio & "' AND '" & DataFim & "' AND Categoria Like '" & TextBox1.Text.ToString & "%' AND SubCategoria Like '" & TextBox2.Text.ToString & "%' AND Familiar Like '" & TextBox3.Text.ToString & "%'"


        da = New SqlDataAdapter(SQL, connection)

        ' Cria um novo DataSet, ou seja, uma representação em memória da informação
        ds = New DataSet

        ' Coloca a informação da tabela definida no DataSet
        da.Fill(ds, "Table1")

        ' Define que a fonte de dados da DataGridView é a nossa DataSet
        ' criando automáticamente as colunas e linhas de dados
        Me.Table1DataGridView.DataSource = ds.Tables("Table1")

        ' Limpa a ligação à base de dados. Não é necessário fechar a ligação
        ' porque esta não foi aberta através do comando .Open()
        connection = Nothing


        Call SomarDespesa()

        BindingNavigatorPositionItem.Text = Me.Table1DataGridView.CurrentRow.Index + 1

        BindingNavigatorCountItem.Text = " de " & Me.Table1DataGridView.RowCount & "  Registos Encontrados"

        Me.Table1DataGridView.Focus()
      

        'Label3.Text = "Este Filtro encontrou - " & Me.DataGridView1.RowCount & " Registos"

    End Sub

Private Sub ExibirTodos()

        'Exibir todos os registos depois de umaconsulta

        ' Declaração de variáveis privadas
        Dim da As SqlDataAdapter
        Dim ds As DataSet

        ' Texto de ligação à base de dados
        Dim myConnectionString As String = _
        "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Utilizador\" & _
        "My Documents\ReceitaDespesa.mdf;" & _
        "Integrated Security=True;Connect Timeout=30;User Instance=True"

        ' Cria uma nova ligação à base de dados
        Dim connection As New SqlConnection(myConnectionString)


        Dim SQL As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Despesa > 0 "


        da = New SqlDataAdapter(SQL, connection)

        ' Cria um novo DataSet, ou seja, uma representação em memória da informação
        ds = New DataSet

        ' Coloca a informação da tabela definida no DataSet
        da.Fill(ds, "Table1")

        ' Define que a fonte de dados da DataGridView é a nossa DataSet
        ' criando automáticamente as colunas e linhas de dados
        Me.Table1DataGridView.DataSource = ds.Tables("Table1")

        ' Limpa a ligação à base de dados. Não é necessário fechar a ligação
        ' porque esta não foi aberta através do comando .Open()
        connection = Nothing

        'Limpa as cx. texto
        Me.TextBox1.Text = ""
        Me.TextBox2.Text = ""
        Me.TextBox3.Text = ""

        BindingNavigatorCountItem.Text = " de " & Me.Table1DataGridView.RowCount & "  Registos Encontrados"

        Call SomarDespesa()



    End Sub

Agradeço uma dica

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Isso provavelmente precisa que limpes as connections/commands de forma a estar sempre a 0 a query.

Convém também dizeres que erro é que te dá?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

Não dá erro nenhum, simplesmente não mostra na GiridView o resultado da busca por valor, ficando a girdView com os dados da consulta anterior.

Quando te referes a limpar a connection  será este codigo?

connection = Nothing

Se assim é o código está presente comopodes verificar

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Simplificando, queres que, ao escrever numa determinada textbox, faça uma procura na base de dados para encontrar X valor e apresentá-lo na datagrid?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

Sim é isso.

Mas isso já faço, se leres com atenção o que escrevi.

Tenho na mesma Form dois tipos de consulta

1- Busca um valor na coluna despesa está a funcionar bem

2 - Busca por categoria/Subcategoria/Familiar que tambem funciona bem

O que sucede é que ao fazer nova consulta com as categorias e subcategorias, quando retorno a consulta de um valor o resultado não aparece na datagridview.

Tenho que sair da aplicação e voltar a entrar para poder voltar a utilizar a busca por valor

Eu suspeito que a query e executada, mas os valores não retornam a datagridview

O porquê não sei - É aí que preciso de ajuda para compreender o que se passa e corrigir

Obrigado desde já pela atenção

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Eu acho que sei o que é.

No teu 1º post, devias de ter identificado a que rotinas se referem cada quote das linhas de código que fizeste.

A query que deixa de funcionar é esta:

Dim SQL As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Despesa > 0 "

ou é esta:

Dim SQL As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Data BETWEEN '" & DataInicio & "' AND '" & DataFim & "' AND Categoria Like '" & TextBox1.Text.ToString & "%' AND SubCategoria Like '" & TextBox2.Text.ToString & "%' AND Familiar Like '" & TextBox3.Text.ToString & "%'"

?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
uncle_j

Acrescenta Me.ReceitaDespesaDataSet.Clear() desta forma limpas o dataset antes de proceder uma nova consulta.

Private Sub ValorDespesaToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ValorDespesaToolStripButton.Click

        Try

            Me.ReceitaDespesaDataSet.Clear()

            Me.Table1TableAdapter.ValorDespesa(Me.ReceitaDespesaDataSet.Table1, CType(Param2ToolStripTextBox.Text, Decimal))

        Catch ex As System.Exception

            System.Windows.Forms.MessageBox.Show(ex.Message)

        End Try

        ''Coloca o nº de registos na label

        'Label2.Text = "Este Filtro Encontrou - " & Me.Table1DataGridView.RowCount & " Registos"

        Call SomarDespesa()

     

    End Sub

Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click

        Me.ReceitaDespesaDataSet.Clear()

        'Faz a exibição de todos os registos

        Me.Table1TableAdapter.FillBy(Me.ReceitaDespesaDataSet.Table1)

        Me.Param2ToolStripTextBox.Text = ""

   

        'End If

        Call SomarDespesa()

    E

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

Oi bioshock

A query que deixa de funcionar é :

 Dim SQL As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Despesa > 0 "

Que actua com o Botão "Valor Despesa" no Table1BindingNavigator

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

Oi uncle_j

Agradeço desde já a atenção

Coloquei Me.ReceitaDespesaDataSet.Clear()  nas rotinas todas sobre as queris e não deu resultado

Eu acho que a query é executada, pois o numero de registos encontrados é alterado no quadro Table1BindingNavigator, só que não são apresentados na GridView.

O mais engraçado é que se eu apenas executar em primeiro lugar a query do "valor de despesa" e o fizer varias vezes funciona sempre bem, com a apresentação dos resultados na GridView, assim que recorro à outra query (por categorias) e retornar a primeira já não apresenta os resultados na GridView.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Experimenta lá:

           

            Dim SqlConnection As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Utilizador\" & _
        "My Documents\ReceitaDespesa.mdf;" & _
        "Integrated Security=True;Connect Timeout=30;User Instance=True")
            Dim SqlQuery As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Despesa > 0 "
            Dim SqlAdapter As New SqlDataAdapter(SqlQuery, SqlConnection)
            Dim SqlDataSet As New DataSet

            SqlAdapter.Fill(SqlDataSet, "Table1")
            Me.DataGridView1.DataSource = SqlDataSet.Tables("Table1")

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

Oi bioshock

Desculpa-me por te te induzido em erro quando mencionei que a query.

A query que não funciona éesta:

SELECT     Id, Data, Designacao, Despesa, Categoria, SubCategoria, Familiar, Deposito, Balanco
FROM         Table1
WHERE     (Despesa = @Param2)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
uncle_j

Aqui  tens um exemplo de como preencher a  DataGridView atravez da TableAdapter:

Me.TblClientesTableAdapter.Fill(Me.DespesasDataSet.tblClientes)

Me.DataGridView1.DataSource = (Me.DespesasDataSet.tblClientes)

Me.DataGridView1.DataMember = ""

Private Sub ValorDespesaToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ValorDespesaToolStripButton.Click

        Try

            Me.Table1TableAdapter.ValorDespesa(Me.ReceitaDespesaDataSet.Table1, CType(Param2ToolStripTextBox.Text, Decimal))

          Me.Table1DataGridView.DataSource = Me.ReceitaDespesaDataSet.Table1

        Catch ex As System.Exception

            System.Windows.Forms.MessageBox.Show(ex.Message)

        End Try

        ''Coloca o nº de registos na label

        'Label2.Text = "Este Filtro Encontrou - " & Me.Table1DataGridView.RowCount & " Registos"

        Call SomarDespesa()

     

    End Sub[/code]

Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click

     

        'Faz a exibição de todos os registos

        Me.Table1TableAdapter.FillBy(Me.ReceitaDespesaDataSet.Table1)

        Me.Param2ToolStripTextBox.Text = ""

        Me.Table1DataGridView.DataSource = Me.Table1TableAdapter

     

        'End If

        Call SomarDespesa()

    End Sub[/code]

Boas tardes pessoal

Depois de algum tempo eis-me aqui com umpedido de ajuda

Numa aplicação minha particular sobre despesas familiares tenho uma consulta (de Valor) que funciona bem, no entanto ao proceder a outra consulta ( por Categoria/SubCat/Familiar) dentro do mesmo Form que tambem funciona, quando retorno a consulta (de Valor) já não consigo que funcione. Tenho que fechar a aplicação e reabrir

consultadespesas.gif

Private Sub ValorDespesaToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ValorDespesaToolStripButton.Click


        Try
            Me.Table1TableAdapter.ValorDespesa(Me.ReceitaDespesaDataSet.Table1, CType(Param2ToolStripTextBox.Text, Decimal))


        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)

        End Try

        ''Coloca o nº de registos na label
        'Label2.Text = "Este Filtro Encontrou - " & Me.Table1DataGridView.RowCount & " Registos"

        Call SomarDespesa()

       
    End Sub

 Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click



      
        'Faz a exibição de todos os registos
        Me.Table1TableAdapter.FillBy(Me.ReceitaDespesaDataSet.Table1)
        Me.Param2ToolStripTextBox.Text = ""


      
        'End If

        Call SomarDespesa()

    End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        'SELECT sobre Despesas

        ' Declaração de variáveis privadas
        Dim da As SqlDataAdapter
        Dim ds As DataSet

        If DateTimePicker1.Value > DateTimePicker2.Value Then
            MsgBox("A Data Inicial não pode ser Superior a Data Final", MsgBoxStyle.Information, "Data Inicial Maior que Data Final")
            DateTimePicker1.Focus()
            Exit Sub
        End If


        Dim DataInicio As New DateTime(DateTimePicker1.Value.Year, DateTimePicker1.Value.Month, DateTimePicker1.Value.Day, 0, 0, 0)
        Dim DataFim As New DateTime(DateTimePicker2.Value.Year, DateTimePicker2.Value.Month, DateTimePicker2.Value.Day, 23, 59, 59)

        ' Texto de ligação à base de dados
        Dim myConnectionString As String = _
        "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Utilizador\" & _
        "My Documents\ReceitaDespesa.mdf;" & _
        "Integrated Security=True;Connect Timeout=30;User Instance=True"


        ' Cria uma nova ligação à base de dados
        Dim connection As New SqlConnection(myConnectionString)


        Dim SQL As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Data BETWEEN '" & DataInicio & "' AND '" & DataFim & "' AND Categoria Like '" & TextBox1.Text.ToString & "%' AND SubCategoria Like '" & TextBox2.Text.ToString & "%' AND Familiar Like '" & TextBox3.Text.ToString & "%'"


        da = New SqlDataAdapter(SQL, connection)

        ' Cria um novo DataSet, ou seja, uma representação em memória da informação
        ds = New DataSet

        ' Coloca a informação da tabela definida no DataSet
        da.Fill(ds, "Table1")

        ' Define que a fonte de dados da DataGridView é a nossa DataSet
        ' criando automáticamente as colunas e linhas de dados
        Me.Table1DataGridView.DataSource = ds.Tables("Table1")

        ' Limpa a ligação à base de dados. Não é necessário fechar a ligação
        ' porque esta não foi aberta através do comando .Open()
        connection = Nothing


        Call SomarDespesa()

        BindingNavigatorPositionItem.Text = Me.Table1DataGridView.CurrentRow.Index + 1

        BindingNavigatorCountItem.Text = " de " & Me.Table1DataGridView.RowCount & "  Registos Encontrados"

        Me.Table1DataGridView.Focus()
      

        'Label3.Text = "Este Filtro encontrou - " & Me.DataGridView1.RowCount & " Registos"

    End Sub

Private Sub ExibirTodos()

        'Exibir todos os registos depois de umaconsulta

        ' Declaração de variáveis privadas
        Dim da As SqlDataAdapter
        Dim ds As DataSet

        ' Texto de ligação à base de dados
        Dim myConnectionString As String = _
        "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Utilizador\" & _
        "My Documents\ReceitaDespesa.mdf;" & _
        "Integrated Security=True;Connect Timeout=30;User Instance=True"

        ' Cria uma nova ligação à base de dados
        Dim connection As New SqlConnection(myConnectionString)


        Dim SQL As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Despesa > 0 "


        da = New SqlDataAdapter(SQL, connection)

        ' Cria um novo DataSet, ou seja, uma representação em memória da informação
        ds = New DataSet

        ' Coloca a informação da tabela definida no DataSet
        da.Fill(ds, "Table1")

        ' Define que a fonte de dados da DataGridView é a nossa DataSet
        ' criando automáticamente as colunas e linhas de dados
        Me.Table1DataGridView.DataSource = ds.Tables("Table1")

        ' Limpa a ligação à base de dados. Não é necessário fechar a ligação
        ' porque esta não foi aberta através do comando .Open()
        connection = Nothing

        'Limpa as cx. texto
        Me.TextBox1.Text = ""
        Me.TextBox2.Text = ""
        Me.TextBox3.Text = ""

        BindingNavigatorCountItem.Text = " de " & Me.Table1DataGridView.RowCount & "  Registos Encontrados"

        Call SomarDespesa()



    End Sub

Agradeço uma dica

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

Oi  bioshock e uncle_j

Obrigado pela atenção prestada

A duvida ficou resolvida com as vossas dicas como código abaixo:

Private Sub ValorDespesaToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ValorDespesaToolStripButton.Click


        Dim SqlConnection As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Utilizador\" & _
      "My Documents\ReceitaDespesa.mdf;" & _
      "Integrated Security=True;Connect Timeout=30;User Instance=True")
        Dim SqlQuery As String = "SELECT Id, Data, Despesa, Designacao, Categoria, SubCategoria, Familiar From Table1 WHERE Despesa = '" & Str(Param2ToolStripTextBox.Text) & "'"

        Dim SqlAdapter As New SqlDataAdapter(SqlQuery, SqlConnection)
        Dim SqlDataSet As New DataSet

        SqlAdapter.Fill(SqlDataSet, "Table1")
        Me.Table1DataGridView.DataSource = SqlDataSet.Tables("Table1")

        BindingNavigatorCountItem.Text = " de " & Me.Table1DataGridView.RowCount & "  Registos Encontrados"


     

        Call SomarDespesa()


    End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.