Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fernanda Janolla

[Resolvido] add dados no BD

Recommended Posts

Boa tarde pessoal, preciso de uma ajuda aqui.

Então estou fazendo um projeto para cadastro de estoque, exitem duas tabelas a de Vendas e a ItensVendas, estou usando um msflexgrid para esta última. Só que o botão gravar não está executando os comandos, segue abaixo os comandos, me ajudem a achar o erro!!

 

Private Sub cmdGravar_Click()
Call ConectaBd
Set rs = New ADODB.Recordset
rs.ActiveConnection = cn

i = 1
Do While i < msfItens.Rows - 1
    vCodigo = msfItens.TextMatrix(i, 0)
    vDesc = msfItens.TextMatrix(i, 1)
    vQtd = msfItens.TextMatrix(i, 2)
    vUnitario = msfItens.TextMatrix(i, 3)
    vTot = msfItens.TextMatrix(i, 4)
    vQtdAnteriorItem = msfItens.TextMatrix(i, 5)
    
rs.Open "Select * from Tab_ItensVendas where NumVenda=" & txtNumVenda.Text
    
    If rs.EOF Then
        Set rs = New ADODB.Recordset
        rs.ActiveConnection = cn
        rs.Open "INSERT INTO Tab_ItensVendas (NumVenda, CodProd, Desc, Qtd, Unitario, Tot) VALUES ('" & txtNumVenda.Text & "','" & vCodigo & "','" & vDesc & "','" & vQtd & "','" & vUnitario & "','" & vTot & "')"
            MsgBox "Venda cadastrada com sucesso"
    End If
        
    If Not rs.EOF Then
        MsgBox "Venda já cadastrada"
    End If
    
    i = i + 1
    rs.Close
    Loop
End Sub
Obrigado a todos!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim não esta executando ??

 

Pois é, eu clico no botão gravar e não faz nada nem alguma msg de erro aparece.

Agora eu não sei onde está o erro, se tem haver com o grid msm ou não.

 

Obrigado por me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque esta linha

rs.Open "INSERT INTO Tab_ItensVendas (NumVenda, CodProd, Desc, Qtd, Unitario, Tot) VALUES ('" & txtNumVenda.Text & "','" & vCodigo & "','" & vDesc & "','" & vQtd & "','" & vUnitario & "','" & vTot & "')"

Por esta:

cn.Execute "INSERT INTO Tab_ItensVendas (NumVenda, CodProd, Desc, Qtd, Unitario, Tot) VALUES ('" & txtNumVenda.Text & "','" & vCodigo & "','" & vDesc & "','" & vQtd & "','" & vUnitario & "','" & vTot & "')"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Scorpio, mudei a linha mas msm assim não resolveu, será q deve ser no próprio BD?

Tipo, está assim na Tab_CadVendas: NumVenda(chave primaria), Clientes, Date e ValorVenda.

Tab_ItensVenda: NumVenda(chave primaria), CodProd, Desc, Qtd, Unitario e Tot.

Elas tem a msm chave p., mas o ind de cada uma é diferente.

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernanda, os campos NumVenda e CodProd acredito que sejam numéricos né? Se sim, você não pode passar entre aspas simples os valores.

 

E qual das mensagens está exibindo? A que gravou com sucesso ou a dizendo que a venda já existe?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Cláudio, vou tentar fazer isso sim!!!

Mas está o seguinte erro: está gravando os dados só na Tab_CadVendas e da a msg de venda cadastrada com sucesso. Se eu coloco um item só no grid ele não da msg de arro algum, mas qd eu coloco mais de um item no grid além de não add nada na Tab_ItensVenda ele ainda da erro de sintaxe no INSERT INTO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpe Claudio, vou ser mais objetiva dessa vez.

Então qd eu add no grid apenas 1 item (CodProd, Desc, Qtd, Unitario e Tot), o botão gravar não funciona, agora quando eu coloco mais de um item no grid da o erro de sintaxe do INSERT INTO. E nenhum dos casos add os dados pra tabela.

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernanda.

 

 

 

Olá Fernanda, pelo que acompanhei dos posts, você está com 2 problemas:

P1- O código do botão gravar nao funciona qdo você insere somente 1 linha do MSFlexgrid (que chamaremos de Grid simplesmente).

 

