Jump to content

Contagem de Registos


Chamuanza

Recommended Posts

Um Bem Aja ao Forum

Tenho-me deparado com a seguinte situação:

Depois de carregar um registo na BD tenho uma rotina que me dá o Nº de registos segundo determinada condição.

Sucede que se eu correr a aplicação dentro do VB2080 a contagem está correta.

Se correr a aplicação fora do VB ( via atalho) a contagem não contempla o ultimo registo , mas ele está na BD.

O Form da contagem faz o Load com este código:

Private Sub frmBolasSaidasTotoloto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	'TODO: This line of code loads data into the 'GuardarResultadosDataSet.SaidosTotoloto' table. You can move, or remove it, as needed.
	Me.SaidosTotolotoTableAdapter.Fill(Me.GuardarResultadosDataSet.SaidosTotoloto)
End Sub
Edited by Chamuanza
Link to comment
Share on other sites

O que pretendo é a contagem do filtro que por sinal até está bem se correr a aplicação dentro do VB.

Mas quando corro a aplicação fora do VB não me conta o ultimo registo.

Ou seja da-me a impressão que a BD não fica actualizada quando insiro o ultimo registo com a aplicação a correr fora do VB.

Quanto ao código:

Private Sub frmBolasSaidasTotoloto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	'TODO: This line of code loads data into the 'GuardarResultadosDataSet.SaidosTotoloto' table. You can move, or remove it, as needed.
	Me.SaidosTotolotoTableAdapter.Fill(Me.GuardarResultadosDataSet.SaidosTotoloto)
End Sub


Private Sub butContar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butContar.Click

       'Conta os numeros do Totoloto
       Dim yContagem(49) As Integer

       For i As Integer = 1 To 49

           Dim ctrl() As Control = Me.Controls.Find("Label" & i.ToString(), True)

           For Linhas = 0 To DataGridView1.RowCount - 1
               For Colunas = 0 To 4
                   If DataGridView1.Item(Colunas, Linhas).Value = i Then
                       yContagem(i) += 1
                   End If
               Next Colunas
           Next Linhas

           If ctrl.Length >= 1 Then
               Dim lbl As Label = DirectCast(ctrl(0), Label)
               lbl.Visible = True
               lbl.Text = yContagem(i)
           End If

       Next i


       'Contagem do Nº da Sorte Totoloto
       Dim XContagem(13) As Integer

       For C As Byte = 1 To 13

           Dim ctrl() As Control = Me.Controls.Find("Label" & C + 49.ToString(), True)

           For Linhas = 0 To DataGridView1.RowCount - 1
               For Colunas = 5 To 5
                   If DataGridView1.Item(Colunas, Linhas).Value = C Then
                       XContagem(C) += 1
                   End If
               Next Colunas
           Next Linhas

           If ctrl.Length >= 1 Then
               Dim lbl As Label = DirectCast(ctrl(0), Label)
               lbl.Visible = True
               lbl.Text = XContagem(C)
           End If


       Next C


   End Sub
Link to comment
Share on other sites

Já respondi a tua questão no #3

Tenho uma FORM com uma Datagridview que carrega os dados com:


Private Sub frmBolasSaidasTotoloto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	'TODO: This line of code loads data into the 'GuardarResultadosDataSet.SaidosTotoloto' table. You can move, or remove it, as needed.
	Me.SaidosTotolotoTableAdapter.Fill(Me.GuardarResultadosDataSet.SaidosTotoloto)
End Sub

Depois faço a contagem através da rotina:



Private Sub butContar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butContar.Click


       'Conta os numeros do Totoloto
       Dim yContagem(49) As Integer

       For i As Integer = 1 To 49

           Dim ctrl() As Control = Me.Controls.Find("Label" & i.ToString(), True)

           For Linhas = 0 To DataGridView1.RowCount - 1
               For Colunas = 0 To 4
                   If DataGridView1.Item(Colunas, Linhas).Value = i Then
                       yContagem(i) += 1
                   End If
               Next Colunas
           Next Linhas


           If ctrl.Length >= 1 Then
               Dim lbl As Label = DirectCast(ctrl(0), Label)
               lbl.Visible = True
               lbl.Text = yContagem(i)
           End If

       Next i


       'Contagem do Nº da Sorte Totoloto
       Dim XContagem(13) As Integer

       For C As Byte = 1 To 13

           Dim ctrl() As Control = Me.Controls.Find("Label" & C + 49.ToString(), True)

           For Linhas = 0 To DataGridView1.RowCount - 1
               For Colunas = 5 To 5
                   If DataGridView1.Item(Colunas, Linhas).Value = C Then
                       XContagem(C) += 1
                   End If
               Next Colunas
           Next Linhas

           If ctrl.Length >= 1 Then
               Dim lbl As Label = DirectCast(ctrl(0), Label)
               lbl.Visible = True
               lbl.Text = XContagem(C)
           End If


       Next C


   End Sub

