Discussion:
Executar função de BD na chamada do command.
(too old to reply)
jsoda
2006-03-11 05:59:26 UTC
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.

Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".

No programa : Fazendo as devidas abertura de conexão, etc, etc...

strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"

objCMD.ExecuteReader()

Nesse momento, dá o erro de que a função não está definida.

Abraços,
--
jsoda.evfx
Lipe
2006-03-11 14:58:27 UTC
jsoda, pelo que estou a ver pelo seu codigo, voçê tem uma função funcTIRA().
Será que ela existe no seu projecto?

abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx
Lipe
2006-03-11 15:00:27 UTC
esta linha estara a faltar a condição where:
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"

deverá ser:

strsql = "Select * from V_SEM_ACENTOS where cpo_sem like '%" &
textbox.text.trim &
"%'"

abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx
jsoda
2006-03-11 16:47:36 UTC
desculpe...essa foi erro na digitação deste post...Obrigado !
--
jsoda.evfx
Post by jsoda
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
strsql = "Select * from V_SEM_ACENTOS where cpo_sem like '%" &
textbox.text.trim &
"%'"
abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx
Lipe
2006-03-11 15:10:26 UTC
recomendo ainda que voçê use parameters. Veja um exeplo de como carregar uma
gatagridview com os dados filtrados:

Dim myCommLin As SqlCommand = myCon.CreateCommand()
Dim myCB As String = "SELECT * From MovArmResiduosLin " & _
"WHERE Descricao LIKE @Filtro ORDER BY IdCab DESC"

myCommLin.CommandText = myCB
myCommLin.Parameters.Add("@Filtro", SqlDbType.VarChar).Value =
txtFiltro.Text & "%"

Dim myDA As New SqlDataAdapter(myCommLin)
myDS.Clear()
myDA.Fill(myDS, "MovArmResiduosLin")
Grade.DataSource = ""
Grade.DataSource = myDS.Tables("MovArmResiduosLin")

abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx
jsoda
2006-03-11 16:51:16 UTC
Eu costumo usar PARAMETERS, sim, mas neste caso acho que não precisa, pois há
uma VIEW no BD que não precisa de parametros, mesmo assim, vou tentar mudar o
"MODUS OPERANDI".

Obrigado, Lipe.
Assim mesmo, se souber de alguma coisa, me diz, ok ?

Abração,
--
jsoda.evfx
Post by Lipe
recomendo ainda que voçê use parameters. Veja um exeplo de como carregar uma
Dim myCommLin As SqlCommand = myCon.CreateCommand()
Dim myCB As String = "SELECT * From MovArmResiduosLin " & _
myCommLin.CommandText = myCB
txtFiltro.Text & "%"
Dim myDA As New SqlDataAdapter(myCommLin)
myDS.Clear()
myDA.Fill(myDS, "MovArmResiduosLin")
Grade.DataSource = ""
Grade.DataSource = myDS.Tables("MovArmResiduosLin")
abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx
Lipe
2006-03-12 01:03:27 UTC
jsoda, haveria uma forma de voçê fazer isso directamente sem função alguma...
no entanto, ficaria um código demasiado longo... mas funciona comigo com
apenas 3 acaractéres... ou seja, voçê poderia ir buscar a descrição
directamente à base de dados sem os acentos. A instrução seria uma coisa
deste tipo....

"select * from SuaTabela where
replace(replace(replace(descricao,'é','e'),'ó','o'),'í','i') LIKE ... etc
etc".
Não é elegante e poderá haver outras formas de contornar... mas esta
funciona com toda a certeza.

abraço
Post by jsoda
Eu costumo usar PARAMETERS, sim, mas neste caso acho que não precisa, pois há
uma VIEW no BD que não precisa de parametros, mesmo assim, vou tentar mudar o
"MODUS OPERANDI".
Obrigado, Lipe.
Assim mesmo, se souber de alguma coisa, me diz, ok ?
Abração,
--
jsoda.evfx
Post by Lipe
recomendo ainda que voçê use parameters. Veja um exeplo de como carregar uma
Dim myCommLin As SqlCommand = myCon.CreateCommand()
Dim myCB As String = "SELECT * From MovArmResiduosLin " & _
myCommLin.CommandText = myCB
txtFiltro.Text & "%"
Dim myDA As New SqlDataAdapter(myCommLin)
myDS.Clear()
myDA.Fill(myDS, "MovArmResiduosLin")
Grade.DataSource = ""
Grade.DataSource = myDS.Tables("MovArmResiduosLin")
abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx
jsoda
2006-03-12 03:12:27 UTC
Olá, Lipe ! Estamos nós aqui tentando as várias formas de executar esse
negócio...rs. Obrigado, hein, por essa força. Você merece um prêmio !

Tenho notado que vc está se esforçando para ajudar-me a solucionar esse
problema, mesmo pq, vc está respondendo 2 posts que coloquei.
Deixe-me fazer uma pergunta : Esse teste q vc colocou agora, vc testou
diretamente no ACCESS ? Pois é, a minha função também e funciona lá. Esse
seu teste, funciona, sim, já havia feito...e como vc mesmo disse, não é muito
elegante e com certeza ficará muito longa, já que preciso trocar todas as
opções de acentuação. Veja só :
"àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ".
São muitos replaces ....e com certeza, no banco ele funciona.
Quando me deparei com esse problema resolvi testar com uma FUNÇÃO UDF.
Beleza !!! Funcionou ....MAS ...lá no BD.
O problema é que qdo faço a chamda pelo VB.net, com parâmetros e tal, ele
dispara esse erro : e não entendo, já que funciona lá no BD :
{"Função 'SemAcento' indefinida na expressão."}
{"Função 'Replace' indefinida na expressão."}