P2- Independente do que ocorre no Grid, você está com problema de sintaxe errada na instrucao INSERT INTO, e devemos descobrir onde.

 

O 1º problema ocorre porque você colocou na instrucao do loop o valor inicial 1 para i (i=1) e logo a seguir voce define que o loop

vá de i(1) até msfItens.Rows - 1. Entao se voce tem 1 linha no Grid o valor mfsitens.Rows -1 vai dar zero e assim nao vai executar o loop.

Por que vai dar zero? Porque msfItens.Rows -1 quer dizer: o numero de linhas no Grid(obtido através do método msfItens.Rows) menos 1. Entao se você tem 1 linha - 1 vai dar zero, logo o loop nao vai adiante.

Quando você coloca mais de uma linha no Grid, ele executa o loop com sucesso, porem chegando na instrucao de insercao de linha dá um erro, que é o que nos falta resolver.

Vou te mostrar as alteracoes que tu deves fazer:

Private Sub cmdGravar_Click()
Call ConectaBd
Set rs = New ADODB.Recordset
rs.ActiveConnection = cn

'i = 1 (Retirado)
'Do While i < msfItens.Rows - 1 (Retirado)
For i = 0 to msfItens.Rows -1 '(Adicionado)

    vCodigo = msfItens.TextMatrix(i, 0)
    vDesc = msfItens.TextMatrix(i, 1)
    vQtd = msfItens.TextMatrix(i, 2)
    vUnitario = msfItens.TextMatrix(i, 3)
    vTot = msfItens.TextMatrix(i, 4)
    vQtdAnteriorItem = msfItens.TextMatrix(i, 5)
    
'rs.Open "Select * from Tab_ItensVendas where NumVenda=" & txtNumVenda.Text (Removido pois nao preicas trazer todos os campos qdo o intuito é so comparar 1 para ver se a venda existe)

rs.Open "Select NumVenda from Tab_ItensVendas where NumVenda=" & txtNumVenda.Text '(alterado)
    
    If rs.EOF Then
        Set rs = New ADODB.Recordset
        rs.ActiveConnection = cn
        cn.Execute "INSERT INTO Tab_ItensVendas (NumVenda, CodProd, Desc, Qtd, Unitario, Tot) 
VALUES (" & txtNumVenda.Text & "," & vCodigo & ",'" & vDesc & "'," & vQtd & "," & vUnitario & "," & vTot & ")"
            MsgBox "Venda cadastrada com sucesso"
    End If
        
    If Not rs.EOF Then
        MsgBox "Venda já cadastrada"
    End If
    
 '   i = i + 1 (retirado)
    rs.Close
Next '(Adicionado)
  '  Loop  (retirado)
End Sub

No problema 2 relacionado a Insert Into, pelo que vi acredito que se resumem apenas nos apostrofes que colocastes, pois campos

tipo Numero não aceitam os mesmos (como informado). Somente campos tipo Texto.

Caso nao resolvido ainda o problema da sintaxe poste aqui o erro de sintaxe da instrucao INSERT INTO e

todos os problemas serao resolvidos.

 

Abracos. Frank

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Frank, muito obrigado pela ajuda. Realmente o problema com o grid foi solucionado, resta apenas o erro de sintaxe, mas vou pesquisar como você falou.

Só estou com uma dúvida: Essas duas tabelas que tenho estão praticamente ligadas pelo "NumVenda", ou seja, o n° da venda vai ser o msm pra ambas. Agora no BD, eu posso colocar como elas sendo chave primária e única ou não? Pode ser talvez esse o erro?

 

Abraço, obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode colocar ou não, mas não é isso que está gerando seu erro. A não ser que esteja marcado para ser única e você está inserindo valor repetido.

 

Mas você tirou as aspas simples de todos os campos numéricos como eu disse? Se não tirou, a probabilidade do erro de sintaxe ser isso é grande. Eu havia citado dois lá em cima mas vi que tem mais campos numéricos, como o qtd e unitario por exemplo. Todos esses devem ser passados sem aspas simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Claudio, ah eu tirei sim as aspas, mas no unitario não precisa pq está como currency (eu acho), mas eu estava vendo tem alguns nomes q são reservados no Access e não podem ser colocados na tabela, tem um campo lblDesc, e no Access tem a palavra Desc como reservada. Eu vou fazer esse teste, qualquer novidade eu te aviso.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo currency deve ser passado sem aspas.

 

