MSHFLEXGRID E TABELA ACCESS

NEREU1301 20/08/2009 22:18:59
#320476
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
TUNUSAT 20/08/2009 22:26:32
#320479
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.
DANIKULL 20/08/2009 22:32:07
#320480
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.
NEREU1301 20/08/2009 22:43:56
#320482
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
ASHKATCHUP 20/08/2009 22:56:50
#320486
Pelo que eu entendi, ele só grava uma linha, certo? Outra coisa: por que você salva os textbox em vez do grid?
NEREU1301 20/08/2009 23:09:27
#320488
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
DANIKULL 20/08/2009 23:25:09
#320492
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.
MARCELO.TREZE 21/08/2009 00:09:57
#320495
qual erro aparece?
ASHKATCHUP 21/08/2009 00:26:19
#320496
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.
ACG1574 21/08/2009 08:04:29
#320501
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
NEREU1301 21/08/2009 08:30:39
#320505
ASH e ACG é isso mesmo que eu quero fazer.
vou fazer as alteraçoes e se tiver duvidas retorno
obrigado
nereu
Página 1 de 6 [58 registro(s)]
Tópico encerrado , respostas não são mais permitidas