Chamuanza Posted August 26, 2012 at 09:52 AM Report Share #473521 Posted August 26, 2012 at 09:52 AM (edited) 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 August 26, 2012 at 10:09 AM by Chamuanza Link to comment Share on other sites More sharing options...
Leudassdf Posted August 26, 2012 at 10:54 AM Report Share #473525 Posted August 26, 2012 at 10:54 AM O que queres saber sao os registos que estao na base de dados ou aqueles que filtras da BD? Seria util se mostrasses como e que fazes essa contagem. Ja agora como e que vais buscar os dados a BD? Por um adaptador? Link to comment Share on other sites More sharing options...
Chamuanza Posted August 26, 2012 at 12:43 PM Author Report Share #473528 Posted August 26, 2012 at 12:43 PM 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 More sharing options...
Leudassdf Posted August 26, 2012 at 08:11 PM Report Share #473579 Posted August 26, 2012 at 08:11 PM 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. Isso so te acontece quando tu crias um novo registo? esse registo é adicionada a base de dados?. Como e que estás a ir buscar os dados a base de dados? Através de um adaptador? Link to comment Share on other sites More sharing options...
Chamuanza Posted August 26, 2012 at 09:08 PM Author Report Share #473588 Posted August 26, 2012 at 09:08 PM (edited) 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 August 26, 2012 at 09:10 PM by Chamuanza Link to comment Share on other sites More sharing options...
Leudassdf Posted August 26, 2012 at 09:38 PM Report Share #473597 Posted August 26, 2012 at 09:38 PM 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 More sharing options...
Chamuanza Posted August 26, 2012 at 09:58 PM Author Report Share #473601 Posted August 26, 2012 at 09:58 PM 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 More sharing options...
bioshock Posted August 26, 2012 at 10:01 PM Report Share #473603 Posted August 26, 2012 at 10:01 PM (edited) Mostra o código de inserção e aproveita e dá uma vista de olhos neste artigo: http://wiki.portugal-a-programar.pt/dev_net:vb.net:bindingsources Edited August 26, 2012 at 10:02 PM by bioshock Link to comment Share on other sites More sharing options...
Leudassdf Posted August 26, 2012 at 10:06 PM Report Share #473607 Posted August 26, 2012 at 10:06 PM 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 More sharing options...
Chamuanza Posted August 27, 2012 at 06:34 PM Author Report Share #473690 Posted August 27, 2012 at 06:34 PM 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 More sharing options...
bioshock Posted August 27, 2012 at 10:55 PM Report Share #473730 Posted August 27, 2012 at 10:55 PM Totalmente desaconselhável o uso de "wizards" com "unha-a-unha" (como está explicado no artigo). Experimenta desenvolver todo o código "unha-a-unha". http://wiki.portugal-a-programar.pt/dev_net:vb.net:access Terás um maior controlo sobre...tudo! Link to comment Share on other sites More sharing options...
Leudassdf Posted August 28, 2012 at 08:13 AM Report Share #473753 Posted August 28, 2012 at 08:13 AM 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 More sharing options...
Chamuanza Posted August 28, 2012 at 09:45 PM Author Report Share #473908 Posted August 28, 2012 at 09:45 PM 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 More sharing options...
Leudassdf Posted August 29, 2012 at 10:31 AM Report Share #473949 Posted August 29, 2012 at 10:31 AM 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 More sharing options...
jlpcalado Posted August 29, 2012 at 02:55 PM Report Share #473979 Posted August 29, 2012 at 02:55 PM Olá. Já agora no inserir experimenta fazer: If x < 1 Then MessageBox.Show("A operação efectuada não retomou qualquer resultado.") else Me.SaidosTotolotoTableAdapter.Fill(Me.GuardarResultadosDataSet.SaidosTotoloto) End If Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now