GARANTIR DESCONTO

Fórum Problemas com ClientDataSet no BDS2006... #323748

19/06/2006

0

Amigos, estou migrando um ssitema meu que usa CDS... pois bem.. no Delphi 7 funcionava legal..

IBQuery -> DSP -> CDS

O DSP tá como AllowCommandText...

e no CDS:

cds.close;
cds.commandtext := ´select * from cliente´;
cds.open;



Pois bem, no BDS2006 dá [b:7cfddda6de]Empty SQL Statement[/b:7cfddda6de]

Pow, to passando o CommandText... o que pode ser? Bug do BDS2006? Alguem mais ta passando por isso? Já estou usando o Update 1 dele...

Desde já agradeço

[]s


Titanius

Titanius

Responder

Posts

19/06/2006

Adriano Santos

cds.close;
cds.commandtext := ´select * from cliente´;
cds.open;


Tinanius use maiúsculas na query, não sei se é isso, mas já tive outros tipos de problemas relacionados a maiúsculas.

cds.close;
cds.commandtext := ´SELECT * FROM CLIENTE´;
cds.open;



Responder

Gostei + 0

20/06/2006

Titanius

Amigo, não é isso nao... :(

Como eu também tive este ´probleminha´ todas minhas querys são maiusculas desde entao...


Muito doido.... será que é BUG?


Responder

Gostei + 0

20/06/2006

Paullsoftware

Não, não é um bug....

Vamos fazer um teste bem básico pq as vezes as configurações estão lá é bem simples, mais não há vemos então:

Adicione um SqlConnection, um SqlDataSet, um DataSetProvider e um ClientDataSet...

> Crie a conexão no SqlConnection para sua conexão
> Vincule o SqlDataSet ao SqlConnection e deixe a propriedade CommandText em branco
> Vincule o DataSetProvider ao SqlDataSet e altere a propriedade AllowCommandText para [b:01fefa1445]TRUE[/b:01fefa1445]
> vincule o ClientDataSet ao DataSetProvider através da ProviderName e coloque a propriedade CommandText do ClientDataSet como: ´select * from TABELA´ e mude Active para [b:01fefa1445]TRUE[/b:01fefa1445] veja se o erro ocorre!

se o erro ocorrer configure a propriedade CommandText do SqlDataSet igual a do ClientDataSet (´select * from TABELA´) e dê um Fech Params no ClientDataSet sei que é somente para carregar os paramentros né, mais vai lá saber 8) já resolveu alguns problemas meus...
espero ter ajudado :wink:


Responder

Gostei + 0

20/06/2006

Titanius

