none
problema com rotina RRS feed

  • Pergunta

  • Caros amigo, estou com problema na rotina de inclusao de dados num sistema, sou novato em programação alguem poderia me ajudar. Segue abaixo a rotina 

           Dim Cliente As Integer
           Dim Nome As String
           Dim x1 As Integer
           Dim x2 As Integer
           Dim x3 As Integer
           Nome = UCase(Trim(txtNome.Text))
           SQL = ""
           SQL = "select cod_cliente from tb_clientes " & _
                 " where txt_nome = '" & Nome & "'"
           Set conecta.rs = conecta.cn1.Execute(SQL)
           If Not conecta.rs.EOF Then
              Cliente = conecta.rs!cod_cliente
              x1 = "0,00"
              x2 = "0,00"
              x3 = "0,00"
              SQL = ""
              SQL = " select * from TB_GERCLIENTE where cod_cliente1 = " & Cliente & " "
              Set conecta.rs = conecta.cn1.Execute(SQL)
              If conecta.rs.EOF Then
                SQL = ""
                SQL = " insert into TB_GERCLIENTE(Cod_Cliente1,Dat_UltMov,Num_VlrUltMov," & _
                        "Num_MaiorVlr,Num_VlrAcumulado)" & _
                        " values(" & Cliente & ",'" & string_to_date(datinclusao.Text) & "', " & _
                        "" & x1 & "," & x2 & "," & x3 & ")"
    erro >>>>>  Set conecta.rs = conecta.cn1.Execute(SQL)    >>>>>>tipo de dados incompativel na expreção de criterio<<<
              End If
              MsgBox "Inclusão Efetuado com Sucesso !.", vbInformation, "!!!A T E N Ç Ã O!!!"
              conecta.rs.Close
              limpatela
              txtNome.SetFocus
           End If

    No meu banco de dados Access a tabela TB_GERCLIENTE esta configurada como:

    chave - cod_gerencial - numerico/automatico

        cod_cliente1 - numerico / padrao

        dat_ultmov - data / hora

          num_vlrultmov - numerico / padrao 2 decimal

        num_vlracumulado - numerico /padrao 2 decimal

        num_maiorvlr - numerico / padrao 2 decimal.

    terça-feira, 12 de novembro de 2013 13:11

Respostas

  • Olá,

    Isso é vb6?

    Eu nao recomendo o uso de concatenaçao de instruçoes SQL por varios motivos: Segurança (permite SQL Injection), problemas com tipos (o formato de datas e numeros deve se normalizado antes), dificuldade com sintaxe (falta de apostrofos)

    Exemplo:

    Public Sub TestInsert()
        Dim adoDBConn As ADODB.Connection
        Dim adoCommand As ADODB.Command
        Dim prmADOParam As ADODB.Parameter
        Dim strConn As String
        Dim strDBPath As String
        Dim strCmd As String
        Dim lngTestCount As Long
    
        Set adoDBConn = New ADODB.Connection
        Set adoCommand = New ADODB.Command
    
        adoDBConn.Open "Provider=MSDataShape;" & _
            "Data Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & App.Path & "\Test.mdb"
    
        adoCommand.ActiveConnection = adoDBConn
    
        On Error Resume Next
        adoDBConn.Execute "DROP PROCEDURE sp_InsertCount"
        On Error GoTo 0
    
        strCmd = "CREATE PROCEDURE sp_InsertCount AS "
        strCmd = strCmd & "INSERT INTO TestCount (lngTestCount) "
        strCmd = strCmd & "VALUES (@lngTestCount)"
    
        adoDBConn.Execute strCmd
    
        adoCommand.CommandText = "sp_InsertCount"
        adoCommand.CommandType = adCmdStoredProc
    
        Set prmADOParam = adoCommand.CreateParameter _
            ("@lngTestCount", adInteger, adParamInput, , Null)
    
        adoCommand.Parameters.Append prmADOParam
    
        ' ** This produces 20 rows all with the same value **
        For lngTestCount = 1 To 20
    
            adoCommand.Parameters("@lngTestCount").Value = lngTestCount
    
            Debug.Print adoCommand.Parameters("@lngTestCount").Value
    
            'adoDBConn.BeginTrans
            adoCommand.Execute
    	'adoCommand.Execute , , adCmdStoredProc Or adExecuteNoRecords
            'adoDBConn.CommitTrans
    
        Next
    
        strCmd = "INSERT INTO TestCount (lngTestCount) "
        strCmd = strCmd & "VALUES (@lngTestCount)"
    
        adoCommand.CommandText = strCmd
        adoCommand.CommandType = adCmdText
    
        ' ** This produces 20 rows all with incrementing values **
        For lngTestCount = 1 To 20
    
            adoCommand.Parameters("@lngTestCount").Value = lngTestCount
    
            Debug.Print adoCommand.Parameters("@lngTestCount").Value
    
            'adoDBConn.BeginTrans
            adoCommand.Execute
    	'adoCommand.Execute , , adCmdStoredProc Or adExecuteNoRecords
            'adoDBConn.CommitTrans
    
        Next
    
        adoDBConn.Close
    
        Set prmADOParam = Nothing
        Set adoCommand = Nothing
        Set adoDBConn = Nothing
    
    End Sub
    
    fonte:http://www.mofeel.net/902-microsoft-public-scripting-vbscript/8538.aspx

    O problema do jeito que vc fez é que vc provalmente esta enviando a data neste formato: dd/MM/yyyy e o correto é yyyy-MM-dd

    Os valores decimais obrigatoriamente tem que ser usando "." e nao ",". Lembre que a conversao implicita double to string usa as configurçoes regionais.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    terça-feira, 12 de novembro de 2013 13:49
    Moderador