Erro ao abrir ClientDataset - URGENTE

Delphi

30/07/2013

Ola Pessoal,

A algum tempo estou tendo uns erros muito estranhos, e que geram esporadicamente ao tentar abrir um clientdataset.

O Erro é o seguinte:

Expected: 'true at position: 94
{"result":[{"rows":[0]},{"data":[26045,#192#192b#5#241#192#192#192#16#0#5#2#0#0#0#0#16e#170#3#161e#0#0#0#0#0#0#150#25#224#189#1#0#0#0#24#0#0#0#4#0#241#5#0#0#3#0#0#0#160#0#14status_analise#4#0#1#0#0#0#0#0#13status_seguro#4#0#1#0#0#0#0#0#11anli_codigo#4#0#1#0#0#0#0#0#18anli_estatus_geral#1#0J#0#0#0#1#0#5WIDTH#4#0#1#0#20#0#0#0#2#0#8READONLY#2#0#3#0#255#255#4LCID#4#0#1#0#0#0#0#0#0#0#0#128#0#0#0#0#0#0S#0#0#0#2A#0#0#0#0#128#0#0#0#0#0#0T#0#0#0#2A#0#0#0#0#128#0#0#0#0#0#0U#0#0#0#2A#0#0#0#0#128#0#0#0#0#0#0W#0#0#0#2A#0#0#0#0#128#0#0#0#0#0#0X#0#0#0#2A#0#0#0#255#255#0#0#0#0#0#0Y#0#0#0#2T#0#0#0#0#128#0#0#0#0#0#0Z ...

e ele continua, com milhões de caracteres assim. Percebi que no meio desse erro apare alguns campos do meu dataset, não sei se pode ajudar em algo.

Este dataset esta na minha aplicação cliente, que conecta em um servidor Datasnap. Estou utilizando Delphi 2010 e na minha máquina Win7 não consegui fazer gerar este erro, somente no cliente onde a máquina é XP.

Alguém saberia o que pode estar acontecendo?

Obrigado.
Leonardo Centenaro

Leonardo Centenaro

Curtidas 0

Respostas

Marco Salles

Marco Salles

30/07/2013

È Json isto ???

O Protocolo é tcip ?

é delphi to Delphi ? Cliente e Servidor ?

como esta o Select no servidor ?

[]sds

GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Poisé, parece ser JSON, mas deve ser dentro do clientdataset, pois eu não implemento nada.

É Datasnap com TCP/IP, eu tenho uma SQLQuery no servidor com um select nela. Mas na aplicação eu mudo esse sql (só adiciono alguns filtros no where na verdade). Meu DataSetProvider do servidor esta com as ProviderFlas = [poAllowCommandText, poUseQuoteChar]
GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Se vc não utilizar o commantText vc obtèm este erro ???

Ou somente ao utilizar esta query no Client ????

GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Obrigado pela ajuda, mas eu troquei minha SQLQuery no servidor por um SQLDataSet, só pra testar.

A princípio não gerou mais o erro, mas como eu disse é esporádico, uma hora gera outra hora não gera.

Vou acompanha por mais um tempo, se voltar a acontecer eu tento deixar o SQL somente no servidor,
se não eu acontecer eu finalizo o tópico.
GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Leonardo vc conhece query dinámicas no Servidor ???

[]sds
GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Sim Marco, acredito que até tenha lido um artigo seu sobre isso, onde você indica passar os filtros do WHERE no evento OnBeforeGetRecords do clientdataset né?

Você acha que isso pode resolver o problema? Hoje voltou a acontecer rsrsrs.

Obrigado.
GOSTEI 0
Deivison Melo

Deivison Melo

30/07/2013

Tente o procedimento orientado pelo Marco e caso não seja solicionado, por favor, voltar a postar para tentarmos ajudar da melhor forma possível.
GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Alterei o sistema para utilizar as querys dinâmicas, conforme o Marco sugeriu.

Vou acompanhar durante o dia de hoje se não vai gerar mais, ai confirmo se foi solucionado ou não.

Obrigado
GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Voltou a gerar o erro, mesmo assim.

O estranho é que não gera logo que eu abro a tela, só se eu deixo ela aberta por um tempo.

Nesta tela eu tenho duas grids com sqls diferentes que ficam atualizando automático, com um Timer.

E as vezes junto com aquele primeiro erro gera também um "Missing Data Provider or Data Packet". Que eu sei, este só gera quando não tem um Datasetprovider ligado no clientdataset, ou quando não tem um SQL na query, que não é o caso.

GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Voltou a gerar o erro, mesmo assim.

O estranho é que não gera logo que eu abro a tela, só se eu deixo ela aberta por um tempo.

Nesta tela eu tenho duas grids com sqls diferentes que ficam atualizando automático, com um Timer.

E as vezes junto com aquele primeiro erro gera também um "Missing Data Provider or Data Packet". Que eu sei, este só gera quando não tem um Datasetprovider ligado no clientdataset, ou quando não tem um SQL na query, que não é o caso.



Não acretido que a query dinamicas iria resolver o seu problema visto que ao colocar o sql no servidor o problema continuou
descartando algo intrisico ao commandText

Esta tela que vc tem dois grids com sql diferents ( esta ligado a dois SqlDatasource diferentes ou a um so ??? tai a necessidade do commandtext ou da Query dinamicas ???)

Acredito que vc esta utilizando um Sqldatasouce somente tentando alimentar dois grids atraves de um timer . Correto ?

Caso sim , vc ja tentou com dois sqlDataSouce ??

Ja passei por situação similar a sua .. Onde utilizava um sqldatasoce e fazia consultas neles utilizando dois cds
com query dinamicas ligados a um mesmo TDatasetProvider

Minha solução foi sincronizar atraves de Thredas utilizando uma secção Crítica.. que cada consulta ocorreria separado da
outra . Uma so comecaria quando a outra terminasse

Parece que vc esta tendo problema similar

[]sds

GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Eu tenho um datasource pra cada grid. Essas consultas estão totalmente independentes, há um quarteto (datasource, clientdataset, datasetprovider, sqldataset) pra cada consulta.

E também as duas são abertas em um único Timer, acredito que não ocorra delas abrirem exatamente no mesmo instante.

O que seria esta secção Critica que você se refere?
GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Voltou a gerar o erro, mesmo assim.

O estranho é que não gera logo que eu abro a tela, só se eu deixo ela aberta por um tempo.

Nesta tela eu tenho duas grids com sqls diferentes que ficam atualizando automático, com um Timer.

E as vezes junto com aquele primeiro erro gera também um "Missing Data Provider or Data Packet".
Que eu sei, este só gera quando não tem um Datasetprovider ligado no clientdataset,
ou quando não tem um SQL na query, que não é o caso.



Não acretido que a query dinâmicas fosse resolver o seu problema visto que ao colocar o sql no servidor o problema
continuou descartando algo intrísico ao commandText

Esta tela que vc tem dois grids com sql diferents ( esta ligado a dois SqlDataSET diferentes ou a um só ???
tai a necessidade do commandtext ou da Query dinamicas ???)

Acredito que vc esta utilizando um SqldataSET somente tentando alimentar dois grids atraves de um timer . Correto ?

Caso sim , vc ja tentou com dois sqlDataSET ??

Ja passei por situação similar a sua .. Onde utilizava um sqldataSET e fazia consultas neles utilizando dois cds
com query dinamicas ligados a um mesmo TDatasetProvider

Minha solução foi sincronizar através de Thredas utilizando uma secção Crítica.. Onde cada consulta ocorreria separado
da outra . Uma so comecaria quando a outra terminasse

Parece que vc esta tendo problema similar

[]sds

GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Bem , antes de tentar com Threads utlizando sincronização, tente eliminar para teste uma outra Sql do Timer
para ver se o problema persisir . Isto é , se caraceteriza algum conflito .. Mas pode ser que o conflito esteja na
mesma consulta .. Aumente o intervalo do Timer para ter certeza que o processamento ira ocorrer apos o sql gerado
Claro que este aumento é paleativo , pois podera fazer este processo com Threads . Isto é so para teste mesmo e tentar
identificar a origem do problema

[]sds

GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Marco, fiz o que você disse, deixei somente uma query para ficar atualizando no Timer. A princípio não gerou mais, mas não posso confirmar que tenha resolvido, pois antes também gerava esporadicamente. Vou deixar aberto o sistema por mais tempo, pra ver se não gera mesmo.

Caso resolva, você indicaria criar threads para controlar isso?

Muito Obrigado.
GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Bom, não tinha gerado erro com somente uma tela aberta. Fui tentar abrir outra vez a mesma tela (só com uma consulta também) e deu erro.

Acho que teria que controlar no servidor, se o sqldataset não acabou de abrir um sql, esperar para tentar abrir outro.

O que você acha?
GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Bom, não tinha gerado erro com somente uma tela aberta. Fui tentar abrir outra vez a mesma tela (só com uma consulta também) e deu erro.

Acho que teria que controlar no servidor, se o sqldataset não acabou de abrir um sql, esperar para tentar abrir outro.

O que você acha?


Bem quem abri o Sql é o clientdataset ... Não entendi direito como vc utiliza um Timer para abri-las ?

Quanto a controlar este processo de abertura , acho que este é o caminho.. Como eu disse no início controlei este
processo através de controle de tarefas ( Threads ( CriticalSection , Mutex ou Semaphore )

GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Bom, não tinha gerado erro com somente uma tela aberta. Fui tentar abrir outra vez a mesma tela (só com uma consulta também) e deu erro.

Acho que teria que controlar no servidor, se o sqldataset não acabou de abrir um sql, esperar para tentar abrir outro.

O que você acha?


Hj estou D+ ...

Bem , quem abrE o Sql é o clientdataset ... Não entendi direito como vc utiliza um Timer para abri-las ?

Quanto a controlar este processo de abertura , acho que este é o caminho.. Como eu disse no início controlei este
processo através de controle de tarefas ( Threads ( CriticalSection , Mutex ou Semaphore )
GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Consegui resolver, meu problema era outro na verdade.

Havia uma outra thread que era criada junto com esta tela e que utilizava a mesma conexão do Datamodule da aplicação cliente.

O que eu fiz foi criar uma conexão com o servidor datanap própria para a thread, com os mesmos parâmetros do SQLConnection do meu Datamodule,
mas uma instância diferente. Ai as querys que eu utilizo dentro desta thread, se ligam somente a esta conexão separada.

Pelo que eu vi não é recomendado utilizar uma conexão compartilhada dentro de threads, cada thread tem ter uma conexão própria.

Obrigado pela ajuda mesmo assim.
GOSTEI 0
Marco Salles

Marco Salles

30/07/2013


Pelo que eu vi não é recomendado utilizar uma conexão compartilhada dentro de threads, cada thread tem ter uma conexão própria.


Ue ???? Mas isto é um dos objetivos da Sincronização das tarefas .. Exatamente o conceito das secções .. quem disse que uma uníca Threds para fazer tudo ?

ficou meio estranho , parece que eu lhe informei errado ou vc entendeu errado

[]sds
GOSTEI 0
Rodrigo Lacerda

Rodrigo Lacerda

30/07/2013

Nunca me deparei com esse Erro....

Muito boa a postagem

Abs
GOSTEI 0
Deivison Melo

Deivison Melo

30/07/2013

Dúvida solucionada!

Obrigado Marco pelo apoio ao nosso nobre colega!

Abração a todos e bons códigos!

GOSTEI 0
Marco Salles

Marco Salles

30/07/2013

Dúvida solucionada!

Obrigado Marco pelo apoio ao nosso nobre colega!

Abração a todos e bons códigos!



[]sds david

Nunca me deparei com esse Erro....

Muito boa a postagem

Abs


Blz Rodrigo , se eu tiver um tempinho vou simular um erro aqui e d um print na tela para vc observar

[]sds
GOSTEI 0
Leonardo Centenaro

Leonardo Centenaro

30/07/2013

Eu tenho um print do erro aqui se quiserem. Só não sei como postar imagens aqui no fórum.

Qualquer coisa, se quiserem deixar os e-mails de vocês eu posso enviar o print.
GOSTEI 0
POSTAR