Jump to content
Sign in to follow this  
Chamuanza

Registo Duplicado na BD SQL

Recommended Posts

Chamuanza

Oi Pessoal  agradecia uma dica

Ao fazer dois registos diferentes consecutivos na BD aparece-me os registos duplicados

    Private Sub InserirJogadosEuro()

        Dim DataSorteio = MonthCalendar1.SelectionStart.DayOfWeek
        Dim Dia As String
        Dia = ""
        Select Case DataSorteio
            Case 2
                Dia = "Terça Feira"
            Case 5
                Dia = "Sexta Feira"
        End Select


        ' 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 "JogadosEuromilhoes" em que os campos 
        ' "Data" e "diasemana" são passados através de parâmetros 
        Dim SQL As String = "INSERT INTO JogadosEuromilhoes([Aposta], [Data], [DiaSemana], [N1], [N2], [N3], [N4], [N5],[E1], [E2]) VALUES (@Aposta, @Data, @DiaSemana, @N1, @N2, @N3, @N4, @N5, @E1, @E2);"

        ' 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 = MonthCalendar1.SelectionStart
        'command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = MonthCalendar1.SelectionStart.DayOfWeek
        command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = Dia
        command.Parameters.Add("@N1", SqlDbType.VarChar).Value = ListBox1.Items.Item(0).ToString
        command.Parameters.Add("@N2", SqlDbType.VarChar).Value = ListBox1.Items.Item(1).ToString
        command.Parameters.Add("@N3", SqlDbType.VarChar).Value = ListBox1.Items.Item(2).ToString
        command.Parameters.Add("@N4", SqlDbType.VarChar).Value = ListBox1.Items.Item(3).ToString
        command.Parameters.Add("@N5", SqlDbType.VarChar).Value = ListBox1.Items.Item(4).ToString

        command.Parameters.Add("@E1", SqlDbType.VarChar).Value = ListBox2.Items.Item(0).ToString
        command.Parameters.Add("@E2", SqlDbType.VarChar).Value = ListBox2.Items.Item(1).ToString



        ' 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

    End Sub

e quando façoa consulta logo a seguir o ultimo registo não aparece, tenho que sair da Form principal e voltar

Share this post


Link to post
Share on other sites
Caça

Mas qual é a tua duvida?

Os registos não se actualizam automaticamente no formulário, tens de os actualizar manualmente


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

Ao executar a instrução Insert tem de ficar na BD


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

Após a inserção chamas o sub que selecciona os dados. Relativamente ao teu código, eu não vejo ali nada que se assemelhe a dupla inserção para haver registos duplicados.

Share this post


Link to post
Share on other sites
Chamuanza

Ficou mas com os valores do registo anterior

E quando abro a Form de consulta ao numeros jogados na DataGridview  não aparecem todos os registos,

E como se fosse buscar os dados a outro lado.

Em tempos lembro-me de alguem aqui no forum ter respondido  sobre uma copia da BD,mas não sei exactamente qual a situação

Share this post


Link to post
Share on other sites
Caça

Estás a fazer alguma coisa mal...

Mostra mais código


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chamuanza

Oi Caça aqui vai o codigo que estou a usar para gravar os dados na BD

Private Sub butGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butGuardar.Click

        If TextBox1.Text = 0 Or TextBox2.Text = 0 Then
            MsgBox("Jogou com Multiplas - A Rotina para guardar ainda não está em funcionamento", MsgBoxStyle.Information, "Jogo de Multiplas")
            butAnular.PerformClick()
            Exit Sub

        ElseIf TextBox1.Text = 5 And TextBox2.Text = 2 Then

            'Criar lista de inteiros e ordenar (numeroseuromilhoes)
            Dim listNr, listNr1 As New List(Of Integer)

            For Each ctrl In Panel1.Controls
                If TypeOf (ctrl) Is Label Then
                    If ctrl.BackColor = Color.Yellow Then
                        listNr.Add(ctrl.Text)
                    End If
                End If
            Next
            listNr.Sort()
            For Each int As Integer In listNr
                ListBox1.Items.Add(int)
            Next

            'Criar lista de inteiros e ordenar (Estrelas)
            For Each ctrl In Panel2.Controls
                If TypeOf (ctrl) Is Label Then
                    If ctrl.BackColor = Color.Yellow Then
                        listNr1.Add(ctrl.Text)
                    End If
                End If
            Next
            listNr1.Sort()
            For Each int As Integer In listNr1
                ListBox2.Items.Add(int)
            Next

            'Vai fazer a contagem de apostas existentes
            Call ContagemApostasEuro()

          

            'Faz a contagem do nº de apostas já feitas para aquela data
            ContaNumeroAposta += 1

            'Vai inserir os dados na tabela
            Call InserirJogadosEuro()




            'Coloca os contadores a zero
            ContaNumerosEuro = 0
            ContaEstrelasEuro = 0
            TextBox1.Text = ContaNumerosEuro
            TextBox2.Text = ContaEstrelasEuro

            'limpa as labels
            ' Fazer activar o click do butão
            butAnular.PerformClick()

        End If

    End Sub