Edited by Chamuanza
Link to comment
Share on other sites

Em 8/26/2012 às 22:08, Chamuanza disse:

Já respondi a tua questão no #3

Tenho uma FORM com uma Datagridview que carrega os dados com:


Private Sub frmBolasSaidasTotoloto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	'TODO: This line of code loads data into the 'GuardarResultadosDataSet.SaidosTotoloto' table. You can move, or remove it, as needed.
	Me.SaidosTotolotoTableAdapter.Fill(Me.GuardarResultadosDataSet.SaidosTotoloto)
End Sub
 

Depois faço a contagem através da rotina:


Private Sub butContar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butContar.Click


	'Conta os numeros do Totoloto
	Dim yContagem(49) As Integer

	For i As Integer = 1 To 49

		Dim ctrl() As Control = Me.Controls.Find("Label" & i.ToString(), True)

		For Linhas = 0 To DataGridView1.RowCount - 1
			For Colunas = 0 To 4
				If DataGridView1.Item(Colunas, Linhas).Value = i Then
					yContagem(i) += 1
				End If
			Next Colunas
		Next Linhas


		If ctrl.Length >= 1 Then
			Dim lbl As Label = DirectCast(ctrl(0), Label)
			lbl.Visible = True
			lbl.Text = yContagem(i)
		End If

	Next i


	'Contagem do Nº da Sorte Totoloto
	Dim XContagem(13) As Integer

	For C As Byte = 1 To 13

		Dim ctrl() As Control = Me.Controls.Find("Label" & C + 49.ToString(), True)

		For Linhas = 0 To DataGridView1.RowCount - 1
			For Colunas = 5 To 5
				If DataGridView1.Item(Colunas, Linhas).Value = C Then
					XContagem(C) += 1
				End If
			Next Colunas
		Next Linhas

		If ctrl.Length >= 1 Then
			Dim lbl As Label = DirectCast(ctrl(0), Label)
			lbl.Visible = True
			lbl.Text = XContagem(C)
		End If


	Next C


End Sub

 

Nao tinha reparado bem na primeira parte do programa. o programa carrega os dados para um dataset no evento load correto?

Primeiro osc ciclos for parecem estar todos corretos. a tua verificaçao e feita ao nivel do numero de items que tens na base de dados. o problema e quando inseres um novo? Ja agora se inserires um dado novo fazendo o debug atraves do VB, ele dá os valores corretos? E que ao adicionares um dado a base de dados deves depois recarregar o teu dataset e a datagridview. pode ser por ai o problema...

Link to comment
Share on other sites

O que eu não compreendo é a razão de quando estou a correr a aplicação fora do Visual Basic e após introduzir um novo registo, e depois de verificar que o registo está na BD a contagem com a rotina que apresento no #6 não se efectua.

No entanto se correr a aplicação dentro do Visual Basic após introduzir um novo registo faço a contagem e apresenta a conta certa

Link to comment
Share on other sites

O que eu não compreendo é a razão de quando estou a correr a aplicação fora do Visual Basic e após introduzir um novo registo, e depois de verificar que o registo está na BD a contagem com a rotina que apresento no #6 não se efectua.

No entanto se correr a aplicação dentro do Visual Basic após introduzir um novo registo faço a contagem e apresenta a conta certa

Realmente e estranho isso. Quando inseres o registo fora do vb ele é acressentado ao datagridview?

Link to comment
Share on other sites

Acho que o Bioshock pode ter razão.

Ao ler o artigo pergunto-me se o problema não estará no FORM LOAD que carrega a DatagridView onde vou fazer a contagem via Wizard.

Aqui vai o código de inserção dos registos

