Problemas com função de localizar clientes

Delphi

12/11/2013

Galera estou com um problema no minimo curioso, fiz um cadastro de ordem de serviço, onde na tabela de OS recebe somente o codigo do cliente, depois faço um parametro e uso um sql para localiza-lo, o curioso é quando localizo o cliente, uma função fica responsável em transferir para alguns edits o valores contido na tabela..na primeira vez o codigo funciona quando cancelo ou volto na aba de pesquisa dá erro de index bounds..

este é o codigo que chama a tabela..

    Status('E');
    PageControl1.ActivePage := Tab_Cadastro;
    TabVisivel(False,True,True);
    with TClientDataset(Dts_CadOs.DataSet) do
      begin
      Close;
      Params[0].AsInteger :=  TClientDataset(Dts_PescOs.DataSet).Fields [0].AsInteger;
      Open;
      edit;
      CarregaCliente; // aki sozinho funciona
      Montacliente; //quando passa por este pela primeira vez funciona más depois não funciona mais..
      end;
    DBEdit2.SetFocus;


Função Carrega cliente

procedure TFCadOs.CarregaCliente;
begin
   with TClientDataset(Dts_Pes_Cliente.DataSet) do
    begin
      Close;
      Params[0].AsInteger :=  TClientDataset(Dts_PescOs.DataSet).Fields [1].AsInteger;
      Open;
    end;
end;


Função Montacliente

procedure TFCadOs.Montacliente;
begin
   Edit1.Text := DMCONSULTA.Cds_Pesc_Os_ClienteCLIENTE.Value;
   Edit3.Text := DMCONSULTA.Cds_Pesc_Os_ClienteCPF_CNPJ.Value;
   Edit4.Text := DMCONSULTA.Cds_Pesc_Os_ClienteCOMPLEMENTO.Value;
   Edit5.Text := DMCONSULTA.Cds_Pesc_Os_ClienteRG_INSCEST.Value;
   Edit6.Text := DMCONSULTA.Cds_Pesc_Os_ClienteCEP.Value;
   Edit7.Text := DMCONSULTA.Cds_Pesc_Os_ClienteENDERECO.Value + ' -  Nº '+ IntToStr(DMCONSULTA.Cds_Pesc_Os_ClienteNUM_ENDERECO.Value);
   Edit8.Text := DMCONSULTA.Cds_Pesc_Os_ClienteBAIRRO.Value;
   Edit9.Text := DMCONSULTA.Cds_Pesc_Os_ClienteCIDADE.value;
   Edit10.Text := DMCONSULTA.Cds_Pesc_Os_ClienteUF.Value;
   Edit11.Text := DMCONSULTA.Cds_Pesc_Os_ClienteTPTEL01.Value;
   Edit12.Text := DMCONSULTA.Cds_Pesc_Os_ClienteTELEFONE01.Value;
   Edit13.Text := DMCONSULTA.Cds_Pesc_Os_ClienteTPTEL02.Value;
   Edit14.Text := DMCONSULTA.Cds_Pesc_Os_ClienteTELEFONE02.Value;
   Edit15.Text := DateToStr(DMCONSULTA.Cds_Pesc_Os_ClienteDATA_ULT_OFIC.Value);
end;


é somente isso..agora quando comento a Função Montacliente o codigo funciona perfeitamente..
Gilmar Moraes

Gilmar Moraes

Curtidas 0

Respostas

Gustavo Bretas

Gustavo Bretas

12/11/2013

Gigatel, debugue a função CarregaCliente, e verifique se na linha 6 o clientdataset não "perdeu" os paramêtros.

Que componente de conexão vc esta usando?

Eu já vi muitos casos de perder os parâmetros, para resolver isso eu uso o "Fetch Params" no ClientDataSet (Clica com o botão direito do mouse sobre o ClientDataSet).
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

12/11/2013

Gigatel, debugue a função CarregaCliente, e verifique se na linha 6 o clientdataset não "perdeu" os paramêtros.

Que componente de conexão vc esta usando?

Eu já vi muitos casos de perder os parâmetros, para resolver isso eu uso o "Fetch Params" no ClientDataSet (Clica com o botão direito do mouse sobre o ClientDataSet).


então, uso ClientDataset, eu fiz como vc disse e aparentimente funcionou..e curiosamente sempre faço isso..más não sei o que me deu desta fez..más o que este "Fetch Params" faz ? pois faço sem saber qual seria a finalidade dele..

más vlw demais cara..eu não sei pular para outro caso sem resolver o problema e isso me atrasa muito..vlw denovo..
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

12/11/2013

Gigatel, debugue a função CarregaCliente, e verifique se na linha 6 o clientdataset não "perdeu" os paramêtros.

Que componente de conexão vc esta usando?

Eu já vi muitos casos de perder os parâmetros, para resolver isso eu uso o "Fetch Params" no ClientDataSet (Clica com o botão direito do mouse sobre o ClientDataSet).


Carissimo, depois de colocar o sistema funcionando verifiquei que realmente o problema ainda continua..já fiz o "Fetch Params" más ainda não resolveu..más vamos a uma descrição de como está funcionando meu programa, como na maioria dos sitemas que vejo por aí consiste em 2 datamodules, um para cadastro e outra para pesquisa. o problema esta ocorrendo em um cadastro de ordem de serviço que fiz para minha loja, neste cadastro tem a pesquisa de uma OS e tambem um botão de cadastro, onde abre um aba com as informações de entrada., tudo no mesmo form, uma vez pesquisado a os, um dbgrid me mostra os resultados. tenho opção de clicar ou ir ao botão para acessar o registro selecionado..na OS apenas o código do cliente é usado para fazer o cadastro, quando acesso o registro um função localiza o cliente e exibe no formulário..e é aí que o problema está..quando faço o procedimento incialmente funciona más depois dá o erro do tópico..
  Status('L');
  PageControl1.ActivePage := Tab_Cadastro;
  TabVisivel(False,True,True);
    with TClientDataset(Dts_CadOs.DataSet) do
      begin
        Close;
        Params[0].AsInteger :=  TClientDataset(Dts_PescOs.DataSet).Fields [0].AsInteger;
        Open;
        edit;
        CarregaCliente;
        PesquisaOsItens;
        Montacliente;
        VlrSubTot := DM.Cds_CadOSVLR_TOTAL.Value;
        SPSalvar.Enabled := True;
        SBCancelar.Enabled := True;
      end;
  DBEdit2.SetFocus;


uso clientdataset

uma outra alternativa até mesmo para teste seria tirar o parametro e tentar um busca normal..e neste caso aceito sugestões de qual forma fazer para não sobre carregar ou gerar trafego na rede..vlw
GOSTEI 0
POSTAR