Jump to content
Chamuanza

Consulta sem resultados

Recommended Posts

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

Share this post


Link to post
Share on other 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á?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 & "%'"

?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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")

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other sites
bioshock

Então, alteras a queryString no código que te dei e adicionas os restos dos campos.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.