Private Sub InserirJogadosEuro()

        Dim DataSorteio = MonthCalendar1.SelectionStart.DayOfWeek
        Dim Dia As String
        Dia = ""
        Select Case DataSorteio
            Case 2
                Dia = "Terça Feira"
            Case 5
                Dia = "Sexta Feira"
        End Select


        ' 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 "JogadosEuromilhoes" em que os campos 
        ' "Data" e "diasemana" são passados através de parâmetros 
        Dim SQL As String = "INSERT INTO JogadosEuromilhoes([Aposta], [Data], [DiaSemana], [N1], [N2], [N3], [N4], [N5],[E1], [E2]) VALUES (@Aposta, @Data, @DiaSemana, @N1, @N2, @N3, @N4, @N5, @E1, @E2);"

        ' 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 = MonthCalendar1.SelectionStart
        'command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = MonthCalendar1.SelectionStart.DayOfWeek
        command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = Dia
        command.Parameters.Add("@N1", SqlDbType.VarChar).Value = ListBox1.Items.Item(0).ToString
        command.Parameters.Add("@N2", SqlDbType.VarChar).Value = ListBox1.Items.Item(1).ToString
        command.Parameters.Add("@N3", SqlDbType.VarChar).Value = ListBox1.Items.Item(2).ToString
        command.Parameters.Add("@N4", SqlDbType.VarChar).Value = ListBox1.Items.Item(3).ToString
        command.Parameters.Add("@N5", SqlDbType.VarChar).Value = ListBox1.Items.Item(4).ToString

        command.Parameters.Add("@E1", SqlDbType.VarChar).Value = ListBox2.Items.Item(0).ToString
        command.Parameters.Add("@E2", SqlDbType.VarChar).Value = ListBox2.Items.Item(1).ToString



        ' 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

    End Sub

Share this post


Link to post
Share on other sites
bioshock

Em tempos lembro-me de alguem aqui no forum ter respondido  sobre uma copia da BD,mas não sei exactamente qual a situação

Isso certamente teria haver com wizards, pois não actualiza directamente na BD (sem o nosso consentimento).

Btw, falta mostrar o código de selecção dos registos.

Share this post


Link to post
Share on other sites
Chamuanza

Oi bioshock

O codigo de seleçao dos registos está ai no topico, vai ler as Labels com cor amarela envia para uma listbox para poder ordenar (não soube fazer de outra maneira) e os command vão buscar cada item da listbox para inserir na BD.

eu concordo contigo quanto ao wizards

é que agora reparei que ao tentar apagar um registo via Datagridviwe dame este erro quando vou gravar

Update requires a valid DeleteCommand when passed DataRow collection with deleted rows.

Share this post


Link to post
Share on other sites
bioshock

Não estás a perceber.

Como é que tu devolves os dados que tens na BD? Ali, repito, não têm esse código. O que tu ali fazes é inserir dados em listboxs e depois inseres os mesmos na BD. Quanto a mim não é a melhor maneira de ser feito. Deves inserir os dados na BD e depois seleccionar os mesmos.

A instrução de SQL a que me refiro para devolver os dados da BD chama-se SELECT.

Share this post


Link to post
Share on other sites
Chamuanza

Estou todo baralhado com isto

Os Select estão feitos via Wizard quando abro um Form com Datagrid aparecem-me logo os dados todos da tabela, depois se quiser fazer um Select faço e não tenho problema nessa parte.

O meu problema é que por Ex. apaguei um registo directamente na BD e quando abro a Form que vai mostrar a Datagrid dessa tabela o registo ainda la esta.

Quer dizer que isto ou ficou em memoria ou vai buscar a outra tabela?

Share this post


Link to post
Share on other sites
bioshock

Logo vi que estavas a utilizar o wizard. :)

1st of all: Deves utilizar um só método de programação, ou desenvolves todo o código linha por linha ou utilizas os bindings que o VS te fornece com o wizard, porque se não vai dar barraco, como deu.

Fica em memória. Pelo que tenho vivido em relação a este tema, ao fazeres o setup da aplicação, isso irá funcionar direitinho. Mas nada melhor que experimentar.

Share this post


Link to post
Share on other sites
Caça

Opta por aquilo que te dá mais jeito.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

Posso-te começar a enumerar as inúmeras vantagens de programar "unha-a-unha" :)

Não precisas de fazer tudo de novo, eliminas a BD que tens incutida no projecto, eliminas todos os bindings por ti criados/arrastados para o form e estás pronto a rular.

Share this post


Link to post
Share on other sites
Caça

E se achares que "unha-a-unha" é complicado e trabalhoso, tenta usar Entity Framework


Pedro Martins

Não respondo a duvidas por PM

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
Sign in to follow this  

×
×
  • 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.