Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Chamuanza

Apagar Registo de BD SQL

Recommended Posts

Chamuanza

Oi Pessoal

:wallbash: Preciso de uma ajudinha

Não consigo apagar um registo directamente da BD que se encontra repetido com aparece-me este erro

errosql.gif

Como fazer? Se é que se pode fazer alguma coisa

Obrigado

Share this post


Link to post
Share on other sites
Caça

Isso acontece porque tens mais do que um registo exactamente igual na mesma tabela, devias utilizar um campo chave primaria, ou entao faz por codigo SQL


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chamuanza

Isto não dá nada

Acrescentei uma coluna para numerar as linhas e atribuir a chave primaria, mas mesmo assim não me deixa nem apagar nem me deixa atribuir um valor as duas linhas(registos) que são iguais

Share this post


Link to post
Share on other sites
morsa

Dava jeito se colocasses aqui o código DDL que cria a tabela. Doutra forma é quase como adivinhar :(

No limite, basta teres uma chave forasteira ligada a essa tabela a esse tuplo em concreto e dá logo barraca. Manda o código da tabela para podermos ajudar.

1abraço

Share this post


Link to post
Share on other sites
Chamuanza

Oi Morsa

Não entendo o que queres dizer com código DDL

A tabela (Datagrid) foi criada via Wizard e abre com o form

Estou a tentar apagar com codigo como disse o Caça utilizando este codigo

 Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click


        ' 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á apagar todos os dados na tabela "MyTable" em que o campo 
        ' "username" é igual ao parâmetros posteriormente indicado 
        Dim SQL As String = "DELETE FROM SaidosEuromilhoes WHERE [id] = @Null"

        ' 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 do parâmetro que irá ser apagado 
        command.Parameters.Add("@Id", SqlDbType.Char).Value = "@Null"

        ' Abre a ligação, executa o comando e guarda em "x" o número de registos eliminados 
        connection.Open()
        'Dim x As Integer = command.ExecuteNonQuery()
        Dim x As Integer = command.ExecuteScalar()
        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

mas da este erro  - Must declare the scalar variable "@Null".

Share this post


Link to post
Share on other sites
Caça

Eu não me estava a referir a código VB mas sim a código SQL, tipo

DELETE FROM Tabela WHERE ID = ID


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chamuanza

Oi Caça

Provavelmente coloquei o  tópico, no sitio errado, pois estou a funcionar com VB2008

Share this post


Link to post
Share on other sites
Caça

Ok, então troca

command.Parameters.Add("@Id", SqlDbType.Char).Value = "@Null"

por

command.Parameters.Add("@Null", SqlDbType.Char).Value = "ID_a_Apagar"


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chamuanza

Oi Caça o problema e que a tabela que tenho está assim, depois de atribuir a coluna ID não consegui dar valor aos 2 pimeiros registos, assim não consigo seguir o teu exemplo

Data                                NS1  NS2  NS3 NS4  NS5  ES1 ES2    ID

2011-07-05 0:00:00 11 28 29 47 49 1 5 NULL

2011-07-05 0:00:00 11 28 29 47 49 1 5 NULL

2011-03-25 0:00:00 6 12 21 27 33 3 7 1

2011-04-01 0:00:00 4 17 21 22 33 4 8 2

2011-04-08 0:00:00 21 23 38 47 50 2 6 3

2011-04-15 0:00:00 4 6 21 39 41 2 6 4

2011-04-22 0:00:00 11 22 36 45 48 1 4 5

2011-05-06 0:00:00 11 16 20 22 28 4 9 6

Share this post


Link to post
Share on other sites
Caça

O ID era um exemplo, ai tens de colocar os campos onde queres filtrar, por exemplo, se quiseres apagar todos os registos que tenham o campo NS1 = 11, coloca.

WHERE NSI = 11


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  

×

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.