Humm Postado Julho 22, 2011 Denunciar Share Postado Julho 22, 2011 Dim strFAT As Integer Dim strREM, TOTD As Double Dim strSQL As String Me.Refresh strREM = DLookup("[TIPO]", "DELIVERS", "[COD_CLI] = " & Me.COD_DELIV) If strREM = 1 Then Else strFAT = DLookup("[V_TIPO]", "DELIVERS", "[COD_CLI] = " & Me.COD_DELIV) If strREM = 2 Then TOTD = (Me.TOTAL_PED * strFAT) / 100 ElseIf strREM = 3 Then TOTD = strFAT End If strSQL = "INSERT INTO ENTREGAS ( COD_PED, REMUN, FATOR, TOTAL ) " & _ "VALUES ( " & Me.COD_PED & ", " & strREM & ", " & strFAT & ", " & TOTD & " );" DoCmd.RunSQL strSQL End If DoCmd.Close DoCmd.OpenForm "ATENDIMENTO"pois é, nesse codigo ai, uma coisa bem estranha ta acontecendo..aparentemente ta tudo certo, mas ao rodar o codigo, da erro bem no docmd.runsqlele diz que o numero de campos da tabela destino não bate com o numero de valores apresentados..mas como veem ai no codigo, tem 4 campos de destino para 4 valores..no debug, ele mostra o valor de cada variavel corretamente.. eu n sei o q ta havendo.alguma luz? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MrMALJ Postado Julho 22, 2011 Denunciar Share Postado Julho 22, 2011 Fera você já pegou esse seu codigo sql e tentou gerar uma consulta com ele, pois me parece correto, a não ser que esteja havando alguma discrepância quanto a tipo de dados.Faz o teste da consulta e nos retorne, ok. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Humm Postado Julho 22, 2011 Autor Denunciar Share Postado Julho 22, 2011 fiz sim, alias foi a alternativa q achei pra contornar o problema..usando o codigo em uma consulta acrescimo, funciona normal.se fosse problema de tipos de dados, daria erro de tipos incompativeis..mas curiosamente o erro que dá, é que ele diz que a quantidade de campos de destino não bate com a quantidade de campos de valor..como se eu tivesse 4 campos de destino na tabela pra acrescentar dados, e so tivesse enviando 3 valores, saca?por exemplo, quer reproduzir o erro faça assim:INSERT INTO TABELA ( CAMPO1, CAMPO2, CAMPO3 ) VALUES ( "A", "B" )e essa? quem explica?já debuguei o codigo.. verificando as variaveis e seus valores no momento da execução, ta tudo certo! so que o vba implicou com esse INSERT Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MrMALJ Postado Julho 25, 2011 Denunciar Share Postado Julho 25, 2011 Ummm talvez então a possibilidade de tratamento de algum valor nulo. Ou ainda você pode estar inserindo algum valor número sem utilizar aspas simples, são suposições pois, numa passada de olhos sem conhecer maiores detalhes nada vi de errado.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Humm Postado Julho 26, 2011 Autor Denunciar Share Postado Julho 26, 2011 no caso são numeros mesmo.. mas os dados são do tipo inteiro.. mesmo assim os numeros devem estar entre aspas? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Iceguy Postado Agosto 9, 2011 Denunciar Share Postado Agosto 9, 2011 (editado) Seu problema é que fica assim:"INSERT INTO TABELA(VALOR) VALUES(" & Valor & ")"e se o valor é Double e vale 4,5 você tem essa string:"INSERT INTO TABELA(VALOR) VALUES(4,5)"Ou seja, tenho 2 campos nos valores e 1 nos campo na tabelaUsa consulta parametrizada que num da erroDim conn As ADODB.Connection Dim cdm As ADODB.Command Dim prm As ADODB.Parameter 'Direciona a conexão para o banco corrente Set conn = CurrentProject.Connection 'Instancia novo comando Set cmd = New ADODB.Command 'Cria conexão cmd.ActiveConnection = conn 'Configura as consultas para aceitar parâmetros nomeados cmd.NamedParameters = True 'insere o texto da consulta cmd.CommandText = "INSERT INTO ENTREGAS(COD_PED, REMUN, FATOR, TOTAL) VALUES(@COD_PED, @REMUN, @FATOR, @TOTAL)" 'Cria parâmetro @COD_PED Set prm = cmd.CreateParameter(Name:="@COD_PED", Type:=adNumeric, Direction:=adParamInput, Value:=Me.COD_PED) 'Anexa o parâmetro cmd.Parameters.Append prm 'Cria parâmetro @REMUN Set prm = cmd.CreateParameter(Name:="@REMUN", Type:=adNumeric, Direction:=adParamInput, Value:=strREM) 'Anexa o parâmetro cmd.Parameters.Append prm 'Cria parâmetro @FATOR Set prm = cmd.CreateParameter(Name:="@FATOR", Type:=adNumeric, Direction:=adParamInput, Value:=strFAT) 'Anexa o parâmetro cmd.Parameters.Append prm 'Cria parâmetro @TOTAL Set prm = cmd.CreateParameter(Name:="@TOTAL", Type:=adNumeric, Direction:=adParamInput, Value:=TOTD) 'Anexa o parâmetro cmd.Parameters.Append prm On Error GoTo Erro 'Inicia transação cmd.ActiveConnection.BeginTrans 'Executa SQL cmd.Execute 'Confirma transação cmd.ActiveConnection.CommitTrans Sair: 'Fecha conexão cmd.ActiveConnection.Close 'Limpa memória Set cmd = Nothing Set conn = Nothing Set prm = Nothing Erro: 'Cancela transação cmd.ActiveConnection.RollbackTrans 'Resuma na saída Resume Saircom isso os parâmetros limitam o dado que entra e você não precisa se preocupar com aspas ou qualquer outra coisaNão esquece de adicionar a referência do "Microsoft ActiveX Data Objects 2.8 Library" Editado Agosto 9, 2011 por Iceguy Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Humm
pois é, nesse codigo ai, uma coisa bem estranha ta acontecendo..
aparentemente ta tudo certo, mas ao rodar o codigo, da erro bem no docmd.runsql
ele diz que o numero de campos da tabela destino não bate com o numero de valores apresentados..
mas como veem ai no codigo, tem 4 campos de destino para 4 valores..
no debug, ele mostra o valor de cada variavel corretamente.. eu n sei o q ta havendo.
alguma luz?
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.