tentei e nada... :(

o que resolveu foi passar a sql pro IBQuery tbm.. doidera.. nunca fiz isso e sempre funcionou...


[]s


Responder

Gostei + 0

20/06/2006

Paullsoftware

tentei e nada... :( o que resolveu foi passar a sql pro IBQuery tbm.. doidera.. nunca fiz isso e sempre funcionou... []s

Realmente é estranho, eu uso BDS2006 e funciona perfeitamente...


Responder

Gostei + 0

20/06/2006

Titanius

Parece que este erro acontece com a seguinte mescla:

IBX + DSP + CDS

Com

DBX + DSP + CDS, me parece nao ter tido problema...

alguem confirma?


Como no meu caso é o prim eiro.. tá aih o erro!!

[]s


Responder

Gostei + 0

20/06/2006

Paullsoftware

É, realmente eu uso numa boa os componentes DbExpress + DSP + CDS e funciona perfeitamente, não posso falar a respeito sobre isso com IBx, pois, não uso...


Responder

Gostei + 0

20/06/2006

Adriano Santos

[b:ccdb26839f]Titanius[/b:ccdb26839f], agora entendi perfeitamente seu problema, porém existe um erro de utilização dos componentes. Veja, a lógica correta na utilização da MIDAS é passar para o componente acima do DataSetProvider todos os comandos SQL e seus parâmetros e abrir o ClientDataSet, pois ele que vai trazer os dados para o cliente.

procedure TForm1.Button1Click(Sender: TObject);
begin
  IBDatabase1.Connected := True;

  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add(´SELECT * FROM CLIENTES´);

  ClientDataSet1.Open;
end;


Então não irá conseguir mesmo abrir desta maneira. Este erro ocorre, pois não há comando SQL no IBQuery, mesmo marcando o DSP como AllowCommandText. Não sou expert nisso, talvez outros colegas possam responder com mais exatidão.


Responder

Gostei + 0

21/06/2006

Titanius

Justamente [b:c0ce4ec3ce]Adriano[/b:c0ce4ec3ce], é o que estou tentando entender.. pois no Delphi 7 eu passo direto pro CDS o SQL e pronto... funciona perfeitamente, agora no BDS2006 não.. eu tenho que passar pra Query... achei estranho isso...


[]s


Responder

Gostei + 0

21/06/2006

Adriano Santos

Justamente [b:321da3f3ee]Adriano[/b:321da3f3ee], é o que estou tentando entender.. pois no Delphi 7 eu passo direto pro CDS o SQL e pronto... funciona perfeitamente, agora no BDS2006 não.. eu tenho que passar pra Query... achei estranho isso... []s


[b:321da3f3ee]titanius[/b:321da3f3ee] fiz um teste no Delphi 6.0 pq não tenho 7.0 aqui, acontece como vc disse, ou seja, funciona. Véio, acho que vai ter que mudar a programação. Puts, num sei. :wink:


Responder

Gostei + 0

21/06/2006

Miuuudo

oi adriano...

eu tb não posso te ajudar
mas vim deixar um comentário...

eu deixei de usar o commandtext do ClientDataSet e usei diretamente o do SQLQuery pois, em alguns selects com UNION se não tivesse um espaço em branco antes do select ele dava um erro de sintaxe que não existia. Quando eu colocava um espaço em branco no inicio funcionava.

Jogando diretamente para o SQLQuery e funciona tudo beleza.

Estou em fase de aprendizado ainda mas é sempre bom falar alguma coisa.

um abraço


Responder

Gostei + 0

21/06/2006

Titanius

Realmente, se você procurar na literatura, o certo é jogar na Query... estranho no Delphi 7 funcionar sem... :roll: vai entender...

Obrigado a todos

[]s


Responder

Gostei + 0

21/06/2006

Adriano Santos

Realmente, se você procurar na literatura, o certo é jogar na Query... estranho no Delphi 7 funcionar sem... :roll: vai entender... Obrigado a todos []s


Eu acredito que no Delphi 2005 e 2006 isso tenha se tornado mais evidente talvez por uma atualização na MIDAS. Sei lá, to chutando.


Responder

Gostei + 0

13/09/2007

Carlos_braz

Olá Pessoal

Também estou tendo esse problema ao tentar passar algumas aplicações para D2006.

Preciso migrar algumas aplicações de Delphi 7 para 2006 ou 2007 e algumas coisas não estão funcionando como no deveria.
No D7 funciona beleza e no 2006 não. Aparentemente coisa simples...O codigo abaixo deveria funcionar em ambos:
Eu tento passar os parametros da pesquisa nessa sequencia.

-Fecho o ClientDataSet
-Passo os parametros
-E ativo

Tem esse procedimento em vários lugares, mais ou menos dessa forma. Como tá logo abaixo funciona só no Delphi7 e 2006 não.

begin ClientDataSet_cts_receber.Close; SQLQuery_cts_receber.Params[0].Value := ClientDataSet_pedidoscodigousuario.AsString; SQLQuery_cts_receber.Params[1].Value := ´N´+ClientDataSet_pedidoscodigopedido.AsString; SQLQuery_cts_receber.Params[2].Value := 1; // nos pedidos somente 1 parcela. ClientDataSet_cts_receber.Active := true; if (ClientDataSet_cts_receberCodigo.IsNull) then begin ClientDataSet_cts_receber.Close; SQLQuery_cts_receber.Params[0].Value := ClientDataSet_pedidoscodigousuario.AsString; SQLQuery_cts_receber.Params[1].Value := ´P´+ClientDataSet_pedidoscodigopedido.AsString; SQLQuery_cts_receber.Params[2].Value := 1; // nos pedidos somente 1 parcela. ClientDataSet_cts_receber.Active := true; end; end;

Para funcionar em ambos experimentei mudar a seqüência:
-Passo os parametros
-Fecho o ClientDataSet
-E ativo

Como mostro logo abaixo:
ClientDataSet_cts_receber.Params[0].Value := ClientDataSet_pedidoscodigousuario.AsString; ClientDataSet_cts_receber.Params[1].Value := ´N´+ClientDataSet_pedidoscodigopedido.AsString; ClientDataSet_cts_receber.Params[2].Value := 1; // nos pedidos somente 1 parcela. ClientDataSet_cts_receber.Close; ClientDataSet_cts_receber.Active := true;

Funciona beleza assim, só que exige uma revisão de todo os códigos. Alguem aí tem uma idéia de como manipular o componente sem que se exija essa revisão?


Responder

Gostei + 0

13/09/2007

Carlos_braz

Uma correção para a ultima citação:

ClientDataSet_cts_receber.Params[0].Value := ClientDataSet_pedidoscodigousuario.AsString; ClientDataSet_cts_receber.Params[1].Value := ´N´+ClientDataSet_pedidoscodigopedido.AsString; ClientDataSet_cts_receber.Params[2].Value := 1; // nos pedidos somente 1 parcela. ClientDataSet_cts_receber.Close; ClientDataSet_cts_receber.Active := true;


Deve ser:
SQLQuery_cts_receber.Params[0].Value :=ClientDataSet_pedidoscodigousuario.AsString; SQLQuery_cts_receber.Params[1].Value :=´P´+ClientDataSet_pedidoscodigopedido.AsString; SQLQuery_cts_receber.Params[2].Value := 1; // nos pedidos somente 1 parcela. ClientDataSet_cts_receber.Close; ClientDataSet_cts_receber.Active := true;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar