dbExpress - sqlQuery - Com parâmetros não vai!!!
Estou começando a utilizar a palheta dbExpress, mas assim que tentei passar um select de uma query do BDE para uma sqlQuery do dbExpress me senti frustrado pois a mesma só abre se eu substituir os parâmetros (:alguma_coisa) por valores (´alguma_data´) por exemplo. Gostaria de saber se alguém já obteve o mesmo erro e se/como solucionou, grato, João Paulo.
Jpaulorio
Curtidas 0
Respostas
Lucas Silva
05/01/2004
Pelo que sei...
Se a query tem parâmetros, quando voçê for abrir ela sempre tem que dar uma valor para estes parâmetros, se não ela não te retorna nenhum resultado.
Lucas!
Se a query tem parâmetros, quando voçê for abrir ela sempre tem que dar uma valor para estes parâmetros, se não ela não te retorna nenhum resultado.
Lucas!
GOSTEI 0
Jpaulorio
05/01/2004
Eu sei... mas quando digo que substituo os parâmetros não é em tempo de execução, mas sim em tempo de design. No BDE quando vc abre uma query em tempo de design não é necessário passar valores para os parâmetros, não sei se com dbExpress é a mesma coisa. Mas mesmo assim... qnd passo os parâmetros em tempo de execução a query não abre e retorna um erro.
GOSTEI 0
Jpaulorio
05/01/2004
Acredito que generalizei demais na primeira mensagem. Acredito que o problema só aparece quando uso parâmetros dentro de uma subquery,
sds, João Paulo.
sds, João Paulo.
GOSTEI 0
Lucas Silva
05/01/2004
você configurou os Parâmetros no Delphi??
[b:07dc2561e4]Nas propriedades da query -> Params...[/b:07dc2561e4]
Lucas!
[b:07dc2561e4]Nas propriedades da query -> Params...[/b:07dc2561e4]
Lucas!
GOSTEI 0
Marcelo.almeida
05/01/2004
já tentou ligar o SqlQuery no ClientDataSet, e clicar com o botão direito no ClientDataSet e clicar no FetchParams
O FetchParams busca os parametros da query e vc passa a direcionar o codigo para ClientDataSet.
Tipo
ClientDataSet.Params.ParamByName(´Codigo´).AsInteger := Int_Codigo;
Até mais
Marcelo
O FetchParams busca os parametros da query e vc passa a direcionar o codigo para ClientDataSet.
Tipo
ClientDataSet.Params.ParamByName(´Codigo´).AsInteger := Int_Codigo;
Até mais
Marcelo
GOSTEI 0
Jpaulorio
05/01/2004
Pessoal já tentei tudo isso e mais um pouco... na realidade eu dissequei o meu select até que a query abrisse... e descobri algumas coisas....
Parâmetros do tipo datetime não são aceitos... se tentar abrir uma query com esse tipo de parâmetro aparecerá o erro ´invalid field type´
Parâmetros dentro de sub-select também não vai... o erro deixa isso bem claro...
Parâmetros dentro de funções, case... nem pensar...
Para aqueles que defendem o dbExpress vai um recado... só vou usar no dia em que eu pegar o meu select que está numa query BDE e puder abrí-lo sem ter que fazer gambiarras e coisas do tipo... abraço, João Paulo
Parâmetros do tipo datetime não são aceitos... se tentar abrir uma query com esse tipo de parâmetro aparecerá o erro ´invalid field type´
Parâmetros dentro de sub-select também não vai... o erro deixa isso bem claro...
Parâmetros dentro de funções, case... nem pensar...
Para aqueles que defendem o dbExpress vai um recado... só vou usar no dia em que eu pegar o meu select que está numa query BDE e puder abrí-lo sem ter que fazer gambiarras e coisas do tipo... abraço, João Paulo
GOSTEI 0
Roberson
05/01/2004
No meu caso estah dando o mesmo erro...
Porem eu descobri que soh dah o erro de invalid data type quando eu coloco asinteger ou as datetime.
Acredito que tenho uma explicacao para isto: como o acesso eh direto ao banco, o proprio nao tem estes tipos integer e datetime. No meu caso em que desenvolvo com Oracle o mesmo utiliza number para identificar um tipo integer.
Agora teria que achar uma propriedade no componente para que ele entenda estes tipos, ou mesmo faça algum tipo de alteração.
Espero ter ajudado de alguma forma.
Porem eu descobri que soh dah o erro de invalid data type quando eu coloco asinteger ou as datetime.
Acredito que tenho uma explicacao para isto: como o acesso eh direto ao banco, o proprio nao tem estes tipos integer e datetime. No meu caso em que desenvolvo com Oracle o mesmo utiliza number para identificar um tipo integer.
Agora teria que achar uma propriedade no componente para que ele entenda estes tipos, ou mesmo faça algum tipo de alteração.
Espero ter ajudado de alguma forma.
GOSTEI 0
Everton
05/01/2004
João Paulo, acho que o seu problema é o mesmo do Roberson ... ao invés de colocar AsDateTime coloque AsDate.
GOSTEI 0
Jpaulorio
05/01/2004
estou decepcionado com o dbExpress...
não sei se tem a ver com eu usar o mssql 2000, mas não consigo usar parâmetros do tipo date ou datetime... não posso usar parametros dentro de sub-selects.... será q ele só funciona com o interbase?? e ainda tem gente que critica o BDE...
não sei se tem a ver com eu usar o mssql 2000, mas não consigo usar parâmetros do tipo date ou datetime... não posso usar parametros dentro de sub-selects.... será q ele só funciona com o interbase?? e ainda tem gente que critica o BDE...
GOSTEI 0
Jurandi
05/01/2004
PARA QUEM ESTÁ USANDO DBEXPRESS COM DELPHI 6.
COM DB ORACLE E PARAMETROS DO TIPO DATE E DATETIME PASSEM PARAMETROS DO TIPO SQLTIMESTAMP.
VEJAM AS POSSIVEIS FUNCOES DE CONVERSAO NO HELP.
SqlWork.ParamByName(´Data_Inicial´).asSqlTimeStamp := DateTimeToSqlTimeStamp(WData_Inicial);
COM DB ORACLE E PARAMETROS DO TIPO DATE E DATETIME PASSEM PARAMETROS DO TIPO SQLTIMESTAMP.
VEJAM AS POSSIVEIS FUNCOES DE CONVERSAO NO HELP.
SqlWork.ParamByName(´Data_Inicial´).asSqlTimeStamp := DateTimeToSqlTimeStamp(WData_Inicial);
GOSTEI 0
Jpaulorio
05/01/2004
bem... dessa vez foi a gota d´água... aqui vai o seguinte select:
SELECT CLIE_ID FROM TBCLIE WHERE CLIE_ID = :CLIE_ID
vamos lá... a tabela em questão (TBCLIE) se encontra num banco de dados MSSQL 2000. O campo CLIE_ID é do tipo SMALLINT.
Nem preciso dizer que esse select abre numa query do BDE sem problemas, mas com o DBEXPRESS....
Coloquei esse select na propriedade command text de um TSQLDATASET
e ele automaticamente setou o tipo do parâmetro :CLIE_ID para smallint.
Logo pensei... dessa vez vai... mas...
Agora tenta ativar o dataset.... nem com reza braba... o erro:
INVALID PARAMETER
Então eu pergunto... é a minha DLL q não funciona direito? Esqueci alguma coisa? Ou o quê?
Abraço, João Paulo.
SELECT CLIE_ID FROM TBCLIE WHERE CLIE_ID = :CLIE_ID
vamos lá... a tabela em questão (TBCLIE) se encontra num banco de dados MSSQL 2000. O campo CLIE_ID é do tipo SMALLINT.
Nem preciso dizer que esse select abre numa query do BDE sem problemas, mas com o DBEXPRESS....
Coloquei esse select na propriedade command text de um TSQLDATASET
e ele automaticamente setou o tipo do parâmetro :CLIE_ID para smallint.
Logo pensei... dessa vez vai... mas...
Agora tenta ativar o dataset.... nem com reza braba... o erro:
INVALID PARAMETER
Então eu pergunto... é a minha DLL q não funciona direito? Esqueci alguma coisa? Ou o quê?
Abraço, João Paulo.
GOSTEI 0
Fer_nanda
05/01/2004
Pelo que sei...
Se a query tem parâmetros, quando voçê for abrir ela sempre tem que dar uma valor para estes parâmetros, se não ela não te retorna nenhum resultado.
O Lucas tem razão, vc precisa passar algum valor para o parametro, provavelmente vc está tentando ativá-lo em tempo de projeto não é? então faça o seguinte teste: na propriedade value do parametro CLIE_ID coloque 1, depois tente ativar.
GOSTEI 0
Emerson Nascimento
05/01/2004
os campos do tipo DateTime devem receber parâmetros do tipo TimeStamp.
GOSTEI 0
Jpaulorio
05/01/2004
[quote:c104b0ba02]
Pelo que sei...
Se a query tem parâmetros, quando voçê for abrir ela sempre tem que dar uma valor para estes parâmetros, se não ela não te retorna nenhum resultado.
O Lucas tem razão, vc precisa passar algum valor para o parametro, provavelmente vc está tentando ativá-lo em tempo de projeto não é? então faça o seguinte teste: na propriedade value do parametro CLIE_ID coloque 1, depois tente ativar.[/quote:c104b0ba02]
Se eu trocar o campo ex: SELECT FANT FROM TBCLIE WHERE FANT = :FANT (fant é do tipo varchar)
daí funciona mesmo sem passar valor pro parâmetro em tempo de projeto :)
Acredito que o problema esteja no tipo int e smallint, alguma coisa no driver do dbExpress... a mesma coisa q acontece com o tipo datetime.
GOSTEI 0
Kotho
05/01/2004
no Oracle eu utilizo ftBCD para parametros numéricos...
GOSTEI 0
Jpaulorio
05/01/2004
GALERA!!!!! ESTOU FELIZ POR FINALMENTE PODEMOS FINALIZAR ESSE TÓPICO!!!
É o seguinte...
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=20519
Entre vários outros bugs encontrei o meu caso... se houver um campo do tipo INT ou SMALLINT que seja NOT NULL dá pau...
Outra coisa... quando uso parâmetros em subquery (já tinha reclamado disso no início do tópico).. também dava pau...
baixei a tal DLL e vou testar aqui... divulguem esse link pois muita gente deve estar tão decepcionada (pra não falar outra coisa) quanto eu!!!
abraço!!!
É o seguinte...
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=20519
Entre vários outros bugs encontrei o meu caso... se houver um campo do tipo INT ou SMALLINT que seja NOT NULL dá pau...
Outra coisa... quando uso parâmetros em subquery (já tinha reclamado disso no início do tópico).. também dava pau...
baixei a tal DLL e vou testar aqui... divulguem esse link pois muita gente deve estar tão decepcionada (pra não falar outra coisa) quanto eu!!!
abraço!!!
GOSTEI 0
Rômulo Barros
05/01/2004
Caro amigos... utilizo dbexpress com oracle 8i e sempre tive problemas com parâmetros... Após dias e dias de pesquisas, percebi que, no ORACLE, todos os paraâmetros tem que ser passados como tipo String(AsString). Daí então, todos os meus problemas acabarão......
Caro João Paulo, porque vc não tenta passar seus parâmetros como string?
OBS: Teremos que configurar os parâmetros na propriedade PARAMS da query e indicar duas opções: DataType: ftString; ParamType:ptInput :roll:
Caro João Paulo, porque vc não tenta passar seus parâmetros como string?
OBS: Teremos que configurar os parâmetros na propriedade PARAMS da query e indicar duas opções: DataType: ftString; ParamType:ptInput :roll:
GOSTEI 0