Ir para conteúdo
Fórum Script Brasil
  • 0

INSERT INTO não ta funcionando


Humm

Pergunta

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.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

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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..

Link para o comentário
Compartilhar em outros sites

  • 0

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 tabela

Usa consulta parametrizada que num da erro

Dim 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 Sair

com isso os parâmetros limitam o dado que entra e você não precisa se preocupar com aspas ou qualquer outra coisa

Não esquece de adicionar a referência do "Microsoft ActiveX Data Objects 2.8 Library"

Editado por Iceguy
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...