none
Stored procedures no Access RRS feed

  • Pergunta

  • Olá pessoal,

    Estou me baseando neste artigo http://www.devcity.net/Articles/18/msaccess_sp.aspx

     para criar stored procedures no Access.

    Está funcionando direitinho, desde que as instruções sejam básicas. No SQL tenho a seguinte procedure para listar registros com ou sem parâmetros:

    CREATE PROCEDURE spListarStatusChamados @parametro int = null
    AS
    SELECT * FROM TStatusChamados

    WHERE  campo = isnull(@parametro,campo)
    ORDER BY IdStatusChamado

    No SQL funciona, porém quando tento criá-la no Access dá erro. Alguém tem idéia de como fazer a mesma instrução no Access?

    Obrigada.

    quarta-feira, 19 de setembro de 2007 19:29

Todas as Respostas

  • E como vc disse, procedures simples, talves ele nao aceite parametros.

    Olha, pra ser bem sincero, ja pensou em usar o SQL Express ou o MSDE, alem de gratuitos sao bem melhores.

    quarta-feira, 19 de setembro de 2007 19:55
  • Então Rick, também concordo que o ideal seria usar SQL, mas o cliente vai hospedar na Locaweb e ele tem um plano de hospedagem básica que não dá direito a SQL, ele não quer mudar de plano, pagar mais, etc. É por isso que estou tentando fazer isso funcionar com Access, mas pelo que percebi até agora, acho que não vou poder usar procedures.

    Obrigada!

    quarta-feira, 19 de setembro de 2007 20:19
  •  

    Oi Vivi...

     

    Pelo que vi naquele link que você passou, não se pode (ou pelo menos não é recomendável) usar o @ nos parâmetros... Tente criar sem o @ nos parâmetros.

     

    Fora isso, realmente, parece ser apenas para coisas simples.

     

     

     

    Abraço

    quarta-feira, 19 de setembro de 2007 22:13
  • Essa e nova para mim, nao sabia mesmo que store procedure e possivel no access, entao vamos la pelo que eu li no arqitigo vc. deve criar os parametros com os tipos de dados do access e sem @ mesmo.

     

    Obrigado pois aprendi mais uma, vivendo e aprendendo.

     

    Abs.;

     

    quinta-feira, 20 de setembro de 2007 10:25
  • Marcelo,

     

    É isso mesmo, no Access funciona sem o @!!!

    quinta-feira, 20 de setembro de 2007 12:09
  •  

    Marcelo,

     

    Realmente, eu já tinha lido sobre isso. Mas isso é de uma versão mais recente do MDAC... Antes não tinha. Eu somente tinha lido sobre isso, nunca implementei nada no Access nesse sentido.

     

     

    Abraço

    quinta-feira, 20 de setembro de 2007 20:53
  • Alexandre,

     

    Se não estiver enganado, é a partir da versão 2.80 SP1 que é possível trabalhar com o Stored Procedure no Access, isso no Access 2003.

    sexta-feira, 21 de setembro de 2007 12:19
  •  

    Junior,

     

    Versão 2.7 ou superior...

    http://msdn2.microsoft.com/en-us/library/k10148y1(VS.80).aspx

     

    Pra quem tem Windows XP ou 2003 já funciona... Pro 2000 tem que atualizar.

     

     

    Abraço

    sexta-feira, 21 de setembro de 2007 16:02
  • Então pessoal, tirando a @ consigo criar as SPs, porém elas não funcionam corretamente. Pelo que deu pra perceber até agora, se a SP for simples, tudo bem, mas se for um poquinho mais complexa não dá muito certo.

    No meu caso acho que não poderei usar.
    Obrigada a todos.

    sexta-feira, 21 de setembro de 2007 19:07
  •  

    Vivi,

     

    Você tem como postar aqui exemplos do que funciona e o que não?? E também o que acontece??

     

     

    Abraço

    sexta-feira, 21 de setembro de 2007 19:37
  • Olá, testei com Select, Insert, Update e Delete e funcionou. Ex.:

    "CREATE PROC spListarStatusChamados AS SELECT * FROM TStatusChamados;"


    "CREATE PROC spExcluirStatusChamados(IdStatusChamado LONG) AS DELETE FROM TStatusChamados WHERE IdStatusChamado = @IdStatusChamado;"

     

    "CREATE PROC spIncluirStatusChamados(NomeStatusChamado VARCHAR(30), "Ativo BIT) AS INSERT INTO TStatusChamados (NomeStatusChamado, Ativo) Values (NomeStatusChamado, Ativo);"


    "CREATE PROC spAlterarStatusChamados(IdStatusChamado LONG, NomeStatusChamado VARCHAR(30), Ativo BIT) AS UPDATE TStatusChamados SET NomeStatusChamado = NomeStatusChamado, Ativo = Ativo WHERE IdStatusChamado = IdStatusChamado;"

     

    Testei com a procedure a seguir que funciona no SQL, e a mesma não funciona (com ou sem a @):

    CREATE PROC spListarStatusChamados @IdStatusChamado int = null AS SELECT * FROM TStatusChamados WHERE  IdStatusChamado= isnull(@IdStatusChamado,IdStatusChamado) ORDER BY IdStatusChamado

    Obrigada.

    sexta-feira, 21 de setembro de 2007 19:49
  •  

    Vivi,

     

    Deve ser alguma coisa com as funções do SQL. Acho que teria que fazer com IF, tipo:

    IF @Parametro IS NULL

    SELECT.... WHERE Campo = @Parametro

    ELSE

    SELECT .... ORDER BY

     

     

    Vai ter que "adaptar" os procedimentos, vai dar um trabalhão, mas deve funcionar.

     

     

    Abraço

    sexta-feira, 21 de setembro de 2007 20:40
  • Olá pessoal, tentei assim:

    sSQL = "CREATE PROC spListarStatusChamados2(IdStatusChamado LONG) AS " _

    & "IF IdStatusChamado IS NULL then " _

    & "SELECT * FROM TStatusChamados; " _

    & "Else " _

    & "SELECT * FROM TStatusChamados WHERE IdStatusChamado = IdStatusChamado; " _

    & "End if"



    Mas deu a seguinte msg de erro:

    Instrução SQL inválida. 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' esperado.

    Alguém tem uma idéia?
    Obrigada.

    quinta-feira, 27 de setembro de 2007 19:05
  •  

    vivi, nao sou experto em access mais acho que o teste do is null poderia ser assim

     

     if isnull(campo) = True then

       ......

     

    Else

      .....

     

    End if

     

    Abs;

    quinta-feira, 27 de setembro de 2007 19:18
  • Oi Marcelo,

    Tentei como vc disse mas dá o mesmo erro...

    Obrigada.

    quinta-feira, 27 de setembro de 2007 19:58
  •   Ola marcelo ja trabalho com stored procedure no access e até onde eu sei é q nem o pessoal tem falado ele n aceita clausulas mais complexas, if, esle, case, nada disso... e acho tb que ele n aceita essa operação isnull(@IdStatusChamado,IdStatusChamado)

     Se vc esta querendo verificar se um valor é nulo é só fazer (IdStatusChama is null) ou (IdStatusChama = "").

    Outra coisa parametros no access é assim [:nomedoparametro].

    Espero ter ajudado...

    sexta-feira, 26 de outubro de 2007 11:49