MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Erro de Sintaxe - 3075

    Compartilhe

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    [Resolvido]Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Qua 04 Out 2017, 01:44

    Caros, saudações!

    Estou com um formulário onde em uma consulta sql, se me retornar um registro igual, impeça o lançamento do registro. a instrução sql é:

    strSQL = "SELECT Tela.* FROM Tela " _
    & "WHERE (((Tela.IdTela)=" & Me.Cbo_Prod &") and ((Tela.Rolo)=" & Me.Comp & ") and ((Tela.Alt)=" & Me.Alt & "))"

    Onde todos os campos na tabela estão com formato número.

    Assim quando os campos "comp" e "alt" são números inteiros, a consulta funciona, mas quando número em fração, ex: 2,5, me retorna o erro de sixtase (virgula) na expressão de consulta.

    Onde estou errando?

    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Qua 04 Out 2017, 17:32

    Boa tarde,

    Tente usar o replace:
    Código:
    strSQL = "SELECT Tela.* FROM Tela " _
    & "WHERE (((Tela.IdTela)=" & Me.Cbo_Prod &") and ((Tela.Rolo)=" & Replace(Me.Comp, ",", ".") & ") and ((Tela.Alt)=" & Replace(Me.Alt, ",", ".") & "))"

    Abraço.

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Qua 04 Out 2017, 22:24

    Caro Cassio, Obrigado pelo retorno!

    Até que funfa, porém não retorno o número em formato correto, ele converte para 0.00 em vez de 0,00 - substitui o ponto pela virgula e aí volta o erro 3075.

    Já tentei:
    Código:
    Format(Me.Alt, "#,##0.00")

    E também da erro 3075

    joão2017
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 16/09/2017

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  joão2017 em Qui 05 Out 2017, 00:41

    Boa noite! E se tentar assim? Format(Me.Alt, 2)

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Qui 05 Out 2017, 01:01

    Caro João! muito obrigado, mas também não deu.

    Incrível que montei o código dcout da forma:

    Código:
    Sub verificaRegistro()
    '
        Dim criterio As String
    '
        If Not IsNull(Abrev) And Not IsNull(Comp) And Not IsNull(Alt) Then
    '
            If IsNull(Cbo_Prod) Then
                Cbo_Prod = DMax("IdTela", "Tela") + 1
            End If
    '
            criterio = "Abrev = '" & Abrev & "' And Rolo = " & Comp & " and Alt = " & Alt & ""
    '
            If DCount("Cod", "Tela", criterio) > 0 Then
    '
                If MsgBox("Ja existe lançamento idêntico cadastrado, localize e altere.", vbExclamation, "Atenção!") Then
                    DoCmd.SetWarnings False
                    DoCmd.RunCommand acCmdDeleteRecord
                    DoCmd.GoToRecord , , acPrevious
    '
                End If
    '
            End If
    '
        End If
    '
    End Sub

    E dá o mesmo erro.

    Será que vou ter que alterar os campos números para texto?
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Qui 05 Out 2017, 11:37

    Bom dia,

    Tentou colocar o replace() no critério e usar o DCount()? Não vi nada no seu código que retornasse "0.00" pois o DCount absolutamente sempre retornará um valor inteiro com a quantidade de registros encontrada para determinado critério.

    Se fosse usar um recordset pra fazer sua consulta, ficaria assim:

    Código:
    Dim db as database
    dim rs as recordset

    set db = currentdb
    set rs = db.Openrecordset("SELECT * FROM Tela WHERE IdTela =" & Me.Cbo_Prod &" and Rolo = " & Replace(Me.Comp, ",", ".") & " and Alt = " & Replace(Me.Alt, ",", ".") & ")

    If rs.RecordCount > 0 Then

    MsgBox "Ja existe lançamento idêntico cadastrado, localize e altere.", vbExclamation, "Atenção!"
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdDeleteRecord
    DoCmd.GoToRecord , , acPrevious

    End if

    Testa aí.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Qui 05 Out 2017, 12:17

    Caro Cassio!

    Acredito que possa funcionar, mas não consegui aqui.

    Erro do copilação
    Era esperado: Separador de Lista ou )

    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Qui 05 Out 2017, 12:46

    Bom dia,

    Eu esqueci uma " antes do ) do openrecordset. Segue código correto:

    Código:
    Dim db as database
    dim rs as recordset

    set db = currentdb
    set rs = db.Openrecordset("SELECT * FROM Tela WHERE IdTela =" & Me.Cbo_Prod &" and Rolo = " & Replace(Me.Comp, ",", ".") & " and Alt = " & Replace(Me.Alt, ",", ".") & "")

    If rs.RecordCount > 0 Then

    MsgBox "Ja existe lançamento idêntico cadastrado, localize e altere.", vbExclamation, "Atenção!"
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdDeleteRecord
    DoCmd.GoToRecord , , acPrevious

    End if


    .................................................................................
    Só não tem código pra morte!

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Sex 06 Out 2017, 01:21

    Caro Cassio, não consigo!

    E dessa vez não funfa nada.

    Segue copia do bd:
    [Você precisa estar registrado e conectado para ver este link.]
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Sex 06 Out 2017, 11:30

    Bom dia,

    Mande a copia do backend ou transforme a tabela em tabela local no arquivo que mandou.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Sex 06 Out 2017, 15:56

    Bom dia Cassio! mas que vacilo meu.

    Segue

    [Você precisa estar registrado e conectado para ver este link.]
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Sex 06 Out 2017, 17:41

    Boa tarde,

    Substitua a função CriterioLan por isso:

    Código:
    Dim db As Database
     Dim rs As Recordset

     Set db = CurrentDb
     Set rs = db.OpenRecordset("SELECT * FROM Tela WHERE IdTela =" & Me.Cbo_Prod & " and Rolo = " & Replace(Me.Comp, ",", ".") & " and Alt = " & Replace(Me.Alt, ",", ".") & "")

     If rs.RecordCount > 0 Then
        MsgBox "Ja existe lançamento idêntico cadastrado, localize e altere.", vbExclamation, "Atenção!"
     Else
        Lancar
     End If

    Abraço.
    Anexos
    SupConEX.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (68 Kb) Baixado 7 vez(es)


    .................................................................................
    Só não tem código pra morte!

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Sex 06 Out 2017, 18:06

    Cassio, boa tarde!

    É o princípio! porém voce observou que ele não procura o valor com formato: 0,00, mas sim 0,0, ex:

    no campo Comp ou Alt é: 1,10 - ele lê 1,1

    E se não for exatamente igual, ele não identifica o registro.

    Tentei mudar o formato do campo e não resolvi, será que é no código mesmo?

    Abraço
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Sex 06 Out 2017, 20:06

    Isso é normal, é um princípio matemático. Que diferença faz voce escrever 1,1 ou 1,10? Nenhuma. Teste quando os valores forem 0,01 e 0,02 e veja se o sistema procura corretamente.


    .................................................................................
    Só não tem código pra morte!

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Sex 06 Out 2017, 20:51

    Caro Cassio!

    Entendi!

    Mas seguinte! na tabela, o produto é cadastro com um dos critérios de rolo e altura, onde ambos contém a menor fração em decimal, ou seja, no máximo 1,1 - nunca 1,11.

    Ja tentei mudando o formato do campo, tirando de padrão e deixando em branco, só assim colocamos o valor desejado. Coloque no campo alt valor 1,10 e ele não encontra esse valor na tabela, possibilitando o cadastro de produto em duplicidade.

    Teste aí procurando o registro: "Trançada - M1,5 / A16 - Pássaro" e coloque no campo comp = 25,00 e na Alt = 1,00 - ele deve impedir esse lançamento por ja existir produto lançado com esse comprimento e altura.

    abraço
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Seg 09 Out 2017, 14:08

    Bom dia,

    Altere os dois campos da tabela para tipo Número - Duplo - Padrão com 2 casas decimais.

    No formulário, substitua o comando do botão para
    Código:
    Function CriterioLan()
     Dim db As Database
     Dim rs As Recordset
     Dim str As String
     
    str = "SELECT * FROM Tela WHERE IdTela = " & Me.Cbo_Prod & " and "
    str = str & "Rolo = " & Replace(Format(Me.Comp, "#,##0.00"), ",", ".") & " and Alt = " & Replace(Format(Me.Alt, "#,##0.00"), ",", ".") & ""
        
     Set db = CurrentDb
     Set rs = db.OpenRecordset(str)
     
     MsgBox str
      MsgBox rs.RecordCount

     If rs.RecordCount > 0 Then

     MsgBox "Ja existe lançamento idêntico cadastrado, localize e altere.", vbExclamation, "Atenção!"
     Else
    '  Lancar
    MsgBox "passou"
     End If
    End Function

    Deixei uma msgbox mostrando o código informado no recordset. Se voce fizer algo e der "passou" quando não deveria ter dado, veja o código que está na msgbox na comparação do IdTela = " & Me.Cbo_Prod & ", vá até a tabela e veja se na linha desse campo o Rolo e Alt estão cadastrados com os valores que informou no formulário, pois o valor que voce me pediu pra verificar na mensagem acima não estava cadastrado.

    Deixei apenas a msgbox informando se passou ou não, depois voce altera ai pro seu codigo de gravação do registro.

    Abraço.
    Anexos
    SupConEX.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (95 Kb) Baixado 4 vez(es)


    .................................................................................
    Só não tem código pra morte!

    w_fabricio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 19/09/2010

    Erro de Sintaxe - 3075

    Mensagem  w_fabricio em Seg 09 Out 2017, 17:05

    Mestre, Mestre, Mestre Cassio!
    Uso de toda a minha gratidão para vossa pessoa pela tua paciência, inteligência, dedicação e parceria.

    Que DEUS continue te iluminando!

    Realmente a busca com o código do produto não validava a informações necessárias, fiz as devidas alterações e quanto ao problema dos valores dos campos "comp" e "alt" foram resolvidos e funcionou certinho, graças à tua ajuda.

    Segue o código que funcionou:
    Código:
    Function CriterioLan()
     Dim db As Database
     Dim rs As Recordset
     Dim str As String
     Dim st As String
    '
    str = "SELECT * FROM Tela WHERE Malha = '" & Me.Txt_Malha & "' and MatPrima = " & Me.Txt_MatPrima & " and "
    str = str & "Rolo = " & Replace(Format(Me.Comp, "#,##0.00"), ",", ".") & " and Alt = " & Replace(Format(Me.Alt, "#,##0.00"), ",", ".") & ""
    '
     Set db = CurrentDb
     Set rs = db.OpenRecordset(str)
    '
     If rs.RecordCount > 0 Then
      MsgBox "Ja existe lançamento idêntico cadastrado." & vbCrLf & "Tela(" & Me.Cbo_Prod & ") Rolo(" & Format(Me.Comp, "#,##0.00") & "), Alt(" & Format(Me.Alt, "#,##0.00") & ")" & vbCrLf & "Lançar como produto padrão!", vbExclamation, "Atenção!"
      Me.Txt_Sel.SetFocus
     Else
        Lancar
        If Me.Cbo_Tipo = "ENTRADA" Then
        BMatPrima
        End If
        Zerar
     End If
    End Function

    Mui Grato, Abraços
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 525
    Registrado : 18/01/2013

    Re: [Resolvido]Erro de Sintaxe - 3075

    Mensagem  CassioFabre em Seg 09 Out 2017, 17:50

    Boa tarde,

    Não é pra tanto hehe Que bom que chegamos à solução.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

      Data/hora atual: Qua 22 Nov 2017, 20:18