Array
(
)

ALTERAR E GRAVAR NO MESMO BOTAO

Rogerio Silva
   - 16 ago 2012

Olá pessoal. Me cadastrei hoje no site e ja estou postando um problema aqui :)
Sou programador em VB desde 1996 e atualmente estou migrando meus conhecimentos do VB6 para o VISUAL STUDIO 2012 RC.
Mudou muita coisa em relação ao VB6 e na forma como estou acostumado a programar. Meu dilema é:
Estou desenvolvendo uma nova versão do meu sistema de cobrança, que estou desenvolvendo em VS 2012 e eu quero que na tela de
cadastro de usuários do sistema, o operador ao preencher os dados do form e clicar no botão GRAVAR, o sistema verifique se o usuario existe.. se existe, ALTERA os dados na base e se não existe, GRAVA um novo registro. Isso eh faço de olhos fechados em VB6, já no VS2012 estou empacado e não vou pra frente.. alguem pode me dar um help?
A codificação está abaixo, em arquivo texto :
http://www.ntwsistemas.com/codigos.txt
Abraços !
Roger

Joel Rodrigues
   - 17 ago 2012

Você está fazendo, atualmente, a inserção independente de condição, certo? No seu código, há um trecho que você pode usar para verificar se o usuário existe:
#Código

Dim adptr As New OleDb.OleDbDataAdapter("select * from USUARIOS", cn2)
            adptr.Fill(ds, "USUARIO")
            dt = ds.Tables(0)

Bastaria adicionar uma condição para filtrar só o usuário em questão, após o Fill, se a tabela possuir linhas, é por que o usuário foi localizado, então você faria o update no lugar do insert.
#Código
If ds.Tables(0).RowCont > 0 Then
'faz update
Else
'faz insert


O insert você já sabe fazer, o update é a mesma coisa, mudando somente o comando SQL, é claro.

Boa sorte.

Heitor Sichin
   - 20 ago 2012

Rogério bom dia!!!
Você pode fazer igual ao exemplo do Joel, mais como você sabe existem várias maneiras de fazer a mesma coisa, então vou te dar outro exemplo, que é usando "MERGE" isso se você tiver usando o "SQL Server" como Banco de dados. Segue o link do exemplo de como fazer um MERGE:

http://www.linhadecodigo.com.br/artigo/1653/merge-com-sql-server-2008.aspx

Espero ter ajudado.
Tenha um bom dia!!!
Heitor.

Heitor Sichin
   - 20 ago 2012

Rogério bom dia!!!
Você pode fazer igual ao exemplo do Joel, mais como você sabe existem várias maneiras de fazer a mesma coisa, então vou te dar outro exemplo, que é usando "MERGE" isso se você tiver usando o "SQL Server" como Banco de dados. Segue o link do exemplo de como fazer um MERGE:

http://www.linhadecodigo.com.br/artigo/1653/merge-com-sql-server-2008.aspx

Espero ter ajudado.
Tenha um bom dia!!!
Heitor.

Rogerio Silva
   - 21 ago 2012

Olá Heitor, obrigado pelo post...
Minha base é Access... então, seu post não serve p/ o Access, não é?
De qualquer forma, obrigado mesmo.

Rogerio Silva
   - 21 ago 2012

Grande Joel.. obrigado pela ajuda.
Vou conferir o seu code no próximo fim de semana.. depois posto o resultado.
Abraço

Edson Melo
   - 21 ago 2012

ola rogerio

resolvi esta sua duvida de uma forma simples e facil.

criei uma variavel onde guardo a letra E e I , onde E e de Editar
e I e de Inserir. quando clico no botão Gravar ele verifica o valor contido na variavel
utiliza a opção certa.

no sistema coloco 2 botão Incluuir e Edita, estes dois botões alimentam a variavel, facil sismples
e funciona perfeitamente.

Edson Melo
   - 21 ago 2012

ola rogerio

resolvi esta sua duvida de uma forma simples e facil.

criei uma variavel onde guardo a letra E e I , onde E e de Editar
e I e de Inserir. quando clico no botão Gravar ele verifica o valor contido na variavel
utiliza a opção certa.

no sistema coloco 2 botão Incluuir e Edita, estes dois botões alimentam a variavel, facil sismples
e funciona perfeitamente.

Rogerio Silva
   - 03 set 2012

Pessoal, após as dicas acima, continuo empacado...
Alguma dica?

Rogerio Silva
   - 03 set 2012

Ola Edson...obrigado pela dica, mas eu quero fazer a rotina usando apenas 1 botão.
De qualquer forma, agradeço.
Abraço

Rogerio Silva
   - 03 set 2012

Joel.. vc teria como incluir esse exemplo que você postou dentro do meu código?
Você pode baixar o arquivo texto no meu link e inserir a codificação no local que você achar indicado e depois me envia o
arquivo texto no meu mail.. pode ser?

