dbExpress - sqlQuery - Com parâmetros não vai!!!

Delphi

05/01/2004

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

Jpaulorio

Curtidas 0

Respostas

Lucas Silva

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!


GOSTEI 0
Jpaulorio

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

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.


GOSTEI 0
Lucas Silva

Lucas Silva

05/01/2004

você configurou os Parâmetros no Delphi??


[b:07dc2561e4]Nas propriedades da query -> Params...[/b:07dc2561e4]

Lucas!


GOSTEI 0
Marcelo.almeida

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


GOSTEI 0
Jpaulorio

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


GOSTEI 0
Roberson

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.


GOSTEI 0
Everton

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

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...


GOSTEI 0
Jurandi

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);


GOSTEI 0
Jpaulorio

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.


GOSTEI 0
Fer_nanda

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

Emerson Nascimento

05/01/2004

os campos do tipo DateTime devem receber parâmetros do tipo TimeStamp.


GOSTEI 0
Jpaulorio

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

Kotho

05/01/2004

no Oracle eu utilizo ftBCD para parametros numéricos...


GOSTEI 0
Jpaulorio

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!!!


GOSTEI 0
Rômulo Barros

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:


GOSTEI 0
POSTAR