Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Mica

Gravar na base de dados!!

Mensagens Recomendadas

Mica



        Dim myconnectionstring As String = _
"Provider=Microsoft.Jet.OLEDB.4.0 ata Source=C:\Documents and Settings\Mica\Os meus documentos\Visual Studio 2008\Projects\Projecto_2\Projecto_2\Produtos.mdb;"

        If MsgBox("Tem a certeza que deseja gravar o registo: ", MessageBoxButtons.YesNo, "Confime: Gravar Registo") = Windows.Forms.DialogResult.Yes Then
            Try

                Dim SQL As String

                SQL = "INSERT INTO Funcionários (Cod_Empregado, Nome, Apelido, Idade, Telefone, Morada, Cargo) VALUES (?,?,?,?,?,?,?)"



                '     Inicia uma ligação à bse de dados
                Using connection As New OleDbConnection(myconnectionstring)
                    'Define o comando e os parâmetros
                    Dim command As New OleDbCommand(SQL, connection)

                    command.Parameters.Add("@Cod_Empregado", OleDbType.VarChar)
                    command.Parameters.Add("Nome", OleDbType.VarChar)
                    command.Parameters.Add("Apelido", OleDbType.VarChar)
                    command.Parameters.Add("Idade", OleDbType.VarChar)
                    command.Parameters.Add("Telefone", OleDbType.VarChar)
                    command.Parameters.Add("Morada", OleDbType.VarChar)
                    command.Parameters.Add("Cargo", OleDbType.VarChar)



                    'Abre a ligação e insere o registo
                    connection.Open()
                    Dim x As Integer = command.ExecuteNonQuery()
                    If x <> 1 Then
                        Throw New ArgumentException("Não foi possível inserir o registo na base de dados!")
                    End If
                End Using

            Catch ex As Exception
                MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

            End Try
            MessageBox.Show("Registo gravado com sucesso!", "Gravar", MessageBoxButtons.OK, MessageBoxIcon.Information)
            ' EstadoRegisto = "Nada"
        Else
            MessageBox.Show("Registo não gravado!", "Gravar", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

Ora bem, este código deveria estar a servir para um propósito, adicionar um novo registo e gravá-lo na BD, bem mas quando eu adiciono um novo registo ele apaga um outro registo existente, invés de eu ficar com 23 por exemplo continuo com 22! gostava de saber qual a solução para isso não acontecer :s Espero ter sido claro!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Se é numeração automática no SQL de inserção não fazes referencia ao campo idfuncionario

Eu prefiro criar o campo sem numeração automática

Depois só temos que determinar qual é o ultimo e acrescentar um e atribuir essa variável ao id


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Ele apaga o último ou simplesmente não te grava o que adicionastes?

Tu ao compilares não estás a substituir a base de dados novamente?  Ou seja na propriedades do ficheiro, se este tiver associado ao projecto, tens lá uma cena que diz copy always, copy if newer ou never copy, deves ter isto como copy if newer...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Mica

Por exemplo eu quando vou adicionar um funcionário novo, já me aparece um lá, eu vou por cima e apago os dados para puder escrever novamente, mas ele grava o que eu escrevo, o que eu apaguei para puder escrever é que ele desaparece com ele!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Pelas tuas últimas palavras, deste-me a entender que queres fazer actualização a um funcionário existente, correcto? Então tens de usar o comando UPDATE e não INSERT.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Mica

        Dim myconnectionstring As String = _
"Provider=Microsoft.Jet.OLEDB.4.0 ata Source=C:\Documents and Settings\Mica\Os meus documentos\Visual Studio 2008\Projects\Projecto_2\Projecto_2\Produtos.mdb;"

        If MsgBox("Tem a certeza que deseja gravar o registo: ", MessageBoxButtons.YesNo, "Confime: Gravar Registo") = Windows.Forms.DialogResult.Yes Then
            Try

                Dim SQL As String

                SQL = "INSERT INTO Funcionários (Nome, Apelido, Idade, Telefone, Morada, Cargo) VALUES (?,?,?,?,?,?,?)"



                '     Inicia uma ligação à bse de dados
                Using connection As New OleDbConnection(myconnectionstring)
                    'Define o comando e os parâmetros
                    Dim command As New OleDbCommand(SQL, connection)


                    command.Parameters.Add("Nome", OleDbType.VarChar)
                    command.Parameters.Add("Apelido", OleDbType.VarChar)
                    command.Parameters.Add("Idade", OleDbType.VarChar)
                    command.Parameters.Add("Telefone", OleDbType.VarChar)
                    command.Parameters.Add("Morada", OleDbType.VarChar)
                    command.Parameters.Add("Cargo", OleDbType.VarChar)



                    'Abre a ligação e insere o registo
                    connection.Open()
                    Dim x As Integer = command.ExecuteNonQuery()
                    If x <> 1 Then
                        Throw New ArgumentException("Não foi possível inserir o registo na base de dados!")
                    End If
                End Using

            Catch ex As Exception
                MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

            End Try
            MessageBox.Show("Registo gravado com sucesso!", "Gravar", MessageBoxButtons.OK, MessageBoxIcon.Information)
            ' EstadoRegisto = "Nada"
        Else
            MessageBox.Show("Registo não gravado!", "Gravar", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

Ora bem este código serve para adicionar Funcionários á minha base de dados certo?? Apenas o faz temporariamente porque só o fará definitivamente com a instalação certo?

Vou começar por explicar, eu tenho as minhas textbox, onde vou introduzir os dados do meu funcionário! Mas quando vou editar as minhas textbox, ao introduzir um funcionário novo ele apaga sempre um funcionário anterior...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Estás todo baralhado.

1. O código acima não faz nada temporariamente, adiciona definitivamente. Quando se trata de adicionar temporariamente é quando utilizas os Wizards do Visual Studio para programar.

2. "Editar as minhas textboxs" - Rapaz, se queres editar o funcionário existente, como já te disse, tens de utilizar o comando UPDATE em vez de INSERT.

3. Se o que tu queres é inserir funcionários, tu não podes editar as textboxs (presumo que já lá tenha informação), tens de escrever na totalidade as novas informações dos funcionários.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Mica

:wallbash: (Isto é para mim mesmo!!)  :-[

Pois já lá tem informação,  mas eu apago... Mas não deveria desaparecer acho eu.. E eu quero introduzir nao usar update :s E eu escrevo as novas informaçoes todas!! Mas costumo apagar as que lá tem para poder escrever...

Mas ele não tem guardado definitivamente :S Esta a gravar temporariamente porque eu fecho tudo e ele perde a informação..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TiagoCruz
"INSERT INTO Funcionários (Nome, Apelido, Idade, Telefone, Morada, Cargo) VALUES (?,?,?,?,?,?,?)"

Porque tens os "?" na query? isso assim guarda-te o que na base de dados?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

@TiagoCruz

Isso é para passar parâmetros para a string...

@Mica

Isto esta confuso como tudo....

Isso de adicionar temporariamente depende de onde tens a bd e se quando compilas a aplicação, ele cria uma cópia ou utiliza o ficheiro original... Tal como te disse para verificares na minha primeira resposta.

Depois o INSERT não apaga nada, só insere, por isso essa história de apagar o anterior não está nada bem explicada.  :hmm:

Faz assim, abre a BD e vê quantos registos tens na BD.

Corre a aplicação através do IDE, e insere dois registos novos.

Fecha a aplicação e abre novamente a BD e verifica quantos registos lá tens.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TiagoCruz

Isso OleDb para mim é chines... so uso SQL ou MySQL...

Essas querys assim dão-me ja o no a cabeça xD

De qualquer das maneiras o r00t tem razao... o Insert so introduz dados na BD... deves tar a inserir uns a seguir aos outros... é impossivel que o Insert apague os registos anteriores.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TiagoCruz

na query ele tem os "?" e eu nunca tinha visto isso assim no meio de uma aplicaçao... a vdd é que nunca usei OleDB, mas parece-me estranho uma query com isso xD

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Os parâmetros são como as variáveis, defines os mesmos, e depois noutro local do código defines os valores...

Existem dois modos de representar os mesmos o ? como tu vistes e o outro modo @NomeParametro.

O ? é "directo", ou seja se definires na query cinco ?, ao definires os valores para eles tem de ser pela ordem corecta das colunas.

O @NomeParametro, dá para alterares a ordem pois tu atribuis os valores directamente ao parâmetro que te interessa, por vezes é melhor utilizar esta abordagem, para ter a certeza que não nos esquecemos de nenhum e estamos a atribuir o valor certo à coluna correcta.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TiagoCruz

Os parâmetros são como as variáveis, defines os mesmos, e depois noutro local do código defines os valores...

Existem dois modos de representar os mesmos o ? como tu vistes e o outro modo @NomeParametro.

O ? é "directo", ou seja se definires na query cinco ?, ao definires os valores para eles tem de ser pela ordem corecta das colunas.

O @NomeParametro, dá para alterares a ordem pois tu atribuis os valores directamente ao parâmetro que te interessa, por vezes é melhor utilizar esta abordagem, para ter a certeza que não nos esquecemos de nenhum e estamos a atribuir o valor certo à coluna correcta.

ahhhh... por acaso nao sabia... eu costumo utilizar sempre o @NomeParametro, para ter a certeza que ta tudo certo e por ordem... mas agora já entendi xD desculpem a noobice x^D

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Mica

@TiagoCruz

Isso é para passar parâmetros para a string...

@Mica

Isto esta confuso como tudo....

Isso de adicionar temporariamente depende de onde tens a bd e se quando compilas a aplicação, ele cria uma cópia ou utiliza o ficheiro original... Tal como te disse para verificares na minha primeira resposta.

Depois o INSERT não apaga nada, só insere, por isso essa história de apagar o anterior não está nada bem explicada.  :hmm:

Faz assim, abre a BD e vê quantos registos tens na BD.

Corre a aplicação através do IDE, e insere dois registos novos.

Fecha a aplicação e abre novamente a BD e verifica quantos registos lá tens.

Imaginemos 8 registos já na BD, e agora vou introduzir um novo, mas tenho de apagar o que me aparece já na listbox, para puder introduzir um novo produto, apago e introduzo um novo, mas o anterior já era desaparece... Pois para puder introduzir algum novo tenho de apagar os que esta, para puder escrever certo?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.