Problema com dbgrid

Delphi

25/09/2012

amigos..vou explicar a situação..

tenho um form com dbgrid ok

no form tem um botão consultar outro para excluir e outro para ver todos os registros..

o que acontece..limpo meu banco de dados certo? apago todos os registros..fica limpo..ok

ai eu entro no meu sistema..entro no form cadastrar e cadastro 3 itens em sequencia ok

dou um executar dentro do mysql para atualizar o banco ok

ai eu faço um consulta, uma exclução consulto de novo apenas um registro selecionando na combobox o item relacionado ok

só que se eu faço isso 3 ou 4 vezes o dbgrid não retorna mais o que tá no banco de dados..mesmo havendo dados lá

em tempo de execução é como eles se perdessem depois de algumas consultas ou alterações entendem..

o curioso é que tenho outro form que faz a mesma coisa e isso não acontece..

tenho datasets separados query e clientedataset providername connection datasource tudo certo e ligado..

não entendo porque acontece isso..preciso de ajuda..é urgente amigos..meu tempo para terminar o tcc tá acabando..
grato.
Mauricio Nicoli

Mauricio Nicoli

Curtidas 0

Respostas

Alisson Santos

Alisson Santos

25/09/2012

O que geralmente ocorre é que em algum momento o seu dataset não está sendo aberto.
tentou debugar o programa para verificar se ele executa todos os comando corretamente.
GOSTEI 0
Ricardo Araujo

Ricardo Araujo

25/09/2012

caro amigo pode colocar alguns print e como esta a sua rotina?
GOSTEI 0
Mauricio Nicoli

Mauricio Nicoli

25/09/2012

procedure Tfrmsuporteteccons.btnpesquisarClick(Sender: TObject);
begin
 DM.ClientDataSetconstec.close;
 DM.ADOQuerySQLconstec.SQL.CLEAR;
 DM.ADOQuerySQLconstec.SQL.ADD('select codatend, filial,setor, nomepc, ip, datasup, nomefunc, descricaosup from suportetecnico where filial like :filial');
 DM.ADOQuerySQLconstec.Parameters.ParamByName('filial').Value:= comboboxpesq.text;
 DM.ClientDataSetconstec.Open;
 frmsuporteteccons.DBGrid.Refresh;
end;


usei o comando refresh da forma correta?

um amigo de outro forum disse...
as tabelas do mysql precisam que voce de um comando refresh para que elas sejam atualizadas


fiz certo?
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

25/09/2012

procedure Tfrmsuporteteccons.btnpesquisarClick(Sender: TObject);
begin
DM.ClientDataSetconstec.close;
DM.ADOQuerySQLconstec.SQL.CLEAR;
DM.ADOQuerySQLconstec.SQL.ADD('select codatend, filial,setor, nomepc, ip, datasup, nomefunc, descricaosup from suportetecnico where filial like :filial');
DM.ADOQuerySQLconstec.Parameters.ParamByName('filial').Value:= comboboxpesq.text;
DM.ClientDataSetconstec.Open;
frmsuporteteccons.DBGrid.Refresh;
end;

Eu faria da seguinte forma, não mudaria em nada seu código apenas acrescentaria a propriedade Prepared.

procedure Tfrmsuporteteccons.btnpesquisarClick(Sender: TObject);
begin
DM.ClientDataSetconstec.close;
DM.ADOQuerySQLconstec.SQL.CLEAR;
DM.ADOQuerySQLconstec.SQL.ADD('select codatend, filial,setor, nomepc, ip, datasup, nomefunc, descricaosup from suportetecnico where filial like :filial');
DM.ADOQuerySQLconstec.Parameters.ParamByName('filial').Value:= comboboxpesq.text;
DM.ClientDataSetconstec.Prepared;
DM.ClientDataSetconstec.Open;
frmsuporteteccons.DBGrid.Refresh;
end;

Verifique se o seu datasource não setá se perdendo, perdendo a propriedade DAtaset após muitas consultas...acontece as vezes, é só excluir o componente e colocar outro.
GOSTEI 0
Alisson Santos

Alisson Santos

25/09/2012

Fiz alguns testes aqui e conversei com outro desenvolvedor e fui informado que realmente trocando o componente resolveria, devido ele estar perdendo a referencia.
Agora existe um curso do luciano pimenta na devmedia que ensina um procedimento para isso não ocorrer.
GOSTEI 0
POSTAR