MSHFLEXGRID E TABELA ACCESS
boa noite
nao estou conseguindo resolver esse problema.
abra uma Ordem de Serviço de um cliente através de um form, que entre muitos dados, um deles é jogar as peças utilizadas num conserto num MshflexGrid. Até ai tudo bem, funciona muito bem com esta sub:
Private Sub CmdIncluirPec_Click()
[ô]inclui dados no primeiro grid
[ô]chr$(9) é pra mudar de celula com enter
GrdIncluiPec.AddItem TxtCodPeca.Text + Chr$(9) + TxtNomePeca.Text + Chr$(9) + _
TxtQuant.Text + Chr$(9) + TxtValor.Text + Chr$(9) + TxtTotLinha.Text
TxtCodPeca.SetFocus
TxtCodPeca.Text = [Ô][Ô]
TxtNomePeca.Text = [Ô][Ô]
TxtQuant.Text = [Ô][Ô]
TxtValor.Text = [Ô][Ô]
TxtTotLinha.Text = [Ô][Ô]
End Sub
acontece que um conserto usa diversas peças e com isso a flex vai ter muitas linhas e ai começa o problema retornando erro sinalizando no execute aqui:
Private Sub IncluirDados()
Dim vConfMsg As Integer
Dim vErro As Boolean
Dim vOK As Integer
[ô]inicializa as variaveis auxiliares
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
[ô]verifica os dados digitados
If TxtDataInicioServico.Text = Empty Then
MsgBox [Ô]O campo Data Entrada não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If TxtHoraInicioServico.Text = Empty Then
MsgBox [Ô]O campo Hora Entrada não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
[ô]Se acontece um erro sai da sub sem gravar
If vErro Then Exit Sub
With cnnComando
.ActiveConnection = cnnCetecInfServiços
.CommandType = adCmdText
[ô]cria o modulo sql
.CommandText = [Ô]INSERT INTO Oficina1[Ô] & _
[Ô](Data_Inicio_Servico, Hora_Inicio_Servico, Numero_OS, Nome, Produto, Prog, Reg, MaqAcid, GrAlim, ConjTecl, MaqTranc, PlBsEletr, CjEntr, GrDis, GrImpr, CjEsc, Pint, RevGer, Mon, CjLeit, Lubr, CjTab, CabImpr, Desm, AlimEscr, LavTratFer, RevGrMot, Lacr, RetCilCar, RevEletr, Solda, Outros, CodPeca, NomePeca, Quant, Valor, TotLinha, Obs, Data_Term_Serv, Hora_Term_Serv) Values([ô][Ô] & _
TxtDataInicioServico.Text & [Ô][ô], [ô][Ô] & TxtHoraInicioServico.Text & [Ô][ô], [Ô] & _
TxtNumOS.Text & [Ô], [ô][Ô] & TxtNomeCliente.Text & [Ô][ô], [ô][Ô] & TxtProduto.Text & [Ô][ô], [Ô] & _
ChkProg.Value & [Ô], [Ô] & ChkReg.Value & [Ô], [Ô] & ChkMaqAcid.Value & [Ô], [Ô] & ChkGrAlim.Value & [Ô], [Ô] & _
ChkConjTecl.Value & [Ô], [Ô] & ChkMaqTranc.Value & [Ô], [Ô] & ChkPlBsEletr.Value & [Ô], [Ô] & _
ChkCjEntr.Value & [Ô], [Ô] & ChkGrDis.Value & [Ô], [Ô] & ChkGrImpr.Value & [Ô], [Ô] & ChkCjEsc.Value & [Ô], [Ô] & _
ChkPint.Value & [Ô], [Ô] & ChkRevGer.Value & [Ô], [Ô] & ChkMon.Value & [Ô], [Ô] & ChkCjLeit.Value & [Ô], [Ô] & _
ChkLubr.Value & [Ô], [Ô] & ChkCjTab.Value & [Ô], [Ô] & ChkCabImpr.Value & [Ô], [Ô] & ChkDesm.Value & [Ô], [Ô] & _
ChkAlimEscr.Value & [Ô], [Ô] & ChkLavTratFer.Value & [Ô], [Ô] & ChkRevGrMot.Value & [Ô], [Ô] & _
ChkLacr.Value & [Ô], [Ô] & ChkRetCilCar.Value & [Ô], [Ô] & ChkRevEletr.Value & [Ô], [Ô] & _
ChkSolda.Value & [Ô], [Ô] & ChkOutros.Value & [Ô], [ô][Ô] & _
TxtCodPeca.Text & [Ô][ô], [ô][Ô] & TxtNomePeca.Text & [Ô][ô], [Ô] & TxtQuant.Text & [Ô], [Ô] & TxtValor.Text & [Ô], [Ô] & _
TxtTotLinha.Text & [Ô], [ô][Ô] & Txtobs.Text & [Ô][ô], [ô][Ô] & _
TxtDataTermServ.Text & [Ô][ô], [ô][Ô] & TxtHoraTermServ.Text & [Ô][ô]);[Ô]
.Execute
End With
MsgBox [Ô]Inclusão concluida com sucesso.[Ô], vbInformation + vbOKOnly + vbApplicationModal, [Ô]OK[Ô]
LimparTela
TxtNumOS.SetFocus
Saida:
Set cnnComando = Nothing
Exit Sub
errInclusao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve erro na inclusão dos dados na tabela.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
informo que os dados de txtTotLinha surge aqui
Private Sub TxtTotLinha_GotFocus()
[ô]Calcula a celula quantidade vezes valor peça e transf. em reais
TxtTotLinha.Text = Format(TxtValor.Text * TxtQuant.Text, [Ô]0.00[Ô])
End Sub
erro ocorre porque as pecas utilizadas vao pro flex que pode ter muitas linhas e nao sei como fazer o codigo pra resolver isso
o access tem que entender que esse cliente usou mais de uma peça no conserto
nao sei se me fiz entender
nao estou conseguindo resolver esse problema.
abra uma Ordem de Serviço de um cliente através de um form, que entre muitos dados, um deles é jogar as peças utilizadas num conserto num MshflexGrid. Até ai tudo bem, funciona muito bem com esta sub:
Private Sub CmdIncluirPec_Click()
[ô]inclui dados no primeiro grid
[ô]chr$(9) é pra mudar de celula com enter
GrdIncluiPec.AddItem TxtCodPeca.Text + Chr$(9) + TxtNomePeca.Text + Chr$(9) + _
TxtQuant.Text + Chr$(9) + TxtValor.Text + Chr$(9) + TxtTotLinha.Text
TxtCodPeca.SetFocus
TxtCodPeca.Text = [Ô][Ô]
TxtNomePeca.Text = [Ô][Ô]
TxtQuant.Text = [Ô][Ô]
TxtValor.Text = [Ô][Ô]
TxtTotLinha.Text = [Ô][Ô]
End Sub
acontece que um conserto usa diversas peças e com isso a flex vai ter muitas linhas e ai começa o problema retornando erro sinalizando no execute aqui:
Private Sub IncluirDados()
Dim vConfMsg As Integer
Dim vErro As Boolean
Dim vOK As Integer
[ô]inicializa as variaveis auxiliares
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
[ô]verifica os dados digitados
If TxtDataInicioServico.Text = Empty Then
MsgBox [Ô]O campo Data Entrada não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If TxtHoraInicioServico.Text = Empty Then
MsgBox [Ô]O campo Hora Entrada não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
[ô]Se acontece um erro sai da sub sem gravar
If vErro Then Exit Sub
With cnnComando
.ActiveConnection = cnnCetecInfServiços
.CommandType = adCmdText
[ô]cria o modulo sql
.CommandText = [Ô]INSERT INTO Oficina1[Ô] & _
[Ô](Data_Inicio_Servico, Hora_Inicio_Servico, Numero_OS, Nome, Produto, Prog, Reg, MaqAcid, GrAlim, ConjTecl, MaqTranc, PlBsEletr, CjEntr, GrDis, GrImpr, CjEsc, Pint, RevGer, Mon, CjLeit, Lubr, CjTab, CabImpr, Desm, AlimEscr, LavTratFer, RevGrMot, Lacr, RetCilCar, RevEletr, Solda, Outros, CodPeca, NomePeca, Quant, Valor, TotLinha, Obs, Data_Term_Serv, Hora_Term_Serv) Values([ô][Ô] & _
TxtDataInicioServico.Text & [Ô][ô], [ô][Ô] & TxtHoraInicioServico.Text & [Ô][ô], [Ô] & _
TxtNumOS.Text & [Ô], [ô][Ô] & TxtNomeCliente.Text & [Ô][ô], [ô][Ô] & TxtProduto.Text & [Ô][ô], [Ô] & _
ChkProg.Value & [Ô], [Ô] & ChkReg.Value & [Ô], [Ô] & ChkMaqAcid.Value & [Ô], [Ô] & ChkGrAlim.Value & [Ô], [Ô] & _
ChkConjTecl.Value & [Ô], [Ô] & ChkMaqTranc.Value & [Ô], [Ô] & ChkPlBsEletr.Value & [Ô], [Ô] & _
ChkCjEntr.Value & [Ô], [Ô] & ChkGrDis.Value & [Ô], [Ô] & ChkGrImpr.Value & [Ô], [Ô] & ChkCjEsc.Value & [Ô], [Ô] & _
ChkPint.Value & [Ô], [Ô] & ChkRevGer.Value & [Ô], [Ô] & ChkMon.Value & [Ô], [Ô] & ChkCjLeit.Value & [Ô], [Ô] & _
ChkLubr.Value & [Ô], [Ô] & ChkCjTab.Value & [Ô], [Ô] & ChkCabImpr.Value & [Ô], [Ô] & ChkDesm.Value & [Ô], [Ô] & _
ChkAlimEscr.Value & [Ô], [Ô] & ChkLavTratFer.Value & [Ô], [Ô] & ChkRevGrMot.Value & [Ô], [Ô] & _
ChkLacr.Value & [Ô], [Ô] & ChkRetCilCar.Value & [Ô], [Ô] & ChkRevEletr.Value & [Ô], [Ô] & _
ChkSolda.Value & [Ô], [Ô] & ChkOutros.Value & [Ô], [ô][Ô] & _
TxtCodPeca.Text & [Ô][ô], [ô][Ô] & TxtNomePeca.Text & [Ô][ô], [Ô] & TxtQuant.Text & [Ô], [Ô] & TxtValor.Text & [Ô], [Ô] & _
TxtTotLinha.Text & [Ô], [ô][Ô] & Txtobs.Text & [Ô][ô], [ô][Ô] & _
TxtDataTermServ.Text & [Ô][ô], [ô][Ô] & TxtHoraTermServ.Text & [Ô][ô]);[Ô]
.Execute
End With
MsgBox [Ô]Inclusão concluida com sucesso.[Ô], vbInformation + vbOKOnly + vbApplicationModal, [Ô]OK[Ô]
LimparTela
TxtNumOS.SetFocus
Saida:
Set cnnComando = Nothing
Exit Sub
errInclusao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve erro na inclusão dos dados na tabela.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
informo que os dados de txtTotLinha surge aqui
Private Sub TxtTotLinha_GotFocus()
[ô]Calcula a celula quantidade vezes valor peça e transf. em reais
TxtTotLinha.Text = Format(TxtValor.Text * TxtQuant.Text, [Ô]0.00[Ô])
End Sub
erro ocorre porque as pecas utilizadas vao pro flex que pode ter muitas linhas e nao sei como fazer o codigo pra resolver isso
o access tem que entender que esse cliente usou mais de uma peça no conserto
nao sei se me fiz entender
Nereu1301,
Desculpe se eu estiver escrevendo besteira, mas vejo um pequeno erro conceitual na sua tabela.
Você está colocandom dentro da tabela [Ô]Oficina1[Ô] estes dois campos: [Ô]CodPeca, NomePeca,[Ô]
Pense bem, se seu conserto utiliza de 0 até N peças e uma peça pode estar em 0 até N conserto, você tem um relacionamento entre tabelas do tipo [Ô]N-N[Ô] (N para N).
Recomendo você reestruturar sua base de dados criando uma tabela chamada [Ô]OficinaPeça[Ô] colocando dentro desta nova tabela a chave primária do código do conserto e a chave primária do código da peça. Desta forma você pode ter um conserto (oficina) que se utiliza de várias peças. Esta nova tabela será uma [Ô]intermediadora[Ô] entre a tabela que registra os consertos e a tabela de peças.
Se você tiver alguma dúvida, por favor escreva, okay?
[][ô]s,
Tunusat.
Desculpe se eu estiver escrevendo besteira, mas vejo um pequeno erro conceitual na sua tabela.
Você está colocandom dentro da tabela [Ô]Oficina1[Ô] estes dois campos: [Ô]CodPeca, NomePeca,[Ô]
Pense bem, se seu conserto utiliza de 0 até N peças e uma peça pode estar em 0 até N conserto, você tem um relacionamento entre tabelas do tipo [Ô]N-N[Ô] (N para N).
Recomendo você reestruturar sua base de dados criando uma tabela chamada [Ô]OficinaPeça[Ô] colocando dentro desta nova tabela a chave primária do código do conserto e a chave primária do código da peça. Desta forma você pode ter um conserto (oficina) que se utiliza de várias peças. Esta nova tabela será uma [Ô]intermediadora[Ô] entre a tabela que registra os consertos e a tabela de peças.
Se você tiver alguma dúvida, por favor escreva, okay?
[][ô]s,
Tunusat.
NEREU1301, boa noite.
Poste aqui a estrutura das duas tabelas para que possamos analizar melhor seu problemas afim de encontrarmos a soloção, ok??
Coloque todos os campos das tabelas.
Poste aqui a estrutura das duas tabelas para que possamos analizar melhor seu problemas afim de encontrarmos a soloção, ok??
Coloque todos os campos das tabelas.
Tunusat
a ideia é mais ou menos assim:
eu tenho a tabela clientes, oficina 1, oficina 2 e pecas
Entra uma impressora pra conserto e é aberta uma Ordem serv nr 1 de Fulano de tal e usou no conserto
1 flat
1 Ci
1 transitor
entao essa tabela Oficina 1 (que é o Form 2) vai buscar nome do cliente na tabela Clientes e peça na tabela Pecas.
Entendo que as informaçoes deveriam ficar todas na Oficina 1 mas vou usar tua ideia e vou fazer um teste
a ideia é mais ou menos assim:
eu tenho a tabela clientes, oficina 1, oficina 2 e pecas
Entra uma impressora pra conserto e é aberta uma Ordem serv nr 1 de Fulano de tal e usou no conserto
1 flat
1 Ci
1 transitor
entao essa tabela Oficina 1 (que é o Form 2) vai buscar nome do cliente na tabela Clientes e peça na tabela Pecas.
Entendo que as informaçoes deveriam ficar todas na Oficina 1 mas vou usar tua ideia e vou fazer um teste
Pelo que eu entendi, ele só grava uma linha, certo? Outra coisa: por que você salva os textbox em vez do grid?
ASH
ele grava uma linha se eu deixar nos textbox, mas se eu usar a sub ai em cima e jogar pra flex ai nao grava nenhuma!
na sua ideia:
se eu salvar os text eu vou ter que gravar um a um, porque cada peça vai ocupar uma linha na tabela
ou crio no form diversos text e uma tabela com diversas colunas mas dai vou ter que ter um limite de peças e isso nao tem como definir ja que cada conserto é indefinido
aceito mais ideias
ele grava uma linha se eu deixar nos textbox, mas se eu usar a sub ai em cima e jogar pra flex ai nao grava nenhuma!
na sua ideia:
se eu salvar os text eu vou ter que gravar um a um, porque cada peça vai ocupar uma linha na tabela
ou crio no form diversos text e uma tabela com diversas colunas mas dai vou ter que ter um limite de peças e isso nao tem como definir ja que cada conserto é indefinido
aceito mais ideias
NEREU1301,
Qual é sua urgencia para este projeto??
Se você quiser posso montar a estrutura para você de um BD normalizado e apresentar um modelo de lançamento.
Qual é sua urgencia para este projeto??
Se você quiser posso montar a estrutura para você de um BD normalizado e apresentar um modelo de lançamento.
qual erro aparece?
Citação:NEREU1301 escreveu:
ASH
ele grava uma linha se eu deixar nos textbox, mas se eu usar a sub ai em cima e jogar pra flex ai nao grava nenhuma!
na sua ideia:
se eu salvar os text eu vou ter que gravar um a um, porque cada peça vai ocupar uma linha na tabela
ou crio no form diversos text e uma tabela com diversas colunas mas dai vou ter que ter um limite de peças e isso nao tem como definir ja que cada conserto é indefinido
aceito mais ideias
Eu acho que vc teria que usar o grid, porém mudar a sub, obviamente.
Se vc puder postar o form, melhor. Senão, tenta fazer um loop (for) das linhas do grid e salvar uma a uma.
para gravar do grid faça o seguinte
primiero faça um loop pegando do grid
exemplo:
for i = 0 to grid.rows -2
[ô]aqui vc insere as linhas no grid na tabela, configura todo seu command ok
[ô]aqui ele varre todo grid e vai inserindo um a um
sql = [Ô]insert into tabela (campo1,campo2) values ([Ô] & grid.textmatrix(i,0).text & [Ô],[Ô] & grid.textmatrix(i,1).text & [Ô])[Ô]
.execute
next i
primiero faça um loop pegando do grid
exemplo:
for i = 0 to grid.rows -2
[ô]aqui vc insere as linhas no grid na tabela, configura todo seu command ok
[ô]aqui ele varre todo grid e vai inserindo um a um
sql = [Ô]insert into tabela (campo1,campo2) values ([Ô] & grid.textmatrix(i,0).text & [Ô],[Ô] & grid.textmatrix(i,1).text & [Ô])[Ô]
.execute
next i
ASH e ACG é isso mesmo que eu quero fazer.
vou fazer as alteraçoes e se tiver duvidas retorno
obrigado
nereu
vou fazer as alteraçoes e se tiver duvidas retorno
obrigado
nereu
Tópico encerrado , respostas não são mais permitidas