Problemas com ClientDataSet no BDS2006...
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:
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
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
Curtidas 0
Respostas
Adriano Santos
19/06/2006
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;
GOSTEI 0
Titanius
19/06/2006
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?
Como eu também tive este ´probleminha´ todas minhas querys são maiusculas desde entao...
Muito doido.... será que é BUG?
GOSTEI 0
Paullsoftware
19/06/2006
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:
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:
GOSTEI 0
Titanius
19/06/2006
tentei e nada... :(
o que resolveu foi passar a sql pro IBQuery tbm.. doidera.. nunca fiz isso e sempre funcionou...
[]s
o que resolveu foi passar a sql pro IBQuery tbm.. doidera.. nunca fiz isso e sempre funcionou...
[]s
GOSTEI 0
Paullsoftware
19/06/2006
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...
GOSTEI 0
Titanius
19/06/2006
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
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
GOSTEI 0
Paullsoftware
19/06/2006
É, 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...
GOSTEI 0
Adriano Santos
19/06/2006
[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.
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.
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.
GOSTEI 0
Titanius
19/06/2006
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
[]s
GOSTEI 0
Adriano Santos
19/06/2006
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:
GOSTEI 0
Miuuudo
19/06/2006
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
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
GOSTEI 0
Titanius
19/06/2006
Realmente, se você procurar na literatura, o certo é jogar na Query... estranho no Delphi 7 funcionar sem... :roll: vai entender...
Obrigado a todos
[]s
Obrigado a todos
[]s
GOSTEI 0
Adriano Santos
19/06/2006
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.
GOSTEI 0
Carlos_braz
19/06/2006
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.
Para funcionar em ambos experimentei mudar a seqüência:
-Passo os parametros
-Fecho o ClientDataSet
-E ativo
Como mostro logo abaixo:
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?
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?
GOSTEI 0
Carlos_braz
19/06/2006
Uma correção para a ultima citação:
Deve ser:
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;
GOSTEI 0