Integer, double, currency, bit. Todos esses sem aspas, e talvez mais alguns que não me lembre. Praticamente, entre aspas só passa se for texto.

 

E quanto aos nomes reservados, lblDesc é o local que está armazenando o valor a ser passado, e não o valor passado, então não tem nada a ver isso não. E mesmo assim, os nomes são reservados para que você não os use como nome de campo, não que você não possa passar isso como valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernanda, com certeza não é esse o erro! Mas voltando a tua mais nova questão, pelo que vi ate agora tu

tens duas tabelas para Transacionar(Iniciar a venda, Inserir os itens do pedido,e finalizar tua venda) a tua venda que

são:Tab_CadVendas e Tab_ItensVenda, correto? Tomando como resposta sim, tanto na tabela Tab_CadVendas quanto na

outra você pode inserir o campo Num_Venda. Mas faça dessa forma: Crie o campo Num_venda e defina os dois com as seguintes

caracteristicas: tipo de dados Numero;Inteiro longo. Na tabela Tab_CadVendas defina esse campo com PK(Chave Primária).

Já na tabela Tab_ItensVenda, defina esse campo como FK(Chave estrangeira) e podendo ser duplicado (duplicacao autorizada) no

caso do Access.

Por que fazer dessa forma? A resposta é que na Tabela Tab_CadVendas conterá os dados principais da venda (como o

Nº da venda, Nº N.F., Cod_cliente etc) e na outra (Tab_ItensVenda) ficarão como o próprio nome diz, somente os dados

referentes ao itens, dentre os quais o numero daquela venda ao qual aqueles itens foram pedidos. Por isso a autorizacao

de duplicação na segunda tabela citada.

Bom isso são questões relacionadas a camada de Regra de Negócios, fugindo um pouco do propósito do fórum, que é trocas de ideias

em VB6, creio eu. Cabe aqui uma critíca construtiva:Vi que tens inúmeras dúvidas em relações a questões de BD, instruções SQL e

afins. Sugiro que veja isso com muito carinho, pois vem mais tempestades por aí já te adianto, e prontifico-me a ajudar no que puder.

Até mesmo através de email etc. Nesse sistema que estas desenvolvendo, depois de solucionar isso, sugiro que veja matérias como:

-Relacionamentos; Chave primária;Transações em Nível de Sistema e em Nível de BD.

Ufa... É isso, abraços e até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite, obrigado pela ajuda e pela dica Frank.

Então o erro de INSERT INTO ja foi resolvido, mas apareceu outro erro '2147217904- Nenhum valor foi fornecido para um ou mais parâmetros necessários'.

 

Então eu testei cada campo da tabela, e o problema está justo nas variáveis q eu adicionei do flexgrid:

For i = 0 To msfItens.Rows - 1
    vCodigo = msfItens.TextMatrix(i, 0)
    vDescricao = msfItens.TextMatrix(i, 1)
    vQtd = msfItens.TextMatrix(i, 2)
    vUnitario = msfItens.TextMatrix(i, 3)
    vTot = msfItens.TextMatrix(i, 4)
    vQtdAnteriorItem = msfItens.TextMatrix(i, 5)

cn.Execute "INSERT INTO Tab_ItensVendas (NumVenda, CodProd, Descricao, Qtd, Unitario, Tot) VALUES (" & txtNumVenda.Text & "," & vCodigo & ",'" & vDescricao & "'," & vQtd & "," & vUnitario & "," & vTot & ")"
Eu testei cada campo, mas só o NumVenda está dando certo...

 

obrigado... abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

Verifique se os nomes dos campos que você colocou estão corretos (numvenda, codprod,descricao etc), pois geralmente esse erro

é gerado qdo nao existe um campo na tabela e o Access assume que seja um parâmetro que você está tentando passar p/ o BD.

Ex.: você tem um campo chamado DataNascimento e colocou na instrução Insert Into o nome DataNasc. Sabemos que está errado, mas ele assume que

isso é um parâmetro. Sugiro que veja com atenção bem tanto os nomes dos campos qto os das variáveis que esta passando os valores.

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente não era erro com o nome do campo e sim com chave primária e secundária da tabela.

 

Obrigado a todos pela ajuda!!!!

 

Esse problema já está resolvido, agora vou esperar o próximo rsrrs

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.