Humm Posted July 22, 2011 Report Share Posted July 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? Quote Link to comment Share on other sites More sharing options...
0 MrMALJ Posted July 22, 2011 Report Share Posted July 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. Quote Link to comment Share on other sites More sharing options...
0 Humm Posted July 22, 2011 Author Report Share Posted July 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 Quote Link to comment Share on other sites More sharing options...
0 MrMALJ Posted July 25, 2011 Report Share Posted July 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.. Quote Link to comment Share on other sites More sharing options...
0 Humm Posted July 26, 2011 Author Report Share Posted July 26, 2011 no caso são numeros mesmo.. mas os dados são do tipo inteiro.. mesmo assim os numeros devem estar entre aspas? Quote Link to comment Share on other sites More sharing options...
0 Iceguy Posted August 9, 2011 Report Share Posted August 9, 2011 (edited) 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" Edited August 9, 2011 by Iceguy Quote Link to comment Share on other sites More sharing options...
Question
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 to comment
Share on other sites
5 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.