SALVAR E APAGAR INFORMA?ÕES DA TABELA
Galera, estou com um probleminha muito simples, mas que não consigo resolver, criei um sistema de vendas, ele registra todos os produtos selecionados na tabela carrinho de compras, mas estou tendo dificuldade de jogar a tabela inteira na outra tabela chamada CompraFinalizada, estou usando os códigos direto no VB.NET, mas agora pretendo usar o código do SQL para fazer isso por mim e gravar na vareavel, alguem sabe como se faz esse procedimento, e assim que salvar da tabela carrinho de compras para o comprafinalizada, ele tem que apagar todos os registros da tabela Carrinho depois que salvou na CompraFinalizada ou se por acaso o rapaz só queria uma cotação e no final cancelou as compras, clicar em cancelar compras e apagar todos os registros contidos na tabela Carrinho de compras, alguem lembra desta função? Desculpa fazerem perder tempo com algo simples...
Não sei se entendi direito.
Mas para popular outra tabela com dados de uma já existente você pode fazer assim (diretamente no banco):
insert into tabela_destino
select * from tabela_origem
where num_pedido = 11111
Na sintax acima só funciona se a estrutura das duas tabelas forem iguais.
Depois disso faça assim para apagar os dados da primeira tabela:
delet from tabela_origem
where num_pedido = 11111
Se não for bem isso que tenha dúvida, então retorne.
Mas para popular outra tabela com dados de uma já existente você pode fazer assim (diretamente no banco):
insert into tabela_destino
select * from tabela_origem
where num_pedido = 11111
Na sintax acima só funciona se a estrutura das duas tabelas forem iguais.
Depois disso faça assim para apagar os dados da primeira tabela:
delet from tabela_origem
where num_pedido = 11111
Se não for bem isso que tenha dúvida, então retorne.
Vou tentar criar uma lógica e aplicar isso... Obrigado!
Não entendi muito bem o que você quer!
Primeiro você quer fazer isso via código da aplicação ou via banco(procedure) mesmo?
[txt-color=#e80000]via código aplicação vb.net: [/txt-color]
Inicialmente para todos os casos você deve ter o código (handle ou ID) ou seja código chave do pedido em uma variável.
Ao clicar no botão cancelar
você vai usar uma query DELETE que será igual o que o nosso amigo DUMMIES disse:
Ao clicar no botão confirmar
você vai usar uma query SELECT e uma query INSERT
Inicialmente você gravará uma consulta em um DataTable ou DataSet ou ViewState (prefiro o DataTable)
[txt-color=#e80000]via código SQL Server procedure: [/txt-color]
Essa procedure tem 3 parametros
@TIPO que receberá o tipo de execução
1=Cancelar(quando clicar no botão cancelar)
2=Confirmar(quando clicar no botão confirmar)
@COD_PEDIDO que receberá o código do pedido
@RESULTADO que retornará se a procedure deu certo ou não
0=Erro
1=Tudo ocorreu como esperado
Lembro que fiz tudo correndo e deve ser adaptado ao seu caso! Só estou querendo ajudar.
Outra coisa deve executar a procedure na sua aplicação pesquise por executar procedure vb.net que encontrara muitas coisas
Qualquer duvida poste ai
Primeiro você quer fazer isso via código da aplicação ou via banco(procedure) mesmo?
[txt-color=#e80000]via código aplicação vb.net: [/txt-color]
Inicialmente para todos os casos você deve ter o código (handle ou ID) ou seja código chave do pedido em uma variável.
Ao clicar no botão cancelar
você vai usar uma query DELETE que será igual o que o nosso amigo DUMMIES disse:
DELETE FROM SuaTabela WHERE ID_PEDIDO = Código_da_variavel_comentada_acima
Ao clicar no botão confirmar
você vai usar uma query SELECT e uma query INSERT
Inicialmente você gravará uma consulta em um DataTable ou DataSet ou ViewState (prefiro o DataTable)
SELECT * FROM SuaTabela WHERE ID_PEDIDO = Código_da_variavel_comentada_acima
[ô]Faça a estrutura de retorno no seu gosto, porém terá que realizar uma gravação na tabela de compras definitiva
[ô]Suponho que retornou um DataTable
For Each rw As DataRow in dtResultado.Rows
Dim qSQL As String = [Ô]INSERT INTO SuaTabelaDefinitiva VALUES ([Ô] & rw([Ô]Campo1) & [Ô],[Ô] & rw([Ô]Campo2[Ô]) & [Ô])[Ô]
[ô]Aqui você chama a função para gravação da query acima
Next
[txt-color=#e80000]via código SQL Server procedure: [/txt-color]
Essa procedure tem 3 parametros
@TIPO que receberá o tipo de execução
1=Cancelar(quando clicar no botão cancelar)
2=Confirmar(quando clicar no botão confirmar)
@COD_PEDIDO que receberá o código do pedido
@RESULTADO que retornará se a procedure deu certo ou não
0=Erro
1=Tudo ocorreu como esperado
CREATE PROCEDURE FINALIZAVENDA (
@TIPO CHAR(1), -- 1=Cancelar / 2=Confirmar
@COD_PEDIDO INTEGER,
@RESULTADO bit OUTPUT -- 0=Erro / 1=TudoCerto
)
AS BEGIN TRY
BEGIN TRANSACTION
--Campos das Tabelas (No caso as tabelas devem ser identicas eu creio)
DECLARE @CAMPO1 VARCHAR(100)
DECLARE @CAMPO2 INTEGER
SET @RESULTADO = 1
IF @TIPO = 1
BEGIN
--Somente Exclui os itens
BEGIN TRY
DELETE FROM SuaTabela WHERE ID_PEDIDO = @COD_PEDIDO
END TRY
BEGIN CATCH
SET @RESULTADO = 0
END CATCH
END
ELSE
BEGIN
BEGIN TRY
--Cursor para percorrer as linhas da tabela
DECLARE C_TABELA1 CURSOR FOR SELECT Campo1, Campo2 FROM SuaTabela WHERE ID_PEDIDO = @COD_PEDIDO
OPEN C_TABELA1;
FETCH NEXT FROM C_TABELA1
INTO @CAMPO1, @CAMPO2
WHILE @@FETCH_STATUS = 0
BEGIN
--Lembre-se que não estou direcionando os campos, pois creio que as tabelas estão identicas
--Caso os campos esteja fora de ordem você pode passar os campos no INSERT também
--INSERT INTO SuaTabelaDefinitiva (CAMPO1,CAMPO2) VALUES (@CAMPO1,@CAMPO2)
INSERT INTO SuaTabelaDefinitiva VALUES (@CAMPO1,@CAMPO2)
FETCH NEXT FROM C_TABELA1
INTO @CAMPO1, @CAMPO2
END
CLOSE C_TABELA1
DEALLOCATE C_TABELA1
END TRY
BEGIN CATCH
DEALLOCATE C_TABELA1
SET @RESULTADO = 0
END CATCH
--Exclui os itens após gravação na tabela
BEGIN TRY
--Somente eclui os itens caso não tenha ocorrido erro no código acima
IF @RESULTADO = 1
DELETE FROM SuaTabela WHERE ID_PEDIDO = @COD_PEDIDO
END TRY
BEGIN CATCH
SET @RESULTADO = 0
END CATCH
END
IF @RESULTADO = 0
BEGIN
ROLLBACK
END
ELSE
BGIN
COMMIT
END
END TRY
BEGIN CATCH
ROLLBACK
SET @RESULTADO = 0
END CATCH
Lembro que fiz tudo correndo e deve ser adaptado ao seu caso! Só estou querendo ajudar.
Outra coisa deve executar a procedure na sua aplicação pesquise por executar procedure vb.net que encontrara muitas coisas
Qualquer duvida poste ai
A Dica do DUMMIES, funciona.
Mas não aconselho esse tipo de procedimento, se vc utilizar transações até que pode ser, mas o correto mesmo, e mais simples, é vc criar um campo de Status, e depois da venda finalizada ou cancelada definir esse Status.
Exemplo: 0=iniciada, 1=Finalizada, 2= cancelada
Mas não aconselho esse tipo de procedimento, se vc utilizar transações até que pode ser, mas o correto mesmo, e mais simples, é vc criar um campo de Status, e depois da venda finalizada ou cancelada definir esse Status.
Exemplo: 0=iniciada, 1=Finalizada, 2= cancelada
vou estar usando os métodos, tanto no Script do SQL Server como também na aplicação do VB.NET, em um tópico anterior, eu tinha a duvida de passar item por item de uma tabela para a outra, consegui resolver, mas tentei fazer o mesmo carregando a tabela inteira, desta vez apresentou um erro. Vou tentar aplicar as logicas aplicadas aqui. Tanto no Script tanto no VB.Net. Eu postei no tópico SQL pq uso as mesmas funções no sql no próprio vb.net. Para mim fica mais fácil relacionar erros de conexão ou busca.
Sempre tive dor de cabeça com PROCEDURES, mas vou aplicar este script ao sistema... Obrigado!
Vou passar um método pra você usar procedure que não vai ter mais erros!
Adapte o método ao seu gosto é basicamente uma ideia:
Para Utilizar a função você vai fazer o seguinte
No Exemplo que eu passei você vai ter 3 parâmetros
Adapte o método ao seu gosto é basicamente uma ideia:
Public Sub AbrirConexao()
Try
If _conn.State = ConnectionState.Open Then
_conn.Close()
End If
_conn.Open()
Catch ex As Exception
[ô]Coloque sua mensagem de erro aqui
End Try
End Sub
Public Function ExecutarComando(ByVal querySQL As String, ByVal cmd As SqlCommand) As Integer
Dim _linhasAfetadas As Integer
Try
AbrirConexao()
cmd.Connection = _conn
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = querySQL
_linhasAfetadas = cmd.ExecuteNonQuery
_conn.Close()
Catch ex As Exception
If _conn.State = ConnectionState.Open Then _conn.Close()
_linhasAfetadas = -1
End Try
End Function
Para Utilizar a função você vai fazer o seguinte
No Exemplo que eu passei você vai ter 3 parâmetros
Dim _cmd As New SqlCommand
_cmd.Parameters.Add([Ô]@TIPO[Ô], SqlDbType.Char).Value = 1 [ô]Para Cancelar
_cmd.Parameters.Add([Ô]@COD_PEDIDO[Ô], SqlDbType.Int).Value = 123 [ô]Código do Pedido
_cmd.Parameters.Add([Ô]@RESULTADO[Ô], SqlDbType.Bit).Direction = ParameterDirection.Output
Dim result As Integer = ExecutarComando([Ô]NOME_SUA_PROCEDURE_AQUI[Ô], _cmd)
If result = -1 then
MessageBox.Show([Ô]Erro[Ô])
Else
MessageBox.Show([Ô]Ok[Ô])
[ô]Lembre-se pode ser que retorne 0(zero) e se retornar zero também deu erro para o seu caso
End If
Tópico encerrado , respostas não são mais permitidas