Jump to content
Fórum Script Brasil
  • 0

INSERT INTO não ta funcionando


Humm

Question

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 to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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"

Edited by Iceguy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...