código : -2147217900

Entendeu ?

Estou usando OleDBCommand...será que tem limitações ???

Valeu, mesmo assim...vou tentando...afinal, tem que existir uma forma, certo ?

Abraços,
--
jsoda.evfx
Post by Lipe
jsoda, haveria uma forma de voçê fazer isso directamente sem função alguma...
no entanto, ficaria um código demasiado longo... mas funciona comigo com
apenas 3 acaractéres... ou seja, voçê poderia ir buscar a descrição
directamente à base de dados sem os acentos. A instrução seria uma coisa
deste tipo....
"select * from SuaTabela where
replace(replace(replace(descricao,'é','e'),'ó','o'),'í','i') LIKE ... etc
etc".
Não é elegante e poderá haver outras formas de contornar... mas esta
funciona com toda a certeza.
abraço
Post by jsoda
Eu costumo usar PARAMETERS, sim, mas neste caso acho que não precisa, pois há
uma VIEW no BD que não precisa de parametros, mesmo assim, vou tentar mudar o
"MODUS OPERANDI".
Obrigado, Lipe.
Assim mesmo, se souber de alguma coisa, me diz, ok ?
Abração,
--
jsoda.evfx
Post by Lipe
recomendo ainda que voçê use parameters. Veja um exeplo de como carregar uma
Dim myCommLin As SqlCommand = myCon.CreateCommand()
Dim myCB As String = "SELECT * From MovArmResiduosLin " & _
myCommLin.CommandText = myCB
txtFiltro.Text & "%"
Dim myDA As New SqlDataAdapter(myCommLin)
myDS.Clear()
myDA.Fill(myDS, "MovArmResiduosLin")
Grade.DataSource = ""
Grade.DataSource = myDS.Tables("MovArmResiduosLin")
abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx
jsoda
2006-03-12 18:00:27 UTC
Olá Lipe !
Encontrei a SOLUÇÃO, veja :

http://www.microsoft.com/brasil/msdn/newsgroups/default.mspx?dg=microsoft.public.br.dotnet.languages.vb&mid=442f1687-2486-48b4-a7ea-b2e16a928371
--
jsoda.evfx
Post by jsoda
Olá, Lipe ! Estamos nós aqui tentando as várias formas de executar esse
negócio...rs. Obrigado, hein, por essa força. Você merece um prêmio !
Tenho notado que vc está se esforçando para ajudar-me a solucionar esse
problema, mesmo pq, vc está respondendo 2 posts que coloquei.
Deixe-me fazer uma pergunta : Esse teste q vc colocou agora, vc testou
diretamente no ACCESS ? Pois é, a minha função também e funciona lá. Esse
seu teste, funciona, sim, já havia feito...e como vc mesmo disse, não é muito
elegante e com certeza ficará muito longa, já que preciso trocar todas as
"àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ".
São muitos replaces ....e com certeza, no banco ele funciona.
Quando me deparei com esse problema resolvi testar com uma FUNÇÃO UDF.
Beleza !!! Funcionou ....MAS ...lá no BD.
O problema é que qdo faço a chamda pelo VB.net, com parâmetros e tal, ele
{"Função 'SemAcento' indefinida na expressão."}
{"Função 'Replace' indefinida na expressão."}
código : -2147217900
Entendeu ?
Estou usando OleDBCommand...será que tem limitações ???
Valeu, mesmo assim...vou tentando...afinal, tem que existir uma forma, certo ?
Abraços,
--
jsoda.evfx
Post by Lipe
jsoda, haveria uma forma de voçê fazer isso directamente sem função alguma...
no entanto, ficaria um código demasiado longo... mas funciona comigo com
apenas 3 acaractéres... ou seja, voçê poderia ir buscar a descrição
directamente à base de dados sem os acentos. A instrução seria uma coisa
deste tipo....
"select * from SuaTabela where
replace(replace(replace(descricao,'é','e'),'ó','o'),'í','i') LIKE ... etc
etc".
Não é elegante e poderá haver outras formas de contornar... mas esta
funciona com toda a certeza.
abraço
Post by jsoda
Eu costumo usar PARAMETERS, sim, mas neste caso acho que não precisa, pois há
uma VIEW no BD que não precisa de parametros, mesmo assim, vou tentar mudar o
"MODUS OPERANDI".
Obrigado, Lipe.
Assim mesmo, se souber de alguma coisa, me diz, ok ?
Abração,
--
jsoda.evfx
Post by Lipe
recomendo ainda que voçê use parameters. Veja um exeplo de como carregar uma
Dim myCommLin As SqlCommand = myCon.CreateCommand()
Dim myCB As String = "SELECT * From MovArmResiduosLin " & _
myCommLin.CommandText = myCB
txtFiltro.Text & "%"
Dim myDA As New SqlDataAdapter(myCommLin)
myDS.Clear()
myDA.Fill(myDS, "MovArmResiduosLin")
Grade.DataSource = ""
Grade.DataSource = myDS.Tables("MovArmResiduosLin")
abraço
Post by jsoda
Olá pessoal !
Alguém sabe como fazer para executar uma função do ACCESS através da chamada
de um command ? No access, funciona legal.
Exemplo: No access tem um módulo que tira acentuação dos nomes. Tenho uma
VIEW chamada V_SEM_ACENTOS que executa : "Select cpo1, cpo2, funcTIRA(cpo3)
as cpo_sem from tabela".
No programa : Fazendo as devidas abertura de conexão, etc, etc...
strsql = "Select * from V_SEM_ACENTOS cpo_sem like '%" & textbox.text.trim &
"%'"
objCMD.ExecuteReader()
Nesse momento, dá o erro de que a função não está definida.
Abraços,
--
jsoda.evfx