Meu mail: ntwsistemas@ntwsistemas.com
ABraço

Joel Rodrigues
   - 03 set 2012

Rogerio, pegar teu exemplo e adaptar vai dar mais trabalho he he. Vou fazer um exemplo semelhante e compartilho aqui com a galera.
Me dá só um tempinho aí.

Joel Rodrigues
   - 03 set 2012

Rogerio, como prometido fiz um pequeno exemplo que você pode tomar por base. Eis o link: http://pastebin.com/zR1rq8t0

Boa sorte.

Rogerio Silva
   - 03 set 2012

Grande Joel..
Obrigado pela força. Vou implementar o modelo do seu post nos meus codigos hoje a noite e amanhã lhe retorno se deu certo.
Abraxxxxxx

Valter Furtado
   - 06 set 2012

não consegue passar para o form o ID do usuário?? Quando for para editar, o form tera um id e quando for uma ação de inserir o form não terá este id.

Para teste, por que não tenta primeiro colocando este id do usuário dentro de um campo textbox, sendo assim, quando for inserir este textbox estará vazio, e quando for editar ele terá seu valor (id do usuário).

Daí seu método de salvar, irá verificar no objeto usuário se ele possui um id, e tendo um id ele edita ou insere quando não tiver.

Não sei se serve rs... mas faria isso, pelo menos em c#. Na verdade não usaria um textbox, talvez seria um hiddenfield ou id no formulário...

não vi como vc faz, pois aqui temos uma politica de segurança (firewall) que bloqueia tudo... rs

Leandro
   - 17 nov 2016

'Eu faço assim.

Private Sub salvar()
Dim com As OleDbCommand = Nothing
Dim queryResult As Integer
com = New OleDbCommand("SELECT COUNT(*) FROM tblProduto WHERE Codigo ='" & Me.CódigoTextBox.Text & "'", con)
queryResult = com.ExecuteScalar()
Try
If queryResult = 0 Then
cmd = New OleDbCommand("INSERT INTO tblProduto ( Codigo, Nome, Marca, Preco_de_Custo, Preco_de_Venda, Valor_de_Servico, Tipo, Situacao, Data, MargemLucro)" & Chr(13) & "VALUES(CodigoTextBox, NomeTextBox1, MarcaTextBox, Preço_de_CustoTextBox, Preço_de_VendaTextBox, Valor_de_ServiçoTextBox, TipoTextBox, SituaçãoTextBox, Data_da_InclusãoDateTimePicker, TextBox2)", con)
cmd.Parameters.AddWithValue("@Codigo", CódigoTextBox.Text)
cmd.Parameters.AddWithValue("@Nome", NomeTextBox1.Text)
cmd.Parameters.AddWithValue("@Marca", MarcaTextBox.Text)
cmd.Parameters.AddWithValue("@Preco_de_Custo", Preço_de_CustoTextBox.Text)
cmd.Parameters.AddWithValue("@Preco_de_Venda", Preço_de_VendaTextBox.Text)
cmd.Parameters.AddWithValue("@Valor_de_Servico", Valor_de_ServiçoTextBox.Text)
cmd.Parameters.AddWithValue("@Tipo", TipoTextBox.Text)
cmd.Parameters.AddWithValue("@Situacao", SituaçãoTextBox.Text)
cmd.Parameters.AddWithValue("@Data", Data_da_InclusãoDateTimePicker.Text)
cmd.Parameters.AddWithValue("@MargemLucro", TextBox2.Text)
cmd.ExecuteNonQuery()
MsgBox("Produto Cadastrado com Sucesso", vbInformation, "Atenção")
limpar()
Else
Dim atualizar As String
atualizar = (" UPDATE tblProduto SET Nome = '" & NomeTextBox1.Text & "',
Marca = '" & MarcaTextBox.Text & "',
Preco_de_Custo = '" & Preço_de_CustoTextBox.Text & "',
Preco_de_Venda = '" & Preço_de_VendaTextBox.Text & "',
Valor_de_Servico = '" & Valor_de_ServiçoTextBox.Text & "',
Tipo = '" & TipoTextBox.Text & "',
Situacao = '" & SituaçãoTextBox.Text & "',
Data = '" & Data_da_InclusãoDateTimePicker.Text & "',
MargemLucro = '" & TextBox2.Text & "' WHERE Codigo = '" & CódigoTextBox.Text & "'")
cmd = New OleDbCommand(atualizar, con)
cmd.ExecuteNonQuery()
MsgBox("Produto Atualizado com Sucesso", vbInformation, "Atenção")
limpar()
End If
Catch ex As Exception
MsgBox("erro", +ex.Message.ToString())

End Try
End Sub