MaximoAccess

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

Obrigado

Administração do MaximoAccess

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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

    [Resolvido]Código criar tabela não funciona

    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 11/3/2020, 12:27

    Caros amigos,

    Mais uma vez estou precisando de ajuda. Acho que deve ser uma besteira, porém não estou visualizando. Com esses dois códigos abaixo quero criar tabelas CLIENTE e TbMALAX. Com o primeiro código tudo ok, cria normal. Com o segundo nada cria e nem aparece erro algum. O segundo foi copiado do primeiro e mudado os campos.
    Onde foi que errei?

    Dim SqlV As String
    SqlV = "CREATE TABLE CLIENTE " & _
    "(CLI_ID AUTOINCREMENT, " & _
    "CLI_NM VARCHAR(50) NOT NULL, " & _
    "CLI_CPF VARCHAR(11) NOT NULL," & _
    "CONSTRAINT PK_CLI_ID PRIMARY KEY (CLI_ID))"
    DoCmd.RunSQL SqlV


    Dim Sql As String
    Sql = "CREATE TABLE TbMalaX " & _
    "(Colaborador VARCHAR(30) NOT NULL, " & _
    "NomeSolicitante VARCHAR(50) NOT NULL, " & _
    "Homonimo VARCHAR(2) NOT NULL," & _
    "DataNascimento DATATIME," & _
    "Profissão VARCHAR(25) NOT NULL," & _
    "CONSTRAINT PK_Colaborador PRIMARY KEY (Colaborador))"
    DoCmd.RunSQL Sql
    cleverson_manaus
    cleverson_manaus
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1000
    Registrado : 23/09/2011

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  cleverson_manaus em 11/3/2020, 14:15


    Boa tarde,

    Minha sugestão, não testei.

    Tenta criar uma chave primária com o tipo numero inteiro ao invés de texto.

    Abraços,


    .................................................................................
    afro

    "É fazendo que se aprende a fazer aquilo que se deve aprender a fazer."(Aristóteles)
    - Dúvida resolvida!!! Marcar o tópico como resolvido!!!
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 11/3/2020, 14:41

    Bom dia Cleverson,

    Muito grato pelo interesse no meu problema. Coloquei campo conforme sua sugestão e continua do mesmo modo. É como se não estivesse nem lendo o código, pois coloquei a definição do campo escrito errado e não deu erro. E agora?

    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1062
    Registrado : 13/12/2016

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Alexandre Fim em 11/3/2020, 15:02

    Olá,

    O erro está na definição de dados:

    Dim Sql As String
    Sql = "CREATE TABLE TbMalaX " & _
    "(Colaborador VARCHAR(30) NOT NULL, " & _
    "NomeSolicitante VARCHAR(50) NOT NULL, " & _
    "Homonimo VARCHAR(2) NOT NULL," & _
    "DataNascimento DATATIME," & _
    "Profissão VARCHAR(25) NOT NULL," & _
    "CONSTRAINT PK_Colaborador PRIMARY KEY (Colaborador))"
    DoCmd.RunSQL Sql

    Mude para a linha marcada para:

    "DataNascimento DATE,"

    Sempre que possível, coloque tratamento de erros em seus códigos para identificar qual erro foi gerado.
    Exemplo:

    Código:


    Function CriaTabs()
    On Error GoTo trata_erro
    Dim SqlV As String


        SqlV = "CREATE TABLE CLIENTE " & _
        "(CLI_ID AUTOINCREMENT, " & _
        "CLI_NM VARCHAR(50) NOT NULL, " & _
        "CLI_CPF VARCHAR(11) NOT NULL," & _
        "CONSTRAINT PK_CLI_ID PRIMARY KEY (CLI_ID))"
        DoCmd.RunSQL SqlV
       
       
        SqlV = "CREATE TABLE TbMalaX " & _
        "(Colaborador VARCHAR(30) NOT NULL, " & _
        "NomeSolicitante VARCHAR(50) NOT NULL, " & _
        "Homonimo VARCHAR(2) NOT NULL," & _
        "DataNascimento DATE," & _
        "Profissão VARCHAR(25) NOT NULL," & _
        "CONSTRAINT PK_Colaborador PRIMARY KEY (Colaborador))"
        DoCmd.RunSQL SqlV

        Exit Function

    trata_erro:
       
        MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
        Exit Function

    End Function



    Espero ter ajudado.

    Boa sorte



    .................................................................................
    - Procure sempre anexar seu projeto para análise do problema/dúvida.
    - Ao copiar/colar um código VBA, procure entender seu funcionamento.
    - Se o problema foi resolvido, não se esqueça de marcar o tópico como RESOLVIDO.
    cleverson_manaus
    cleverson_manaus
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1000
    Registrado : 23/09/2011

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  cleverson_manaus em 11/3/2020, 15:29


    Boa tarde amigo,


    testei aqui no modo estrutura da consulta e deu certo conforme abaixo, alterei DATETIME para DATE e parênteses em [Profissão]:


    Código:
    CREATE TABLE TbMalaX (Colaborador VARCHAR(30) NOT NULL, NomeSolicitante VARCHAR(50) NOT NULL, Homonimo VARCHAR(2) NOT NULL, DataNascimento DATE, [Profissão] VARCHAR(25) NOT NULL, CONSTRAINT PK_Colaborador PRIMARY KEY (Colaborador))


    abraços,



    .................................................................................
    afro

    "É fazendo que se aprende a fazer aquilo que se deve aprender a fazer."(Aristóteles)
    - Dúvida resolvida!!! Marcar o tópico como resolvido!!!
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 11/3/2020, 16:41

    Caros amigos,

    Alexandre: Realmente funcionou mas ainda apresenta um "erro gerado - 0". Mesmo assim cria a tabela.

    Cleverson: Ainda tem erro de sintaxe, erro de compilação e não cria a tabela. Qual motivo que profissao tem que ficar dentro de parenteses e NomeSolicitante não?

    Abraços
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1062
    Registrado : 13/12/2016

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Alexandre Fim em 11/3/2020, 18:01

    Você colocou tratamento de erro na sua rotina que gera as tabelas?
    Esse erro é gerado porque provavelmente existe um tratamento de erro e está faltando o "Exit Function". Desta forma, a instrução é executada e o tratamento de erro também, e como não existe erro, o sistema exibe a mensagem com Erro 0.

    Ex.:

    Function CriaTabs()
    On Error GoTo trata_erro
    Dim SqlV As String


       SqlV = "CREATE TABLE CLIENTE " & _
       "(CLI_ID AUTOINCREMENT, " & _
       "CLI_NM VARCHAR(50) NOT NULL, " & _
       "CLI_CPF VARCHAR(11) NOT NULL," & _
       "CONSTRAINT PK_CLI_ID PRIMARY KEY (CLI_ID))"
       DoCmd.RunSQL SqlV
       
       
       SqlV = "CREATE TABLE TbMalaX " & _
       "(Colaborador VARCHAR(30) NOT NULL, " & _
       "NomeSolicitante VARCHAR(50) NOT NULL, " & _
       "Homonimo VARCHAR(2) NOT NULL," & _
       "DataNascimento DATE," & _
       "Profissão VARCHAR(25) NOT NULL," & _
       "CONSTRAINT PK_Colaborador PRIMARY KEY (Colaborador))"
       DoCmd.RunSQL SqlV

       Exit Function

    trata_erro:
       
       MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
       Exit Function

    End Function


    OBSERVAÇÃO: Ser for uma Private Sub ou Public Sub, então é utilizado o "Exit Sub". No exemplo acima é uma função, e ai usa-se o "Exit Function".

    Boa sorte


    .................................................................................
    - Procure sempre anexar seu projeto para análise do problema/dúvida.
    - Ao copiar/colar um código VBA, procure entender seu funcionamento.
    - Se o problema foi resolvido, não se esqueça de marcar o tópico como RESOLVIDO.
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 11/3/2020, 18:42

    Caro Alexandre,

    Você tem total razão. Eu havia tirado o código de dentro da função e colocado direto em um botão. Aí passou a aparecer esse erro. Voltei para a função e deu tudo certo. O botão agora chama a função.
    Agora outra dúvida. Como é o modo correto de criar três chaves nessa tabela? Isso é uma tabela de cadastro de eleitores. Seu formato é: Colaborador, que tem seus eleitores, caso coincida o nome do eleitor tem o homônimo. Campos esses que são chaves da tabela: Colaborador, NomeSolicitante, Homônimo. Tentei criar do mesmo modo do campo Colaborador e não aceita, diz que chave primária já existe.
    Como faço?

    Muito grato, Abraço
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 11/3/2020, 20:03

    Caro Alexandre,

    Consegui criar a chave composta nos três campos citados acima. Agora voltou o "erro gerado: - 0". Está com o tratamento de erro. Contudo executa tudo correto. O que será?
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 11/3/2020, 20:37

    Caro Alexandre,
    Veja abaixo o código completo. Funciona certinho mas aparece a mensagem de erro. De onde vem esse erro 0?


    Código ao pressionar o botão:

    Private Sub Comando330_Click()
    On Error GoTo trata_erro

    'Verifica se tabela existe. Se sim, deleta e cria novamente

    Dim rsk As DAO.Recordset
    Dim fncTabelaExiste As String
    On Error Resume Next
    Set rsk = CurrentDb.OpenRecordset("TbMalaX")
    If Err Then
       fncTabelaExiste = False
    Else
       fncTabelaExiste = True
    End If
    Set rsk = Nothing
    If fncTabelaExiste = True Then
    MsgBox "Tabela EXISTE"
    DoCmd.DeleteObject acTable, "TbMalaX"
    MsgBox "Tabela deletada para ser recriada..."
    Else
    MsgBox "Tabela NÃO EXISTE...Vai ser criada"

    End If
    Call CriaTabs

    'Copia conteúdo da tabela TbMala (original) para TbMalaX (temporária)

    Dim DB As Database
    Dim rs As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Set DB = CurrentDb()

    Set rs = DB.OpenRecordset("SELECT * FROM [TbMala]")
    Set rs2 = DB.OpenRecordset("SELECT * FROM [TbMalaX]")

    Do While Not rs.EOF
      rs2.AddNew
          rs2![Colaborador] = rs![Colaborador]
          rs2![NomeSolicitante] = rs![NomeSolicitante]
          rs2![DataNascimento] = rs![DataNascimento]
          rs2![Profissão] = rs![Profissao]
          rs2![Homônimo] = rs![Homônimo]
                 
          rs2.Update
          rs2.Requery
             
    rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
    rs2.Close
    Set rs2 = Nothing
    DB.Close
    Set DB = Nothing

    trata_erro:
       
       MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"

    End Sub


    Função Criar Tabela:

    Function CriaTabs()
    On Error GoTo trata_erro
    Dim SqlV As String


       SqlV = "CREATE TABLE TbMalaX " & _
       "(Colaborador VARCHAR(30) NOT NULL, " & _
       "NomeSolicitante VARCHAR(50) NOT NULL, " & _
       "Homônimo VARCHAR(2) NOT NULL," & _
       "DataNascimento DATE," & _
       "Profissão VARCHAR(25) NOT NULL," & _
       "CONSTRAINT PK_Colaborador PRIMARY KEY (Colaborador, NomeSolicitante, Homônimo))"

       DoCmd.RunSQL SqlV
       MsgBox "Tabela TbMalaX criada com sucesso..."

       Exit Function
       'End

    trata_erro:
       
       MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
       
       Exit Function
       'End

    End Function

    Muito Grato, grande abraço.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2141
    Registrado : 22/11/2016

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  DamascenoJr. em 12/3/2020, 03:18

    Veja um exemplo de código para função/procedimento bem simples.

    Código:
    Private/Public Function/Sub fncQualquer()

      CÓDIGO_QUE_FAZ_ALGUMA_COISA_PODENDO_GERAR_UM_ERRO

    End Function/Sub

    Nesse modelo bem simples, em caso de erro, o usuário pode ser encaminhado para a janela do VBE. Porém, é sempre bom preparar o código para saber tratar erros e descrevê-los para o usuário, assim auxiliando-o em como sanar o problema.

    Veja agora um exemplo de código para função/procedimento onde erros são tratados.
    Código:
    Private/Public Function/Sub fncQualquer()
    On Error GoTo trataErro 'em caso de erro vá para o ponto trataErro

      CÓDIGO_QUE_FAZ_ALGUMA_COISA_PODENDO_GERAR_UM_ERRO

      Exit Function/Sub 'ocorreu tudo bem e eu encerro a função/procedimento de modo "manual"

    'início do ponto que trata o erro. É preciso encerrar a função/procedimento "manualmente" como feito na linha anterior
    'do contrário, mesmo ocorrendo tudo bem, o código vai sempre vir até esse ponto, algo que só deve ocorrer em caso de erro
    trataErro:
      call msgbox("Erro nº " & err.number & " - " & err.description)

    end function/sub

    Pois bem, tendo feito toda a explicação buscando acrescentar no seu aprendizado então agora mostro esse finalzinho de um dos seus códigos e pergunto: o que está faltando?
    Código:
    ...
    ...
    rs.Close
    Set rs = Nothing
    rs2.Close
    Set rs2 = Nothing
    DB.Close
    Set DB = Nothing

    trata_erro:
     
      MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"

    End Sub

    Bons estudos.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 12/3/2020, 13:19

    Grande Mestre,

    Muito grato pela aula.

    Seria assim?
    ......

    Set DB = Nothing

    Exit Sub

    trata_erro:
     
    Call msgbox("Erro nº " & err.number & " - " & err.description)

    Abraços
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2141
    Registrado : 22/11/2016

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  DamascenoJr. em 13/3/2020, 01:01

    Finformática escreveu:Seria assim?
    Tente fazer essa alteração e dizer se resolveu. Se sim, é isso mesmo.

    E resolvendo, não esqueça de dar o tópico por resolvido.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 591
    Registrado : 23/03/2010

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Finformática em 14/3/2020, 14:17

    Bom dia,

    Tudo perfeito, tudo resolvido.
    Muito grato para todos do forum, em especial Cleverson, Alexandre e Damasceno, mestres que me deram mais umas aulas de grande valia.

    Muito obrigado, grande abraço.
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1062
    Registrado : 13/12/2016

    [Resolvido]Código criar tabela não funciona Empty Re: [Resolvido]Código criar tabela não funciona

    Mensagem  Alexandre Fim em 17/3/2020, 13:38

    Finformática,
    Sucesso no seu projeto !!!
    Abs


    .................................................................................
    - Procure sempre anexar seu projeto para análise do problema/dúvida.
    - Ao copiar/colar um código VBA, procure entender seu funcionamento.
    - Se o problema foi resolvido, não se esqueça de marcar o tópico como RESOLVIDO.

      Data/hora atual: 15/8/2020, 06:30