// Private Sub butSorteadosTotoloto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butSorteadosTotoloto.Click


       'Verifica se existe chave para não repetir
       Dim Linhas As Integer

       For Linhas = 0 To DataGridView1.RowCount - 1
           For Coluna As Byte = 0 To 0
               If DataGridView1(0, Linhas).Value = DateTimePicker1.Value Then
                   MsgBox("Já Existe uma CHAVE com esta Data")
                   Me.butSorteadosTotoloto.Enabled = False
                   Me.butGuardarPremiados.Enabled = False
                   Exit Sub
               End If
           Next Coluna
       Next Linhas


       ' Texto de ligação à base de dados 
       Dim myConnectionString As String = _
         "Data Source=.\SQLEXPRESS;AttachDbFilename='D:\ProjectoTotoMilhoes\TotoMilhões\GuardarResultados.mdf';" & _
         ";Integrated Security=True;User Instance=True"

       ' Comando que irá inserir dados na tabela "SaidosTotoloto" 
       Dim SQL As String = "INSERT INTO SaidosTotoloto([Data], [NST1], [NST2], [NST3], [NST4], [NST5], [NSORT]) VALUES (@Data, @NST1, @NST2, @NST3, @NST4, @NST5, @NSORT);"

       ' Cria uma nova ligação à base de dados 
       Dim connection As New SqlConnection(myConnectionString)
       ' Criação do comando indicando a instrução e a ligação 
       Dim command As New SqlCommand(SQL, connection)

       ' Indicação dos parâmetros que serão inseridos 
       ' command.Parameters.Add("@Aposta", SqlDbType.VarChar).Value = ContaNumeroAposta
       command.Parameters.Add("@Data", SqlDbType.DateTime).Value = DateTimePicker1.Value
       'command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = MonthCalendar1.Selectionstart.DayOfWeek
       'command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = Dia
       command.Parameters.Add("@NST1", SqlDbType.VarChar).Value = TextBox1.Text
       command.Parameters.Add("@NST2", SqlDbType.VarChar).Value = TextBox2.Text
       command.Parameters.Add("@NST3", SqlDbType.VarChar).Value = TextBox3.Text
       command.Parameters.Add("@NST4", SqlDbType.VarChar).Value = TextBox4.Text
       command.Parameters.Add("@NST5", SqlDbType.VarChar).Value = TextBox5.Text

       command.Parameters.Add("@NSORT", SqlDbType.VarChar).Value = TextBox6.Text

       ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos 
       connection.Open()

       Dim x As Integer = command.ExecuteNonQuery()
       If x < 1 Then
           MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
       End If

       ' Fecha a ligação e limpa as variáveis 
       connection.Close()
       connection = Nothing
       command = Nothing

       'Limpa as Cx. de texto
       TextBox1.Text = ""
       TextBox2.Text = ""
       TextBox3.Text = ""
       TextBox4.Text = ""
       TextBox5.Text = ""
       TextBox6.Text = ""


       Me.butSorteadosTotoloto.Enabled = False



   End Sub
Link to comment
Share on other sites

Acho que o Bioshock pode ter razão.

Ao ler o artigo pergunto-me se o problema não estará no FORM LOAD que carrega a DatagridView onde vou fazer a contagem via Wizard.

Aqui vai o código de inserção dos registos

Quando tu fazes a inserçao na base de dados nao estas a inserir esse dado no datagridview pelo que vejo no codigo.tu inseres diretamente na bd pelo que deves actualizar o dataset e a datagridview. Nao será esse o problema?

Link to comment
Share on other sites

Olá Leudassdf

Continuo sem compreender o porquê da situação, pois se ao carregar o Form com a Datagrid quando o faço dentro do Visual Basic vai-me buscar o ultimo registo a BD, mas quando funciono fora do VB o ultimo registo não aparece, embora esteja na BD

Já agora ajuda-me com a dica de actualizar o Dataset e Datagridview para tentar verificar se resulta

Obrigado

Link to comment
Share on other sites

Olá Leudassdf

Continuo sem compreender o porquê da situação, pois se ao carregar o Form com a Datagrid quando o faço dentro do Visual Basic vai-me buscar o ultimo registo a BD, mas quando funciono fora do VB o ultimo registo não aparece, embora esteja na BD

Já agora ajuda-me com a dica de actualizar o Dataset e Datagridview para tentar verificar se resulta

Obrigado

esta maneira nao e a mais avançada mas penso que sera melhor para perceberes: primeiro crias um adaptador. Public adaptador As New OleDbDataAdapter. Precisas tambem de importar esta libraria:Imports System.Data.OleDb.

depois fazes:


sql = "select cliente from clientes"'  depois a string tens que alterar para os dados que desejas obter da bd. eu neste caso fui a tabela clientes buscar o cliente

	ligacao.Open()'penso que nem é preciso abrir a ligaçao. experimenta.
	adaptador = New OleDbDataAdapter(sql, ligacao)' ligaçao e a connectionstring(deves alterar para o nome da tua variavel que contem a connectionstring.
	adaptador.Fill(cliente, "Cliente")' o primeiro pparametro("Cliente") é o nome do dataset pelo que tambem deves alterar pelo teu... O Segundo é o nome que dás a uma tabela dentro do dataset. Podes mudar para o nome que quiseres
	ligacao.Close()

feito isto ja tens o teu dataset actualizado agora é so apagares os dados da datagridview.

DataGridView1.Rows.Clear()

depois e so DataGridView1.datasource=teudataset.

isto deve ser feito quando clicas ara adicionar um novo elemento. e deve ser feito depois de teres adicionado os dados a bd.

Fiz-me entender?

Se nao funcionar diz mas pelo que vi com isto deve funcionar.

Link to comment
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.