DUVIDA - ROTINA UPDATE
Olá Prezados(a),
estou quebrando minha cabeça para criar uma rotina de update para um form que contem o seguinte :
CODIGO = Cod_venda
VENDEDOR = Text_vendavendedor
CLIENTE = Text_vendacliente
PRODUTO = Text_produto1
Text_produto2
Text_produto3
Text_produto4
QUANTIDADE ENTREGUE = Text_QTAE1
Text_QTAE2
Text_QTAE3
Text_QTAE4
e estes dados são gravados na tabela [Ô]vendasprodutos[Ô] que contem as seguintes celulas:
cod_venda
vendedor
cliente
produto
quantidade_entregue
Por favor poderiam me ajudar ?
estou quebrando minha cabeça para criar uma rotina de update para um form que contem o seguinte :
CODIGO = Cod_venda
VENDEDOR = Text_vendavendedor
CLIENTE = Text_vendacliente
PRODUTO = Text_produto1
Text_produto2
Text_produto3
Text_produto4
QUANTIDADE ENTREGUE = Text_QTAE1
Text_QTAE2
Text_QTAE3
Text_QTAE4
e estes dados são gravados na tabela [Ô]vendasprodutos[Ô] que contem as seguintes celulas:
cod_venda
vendedor
cliente
produto
quantidade_entregue
Por favor poderiam me ajudar ?
Mesmo ?
Veja, você não diz qual é o mecanismo de dados, quais são os tipos de dados de cada campo da tabela, quais os limites/tamanhos desses campos quando do tipo texto, se está sando DAO ou ADO ou RDO ou nada mais?
Hehehe, complica que eu gosto!
E ao que parece, você cometeu mais algumas [Ô]gafes[Ô] ao criar seu banco de dados.
Repare que seu cliente só poderá comprar até 4 itens á cada [Ô]venda[Ô], usando o mesmo [Ô]código de venda[Ô] para os três registros.
Além de ser limitado, isso indica que não há um campo de identidade de registro em sua tabela, o que é bastante inadequado.
O correto seria manter uma tabela para as notas/pedidos e outra, vinculada, só para os Ãtens, quantidades e valores, e ambas com PrimaryKey e preferencialmente auto-numeração, ok?
Mas vamos lá, ainda é possÃvel (inadequado, mas á tÃtulo de aprendizado, possÃvel) fazer, então, mãos á obra:
Supondo que [Ô]vendedor[Ô], [Ô]cliente[Ô] e [Ô]produto[Ô] sejam do tipo Texto, até 255 caracteres, que cod_venda seja do Inteiro, e que quantidade_entregue seja do tipo Float ou Numeric, e ainda, que você esteja usando a ADO, com uma base SQL Server, você fará uma instrução mais ou menos como a seguinte:
Observe que o código acima é apenas uma referência, um exercÃcio mental, pois a primeira parte da tarefa, que é a elaboração da base de dados, está (bastante) incompleta.
Eu faria, apenas para iniciar um exercÃcio simples de criação da base de dados, baseado na sua proposta, algo como:
Com isso, no mÃnimo:
1. - O cliente poderá efetuar cada compra com vários produtos;
2. - Será possÃvel atualizar cada produto individualmente, sem o excluir da base de dados;
3. - Não será permitida a inclusão de um mesmo produto mais do que apenas uma vêz por compra;
4. - Será mais fácil gerar relatórios mais tarde.
é claro, essa estrutura acima ainda é [bastante] insuficiente para um uso menos [Ô]hobista[Ô], mas já dá para brincar um pouco.
Dê uma analisada nas tabelas resultantes para conferir / entender as diferências.
Valew!!
Veja, você não diz qual é o mecanismo de dados, quais são os tipos de dados de cada campo da tabela, quais os limites/tamanhos desses campos quando do tipo texto, se está sando DAO ou ADO ou RDO ou nada mais?
Hehehe, complica que eu gosto!
E ao que parece, você cometeu mais algumas [Ô]gafes[Ô] ao criar seu banco de dados.
Repare que seu cliente só poderá comprar até 4 itens á cada [Ô]venda[Ô], usando o mesmo [Ô]código de venda[Ô] para os três registros.
Além de ser limitado, isso indica que não há um campo de identidade de registro em sua tabela, o que é bastante inadequado.
O correto seria manter uma tabela para as notas/pedidos e outra, vinculada, só para os Ãtens, quantidades e valores, e ambas com PrimaryKey e preferencialmente auto-numeração, ok?
Mas vamos lá, ainda é possÃvel (inadequado, mas á tÃtulo de aprendizado, possÃvel) fazer, então, mãos á obra:
Supondo que [Ô]vendedor[Ô], [Ô]cliente[Ô] e [Ô]produto[Ô] sejam do tipo Texto, até 255 caracteres, que cod_venda seja do Inteiro, e que quantidade_entregue seja do tipo Float ou Numeric, e ainda, que você esteja usando a ADO, com uma base SQL Server, você fará uma instrução mais ou menos como a seguinte:
...
Dim oConn As ADODB.Connection
Set oConn = New [ô]... ... ...
oConn.Open
...
[ô] Dimensionamento da instrução SQL
Dim minhaInstrução As String
[ô]Passo 1: Apagar os registros que tenham o código de venda especificado, pois não é possÃvel atualizar apenas.
minhaInstrução = [Ô]DELETE FROM [vendasprodutos] WHERE (cod_venda=[Ô] & & [Ô]);[Ô]
oConn.Execute minhaInstrução
[ô]Passo 2: Inserir um registro com o código de vendas especificado, para o produto 1:
minhaInstrução = [Ô]INSERT INTO [vendasprodutos] (cod_venda,vendedor,cliente,produto,quantidade_entregue) SELECT [ô][Ô] & Cod_venda.Text & [Ô][ô] , [ô][Ô] & Text_vendavendedor.Text & [Ô][ô], [ô][Ô] & Text_vendacliente & [Ô][ô], [ô][Ô] & Text_produto1.Text & [Ô][ô], [Ô] & Text_QTAE1.Text & [Ô];[Ô]
oConn.Execute minhaInstrução
[ô]Passo 3: Inserir um registro com o código de vendas especificado, para o produto 2:
minhaInstrução = [Ô]INSERT INTO [vendasprodutos] (cod_venda,vendedor,cliente,produto,quantidade_entregue) SELECT [ô][Ô] & Cod_venda.Text & [Ô][ô] , [ô][Ô] & Text_vendavendedor.Text & [Ô][ô], [ô][Ô] & Text_vendacliente & [Ô][ô], [ô][Ô] & Text_produto2.Text & [Ô][ô], [Ô] & Text_QTAE2.Text & [Ô];[Ô]
oConn.Execute minhaInstrução
[ô]Passo 4: Inserir um registro com o código de vendas especificado, para o produto 3:
minhaInstrução = [Ô]INSERT INTO [vendasprodutos] (cod_venda,vendedor,cliente,produto,quantidade_entregue) SELECT [ô][Ô] & Cod_venda.Text & [Ô][ô] , [ô][Ô] & Text_vendavendedor.Text & [Ô][ô], [ô][Ô] & Text_vendacliente & [Ô][ô], [ô][Ô] & Text_produto3.Text & [Ô][ô], [Ô] & Text_QTAE3.Text & [Ô];[Ô]
oConn.Execute minhaInstrução
[ô]Passo 5: Inserir um registro com o código de vendas especificado, para o produto 4:
minhaInstrução = [Ô]INSERT INTO [vendasprodutos] (cod_venda,vendedor,cliente,produto,quantidade_entregue) SELECT [ô][Ô] & Cod_venda.Text & [Ô][ô] , [ô][Ô] & Text_vendavendedor.Text & [Ô][ô], [ô][Ô] & Text_vendacliente & [Ô][ô], [ô][Ô] & Text_produto4.Text & [Ô][ô], [Ô] & Text_QTAE4.Text & [Ô];[Ô]
oConn.Execute minhaInstrução
[ô]Operação finalizada.
MsgBox [Ô]Gravação efetuada com sucesso![Ô]
...
Observe que o código acima é apenas uma referência, um exercÃcio mental, pois a primeira parte da tarefa, que é a elaboração da base de dados, está (bastante) incompleta.
Eu faria, apenas para iniciar um exercÃcio simples de criação da base de dados, baseado na sua proposta, algo como:
USE [meuCatalogo] -- em lugar de [ô]meuCatalogo[ô], use o nome adequado.
GO
CREATE TABLE [Vendas] (cod_venda INT IDENTITY(1,1) NOT NULL, vendedor VARCHAR(255) NOT NULL DEFAULT [ô]-[ô], cliente VARCHAR(255) NOT NULL DEFAULT [ô]-[ô], CONSTRAINT pk_Vendas PRIMARY KEY(cod_venda))
GO
CREATE INDEX ix_VendasVendedor ON [Vendas] (vendedor)
GO
CREATE INDEX ix_VendasCliente ON [Vendas] (cliente)
GO
CREATE TABLE [VendasProdutos] (cod_item INT IDENTITY(1,1) NOT NULL, cod_venda INT NOT NULL DEFAULT 1,produto VARCHAR(255) NOT NULL DEFAULT [ô]-[ô], quantidade FLOAT NOT NULL DEFAULT 1, CONSTRAINT pk_VendasProdutos PRIMARY KEY(cod_item), CONSTRAINT fk_ProdutoDaVenda FOREIGN KEY(cod_venda) REFERENCES [Vendas](cod_venda) ON UPDATE NO ACTION ON DELETE CASCADE);
GO
CREATE UNIQUE INDEX uk_ProdutosProduto ON [VendasProdutos] (cod_venda,produto)
GO
Com isso, no mÃnimo:
1. - O cliente poderá efetuar cada compra com vários produtos;
2. - Será possÃvel atualizar cada produto individualmente, sem o excluir da base de dados;
3. - Não será permitida a inclusão de um mesmo produto mais do que apenas uma vêz por compra;
4. - Será mais fácil gerar relatórios mais tarde.
é claro, essa estrutura acima ainda é [bastante] insuficiente para um uso menos [Ô]hobista[Ô], mas já dá para brincar um pouco.
Dê uma analisada nas tabelas resultantes para conferir / entender as diferências.
Valew!!
ave jesus é mesmo é que me formei no fundão .. esqueço de certas coisas mas é errando que se busca solução e ouvindo conselhos alheios que encontramos certas respostas !
então fiz em vba no excel !
realmente a quantidade de produtos é limitada.
a minha ideia era criar um botão com uma rotina update que alterra-se apenas lá na tabela vendasprodutos - a area de quantidade_entregue
para criar um campo update eu usei a rotina
BANCO.Execute [Ô]update [vendasprodutos$] set quantidade_entregue = [ô][Ô] & Me.Text_QTAE1 & [Ô][ô] where COD_VENDA = [ô][Ô] & Me.Text_codvenda & [Ô][ô][Ô]
porem, como sou muito do extremo iniciante em vba , não sei como continuar para por os outros [Ô]text_qtae2..3..4. e assim sucessivamente !
então fiz em vba no excel !
realmente a quantidade de produtos é limitada.
a minha ideia era criar um botão com uma rotina update que alterra-se apenas lá na tabela vendasprodutos - a area de quantidade_entregue
para criar um campo update eu usei a rotina
BANCO.Execute [Ô]update [vendasprodutos$] set quantidade_entregue = [ô][Ô] & Me.Text_QTAE1 & [Ô][ô] where COD_VENDA = [ô][Ô] & Me.Text_codvenda & [Ô][ô][Ô]
porem, como sou muito do extremo iniciante em vba , não sei como continuar para por os outros [Ô]text_qtae2..3..4. e assim sucessivamente !
Excel como base de dados.
Já melhorou bastante, hehehehe!
Agora cabe inclusive que eu peça desculpas, pois se eu houvesse me atentado mais detalhadamente, teria visto o têrmo [Ô]célula[Ô] bem colocado no texto.
Bom, agora mais bem colocado, e olhando por essa ótica, acredito que neste caso o que falta é um filtro na instrução SQL, que seria o filtro do produto. Desta forma, o [Ô]UPDATE[Ô] iria afetar a quantidade apenas da linha correta. E novamente, mediante 3 instruções [Ô]Execute[Ô] seguidas, variando-se apenas os TextBoxes. Algo como
Ainda assim, estou bastante curioso com o desfecho.
Pretendo voltar ao seu tópico nesta segunda-feira, para acompanhar o andamento, para tentar ajudar no que der se não houver solucionado ainda, e já estou imaginando aqui, quem sabe, se não vou aprender mais uma novidade.
Valew!!!
Já melhorou bastante, hehehehe!
Agora cabe inclusive que eu peça desculpas, pois se eu houvesse me atentado mais detalhadamente, teria visto o têrmo [Ô]célula[Ô] bem colocado no texto.
Bom, agora mais bem colocado, e olhando por essa ótica, acredito que neste caso o que falta é um filtro na instrução SQL, que seria o filtro do produto. Desta forma, o [Ô]UPDATE[Ô] iria afetar a quantidade apenas da linha correta. E novamente, mediante 3 instruções [Ô]Execute[Ô] seguidas, variando-se apenas os TextBoxes. Algo como
BANCO.Execute [Ô]update [vendasprodutos$] set quantidade_entregue = [ô][Ô] & Me.Text_QTAE1 & [Ô][ô] where COD_VENDA = [ô][Ô] & Me.Text_codvenda & [Ô][ô] and produto=[ô][Ô] & Text_produto1 & [Ô][ô][Ô]
BANCO.Execute [Ô]update [vendasprodutos$] set quantidade_entregue = [ô][Ô] & Me.Text_QTAE2 & [Ô][ô] where COD_VENDA = [ô][Ô] & Me.Text_codvenda & [Ô][ô] and produto=[ô][Ô] & Text_produto2 & [Ô][ô][Ô]
BANCO.Execute [Ô]update [vendasprodutos$] set quantidade_entregue = [ô][Ô] & Me.Text_QTAE3 & [Ô][ô] where COD_VENDA = [ô][Ô] & Me.Text_codvenda & [Ô][ô] and produto=[ô][Ô] & Text_produto3 & [Ô][ô][Ô]
Ainda assim, estou bastante curioso com o desfecho.
Pretendo voltar ao seu tópico nesta segunda-feira, para acompanhar o andamento, para tentar ajudar no que der se não houver solucionado ainda, e já estou imaginando aqui, quem sabe, se não vou aprender mais uma novidade.
Valew!!!
caramba acordei pensando nisto que estava faltando um filtro apontando para algo que seria o produto só nao sabia como elabora
porem, Obrigado professor funcionou perfeitamente !
Realmente eu preciso muito aprender a cada dia mais uma vez me falaram que o access é sensacional porem, melhor lugar ara se aprender programação é no excel.
estou com uma outra duvida que é como criar uma api para o botão maximinizar e minimizar... já que o Visual Basic apresenta apenas o botão [Ô]x[Ô] de fechar
mas isto é em outro tópico para não bagunçar !
Muito obrigado professor, e obrigado a todos que leram. mas, não puderam responder !
eu estava pensando em usar também o
Cells(linha, 2) = ....
Cells(linha, 3) = ....
Cells(linha, 4) = ....
porem o filtro de instrução SQL apresentou uma melhor performance !
porem, Obrigado professor funcionou perfeitamente !
Realmente eu preciso muito aprender a cada dia mais uma vez me falaram que o access é sensacional porem, melhor lugar ara se aprender programação é no excel.
estou com uma outra duvida que é como criar uma api para o botão maximinizar e minimizar... já que o Visual Basic apresenta apenas o botão [Ô]x[Ô] de fechar
mas isto é em outro tópico para não bagunçar !
Muito obrigado professor, e obrigado a todos que leram. mas, não puderam responder !
eu estava pensando em usar também o
Cells(linha, 2) = ....
Cells(linha, 3) = ....
Cells(linha, 4) = ....
porem o filtro de instrução SQL apresentou uma melhor performance !
Tópico encerrado , respostas não são mais permitidas