Ir para conteúdo
Fórum Script Brasil
  • 0

Erro em alteração de registro buscado


Gabriel Cabral

Pergunta

E ae galera...

to precisando dmais de uma ajuda porque não tenho noção do que está acontecendo...

já tentei de tudo aqui...

é o seguinte...

Em um cadastro de produtos, "ando" até o terceiro registro [Refrigerante, por exemplo]

Tenho uma tela de busca...entro nessa tela e busco o produto Abacaxi, após encontrado, os dados desse registro são levados à tela de cadastro para serem alterados...desta forma:

procedure TfrmLocalPro.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  if (txtLocalPro_CodPro.Focused = True) OR (txtLocalPro_Desc.Focused = True) OR (GridLocalPro.Focused = True) Then
  begin

    if (Key = VK_DOWN) Then
    begin
      GridLocalPro.SetFocus;
      GridLocalPro.SelectedIndex := 1;
    end;

    if (Key = VK_RETURN) Then
    begin
      GridLocalPro.SetFocus;
      GridLocalPro.SelectedIndex := 1;
   
    with dm.QueryBuscaPro do
    begin
      Close;
      SQL.Clear;

      SQL.Add('SELECT * FROM ESTAPRO.dbf');
      SQL.Add('WHERE PRODES = :pDESC');

      ParambyName('pDESC').AsString := GridLocalPro.SelectedField.AsString;
      Open;

      if not(IsEmpty) then
      begin
        frmCadPro.txtCadPro_CodPro      .Text := dm.QueryBuscaPro.FieldByName('PROCOD').AsString;
        frmCadPro.cboCadPro_Secao       .Text := dm.QueryBuscaPro.FieldByName('PROTIP').AsString;
        frmCadPro.txtCadPro_DataCad     .Text := dm.QueryBuscaPro.FieldByName('PROCAD').AsString;
        frmCadPro.txtCadPro_Desc        .Text := dm.QueryBuscaPro.FieldByName('PRODES').AsString;
        frmCadPro.txtCadPro_Estoque     .Text := dm.QueryBuscaPro.FieldByName('PROQTD').AsString;
        frmCadPro.txtCadPro_UndVen      .Text := dm.QueryBuscaPro.FieldByName('PROUND').AsString;
        frmCadPro.cboCadPro_Icms        .Text := dm.QueryBuscaPro.FieldByName('PROICM').AsString;
        frmCadPro.txtCadPro_EstMin      .Text := dm.QueryBuscaPro.FieldByName('PROMIN').AsString;
        frmCadPro.txtCadPro_EstMax      .Text := dm.QueryBuscaPro.FieldByName('PROMAX').AsString;
        frmCadPro.txtCadPro_PreCus      .Text := dm.QueryBuscaPro.FieldByName('PROCUS').AsString;
        frmCadPro.txtCadPro_Vml         .Text := dm.QueryBuscaPro.FieldByName('PROLUC').AsString;
        frmCadPro.txtCadPro_PreVen      .Text := dm.QueryBuscaPro.FieldByName('PROPRE').AsString;
        frmCadPro.cboCadPro_CodForn1    .Text := dm.QueryBuscaPro.FieldByName('PROFOR').AsString;
        frmCadPro.cboCadPro_CodForn2    .Text := dm.QueryBuscaPro.FieldByName('PROFO2').AsString;
        frmCadPro.cboCadPro_CodForn3    .Text := dm.QueryBuscaPro.FieldByName('PROFO3').AsString;
        frmCadPro.cboCadPro_CodForn4    .Text := dm.QueryBuscaPro.FieldByName('PROFO4').AsString;
        frmCadPro.txtCadPro_Fracao      .Text := dm.QueryBuscaPro.FieldByName('PROFRA').AsString;
        frmCadPro.txtCadPro_UndCompra   .Text := dm.QueryBuscaPro.FieldByName('PROUNC').AsString;
        frmCadPro.txtCadPro_Local       .Text := dm.QueryBuscaPro.FieldByName('PROLOC').AsString;
        frmCadPro.txtCadPro_Cotacao     .Text := dm.QueryBuscaPro.FieldByName('PROCOT').AsString;
        frmCadPro.txtCadPro_CodOrigem   .Text := dm.QueryBuscaPro.FieldByName('PROORI').AsString;
        frmCadPro.txtCadPro_ArqBal      .Text := dm.QueryBuscaPro.FieldByName('PROPES').AsString;
        frmCadPro.txtCadPro_PesUnd      .Text := dm.QueryBuscaPro.FieldByName('PROUNP').AsString;
        frmCadPro.txtCadPro_DiasVal     .Text := dm.QueryBuscaPro.FieldByName('PRODVL').AsString;
        frmCadPro.txtCadPro_BalCaixa    .Text := dm.QueryBuscaPro.FieldByName('PROBAL').AsString;
        frmCadPro.txtCadPro_PreOfe      .Text := dm.QueryBuscaPro.FieldByName('PROPOF').AsString;
        frmCadPro.txtCadPro_DataIniOfe  .Text := dm.QueryBuscaPro.FieldByName('PROIOF').AsString;
        frmCadPro.txtCadPro_DataFinOfe  .Text := dm.QueryBuscaPro.FieldByName('PRODOF').AsString;
        frmCadPro.txtCadPro_EstoqPrat   .Text := dm.QueryBuscaPro.FieldByName('PROEPR').AsString;
        frmCadPro.txtCadPro_QtdeMinPrat .Text := dm.QueryBuscaPro.FieldByName('PROPRT').AsString;
        frmCadPro.txtCadPro_TotalComp   .Text := dm.QueryBuscaPro.FieldByName('PROCOM').AsString;
        frmCadPro.txtCadPro_TotalVend   .Text := dm.QueryBuscaPro.FieldByName('PROVEN').AsString;
        frmCadPro.txtCadPro_DataUlt     .Text := dm.QueryBuscaPro.FieldByName('PRODTC').AsString;
        frmCadPro.txtCadPro_FornUlt     .Text := dm.QueryBuscaPro.FieldByName('PROFOC').AsString;
        frmCadPro.txtCadPro_QtdeUlt     .Text := dm.QueryBuscaPro.FieldByName('PROQDC').AsString;
        frmCadPro.txtCadPro_PreUlt      .Text := dm.QueryBuscaPro.FieldByName('PROPRC').AsString;
        frmCadPro.txtCadPro_DataEnt     .Text := dm.QueryBuscaPro.FieldByName('PROENT').AsString;
        frmCadPro.txtCadPro_QtdeEnt     .Text := dm.QueryBuscaPro.FieldByName('PROQTE').AsString;
        frmCadPro.txtCadPro_DataSai     .Text := dm.QueryBuscaPro.FieldByName('PROSAI').AsString;
        frmCadPro.txtCadPro_QtdeSai     .Text := dm.QueryBuscaPro.FieldByName('PROQTS').AsString;

      end;

    end;

   // txtLocalPro_CodPro.SetFocus;
    frmLocalPro.Close;

    end;

  end;

end;
Mas quando clico em Alterar, o registro que abre para ser alterado é o último que estava lá....o do Refrigerante!!!! É como se a busca não tivesse sido feita!!! É como se os dados do registro do Abacaxi estivessem lá, mas o registro que realmente está é o do Refrigerante!!! A alteração é feita dessa forma:
procedure TfrmCadPro.btnAlterarClick(Sender: TObject);
var i: integer;
begin

//desbloquear campos
  txtCadPro_CodPro      .ReadOnly := False;
  cboCadPro_Secao       .ReadOnly := False;
  txtCadPro_DataCad     .ReadOnly := False;
  txtCadPro_Desc        .ReadOnly := False;
  txtCadPro_Estoque     .ReadOnly := False;
  txtCadPro_UndVen      .ReadOnly := False;
  cboCadPro_Icms        .ReadOnly := False;
  txtCadPro_EstMin      .ReadOnly := False;
  txtCadPro_EstMax      .ReadOnly := False;
  txtCadPro_PreCus      .ReadOnly := False;
  txtCadPro_Vml         .ReadOnly := False;
  txtCadPro_PreVen      .ReadOnly := False;
  cboCadPro_CodForn1    .ReadOnly := False;
  cboCadPro_CodForn2    .ReadOnly := False;
  cboCadPro_CodForn3    .ReadOnly := False;
  cboCadPro_CodForn4    .ReadOnly := False;
  txtCadPro_Fracao      .ReadOnly := False;
  txtCadPro_UndCompra   .ReadOnly := False;
  txtCadPro_Local       .ReadOnly := False;
  txtCadPro_CodOrigem   .ReadOnly := False;
  txtCadPro_DiasVal     .ReadOnly := False;
  txtCadPro_PreOfe      .ReadOnly := False;
  txtCadPro_DataIniOfe  .ReadOnly := False;
  txtCadPro_DataFinOfe  .ReadOnly := False;
  txtCadPro_EstoqPrat   .ReadOnly := False;
  txtCadPro_QtdeMinPrat .ReadOnly := False;
  txtCadPro_TotalComp   .ReadOnly := False;
  txtCadPro_TotalVend   .ReadOnly := False;
  txtCadPro_DataUlt     .ReadOnly := False;
  txtCadPro_FornUlt     .ReadOnly := False;
  txtCadPro_QtdeUlt     .ReadOnly := False;
  txtCadPro_PreUlt      .ReadOnly := False;
  txtCadPro_DataEnt     .ReadOnly := False;
  txtCadPro_QtdeEnt     .ReadOnly := False;
  txtCadPro_DataSai     .ReadOnly := False;
  txtCadPro_QtdeSai     .ReadOnly := False;
  txtAux                .ReadOnly := False;

  btnNovo               .Enabled := False;
  btnGravar             .Enabled := True;
  btnAlterar            .Enabled := False;
  btnExcluir            .Enabled := False;
  btnBuscar             .Enabled := False;
  btnPrimeiro           .Enabled := False;
  btnAnterior           .Enabled := False;
  btnProximo            .Enabled := False;
  btnUltimo             .Enabled := False;
  btnSair               .Enabled := True;

  //deixar que o campo receba o foco com o Tab
  txtCadPro_CodPro      .TabStop := True;
  cboCadPro_Secao       .TabStop := True;
  txtCadPro_DataCad     .TabStop := True;
  txtCadPro_Desc        .TabStop := True;
  txtCadPro_Estoque     .TabStop := True;
  txtCadPro_UndVen      .TabStop := True;
  cboCadPro_Icms        .TabStop := True;
  txtCadPro_EstMin      .TabStop := True;
  txtCadPro_EstMax      .TabStop := True;
  txtCadPro_PreCus      .TabStop := True;
  txtCadPro_Vml         .TabStop := True;
  txtCadPro_PreVen      .TabStop := True;
  cboCadPro_CodForn1    .TabStop := True;
  cboCadPro_CodForn2    .TabStop := True;
  cboCadPro_CodForn3    .TabStop := True;
  cboCadPro_CodForn4    .TabStop := True;
  txtCadPro_Fracao      .TabStop := True;
  txtCadPro_UndCompra   .TabStop := True;
  txtCadPro_Local       .TabStop := True;
  FrameConEstoq         .TabStop := True;
  ProEstSim             .TabStop := True;
  ProEstNao             .TabStop := True;
  FrameCotacao          .TabStop := True;
  ProCotSim             .TabStop := True;
  ProCotNao             .TabStop := True;
  txtCadPro_CodOrigem   .TabStop := True;
  FrameBalanca          .TabStop := True;
  ProPesSim             .TabStop := True;
  ProPesNao             .TabStop := True;
  FramePesUnd           .TabStop := True;
  ProUnpPeso            .TabStop := True;
  ProUnpUnidade         .TabStop := True;
  txtCadPro_DiasVal     .TabStop := True;
  FrameBalancaCaixa     .TabStop := True;
  ProBalSim             .TabStop := True;
  ProBalNao             .TabStop := True;
  txtCadPro_PreOfe      .TabStop := True;
  txtCadPro_DataIniOfe  .TabStop := True;
  txtCadPro_DataFinOfe  .TabStop := True;
  txtCadPro_EstoqPrat   .TabStop := True;
  txtCadPro_QtdeMinPrat .TabStop := True;
  txtCadPro_TotalComp   .TabStop := True;
  txtCadPro_TotalVend   .TabStop := True;
  FrameUltCompra        .TabStop := True;
  txtCadPro_DataUlt     .TabStop := True;
  txtCadPro_FornUlt     .TabStop := True;
  txtCadPro_QtdeUlt     .TabStop := True;
  txtCadPro_PreUlt      .TabStop := True;
  FrameUltMovEst        .TabStop := True;
  txtCadPro_DataEnt     .TabStop := True;
  txtCadPro_QtdeEnt     .TabStop := True;
  txtCadPro_DataSai     .TabStop := True;
  txtCadPro_QtdeSai     .TabStop := True;
  txtAux                .TabStop := True;

  FrameConEstoq         .Enabled := True;
  FrameCotacao          .Enabled := True;
  FrameBalanca          .Enabled := True;
  FramePesUnd           .Enabled := True;
  FrameBalancaCaixa     .Enabled := True;


  cboCadPro_Secao.Items.Clear;
  dm.tblCadSecao.First;

  while dm.tblCadSecao.Eof = False do
  begin
    cboCadPro_Secao.Items.Add(dm.tblCadSecao.FieldByName('TIPNOM').AsString);
    dm.tblCadSecao.next;
  end;

  cboCadPro_CodForn1.Items.Clear;
  cboCadPro_CodForn2.Items.Clear;
  cboCadPro_CodForn3.Items.Clear;
  cboCadPro_CodForn4.Items.Clear;
  dm.tblCadForn.First;

  while dm.tblCadForn.Eof = False do
  begin
    cboCadPro_CodForn1.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    cboCadPro_CodForn2.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    cboCadPro_CodForn3.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    cboCadPro_CodForn4.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    dm.tblCadForn.next;
  end;

  txtCadPro_Mode.Caption   := 'MODO ALTERAÇÃO';
  txtCadPro_CodPro.SetFocus;

  if not (txtCadPro_CodPro.Text = '') then
  begin
    for i:=1 to txtCadPro_CodPro.MaxLength - length(txtCadPro_CodPro.Text) do
      txtCadPro_CodPro.Text := '0' + txtCadPro_CodPro.Text;
  end;

  txtCadPro_AuxCodPro.Text := txtCadPro_CodPro.Text;

  dm.tblCadPro.Edit;

end;

alguém saberia me ajudar, dizendo como eu faço pra buscar um registro e alterar este registro encontrado, e não o que já estava na tela de cadastro???!!!

Muito Obrigado

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

O lógica é que para se alterar um registro primeiro voce deve procurá-lo

então ao clicar no botão alterar a primeira coisa é fazer e procurar o registro ... uma vez selecionado então voce traz os dados para o form

OBS: voce deve dar uma melhorada no seu código .. otimizar o código... exemplo:

//deixar que o campo receba o foco com o Tab

txtCadPro_CodPro .TabStop := True;

cboCadPro_Secao .TabStop := True;

por default o delphi já faz isso se voce usar o TAB...basta colocar na seguencia os componentes do form usando o TAB Order ( clicando com o botão direito no form ) .... então voce pode tirar todas essas linhas

//desbloquear campos

txtCadPro_CodPro .ReadOnly := False;

cboCadPro_Secao .ReadOnly := False;

txtCadPro_DataCad .ReadOnly := False;

bloquear e desbloquear campos voce pode usar

procedure TFom1.desbloquear;
var i : integer;
begin
   for i := 0 to ComponentCount -1 do
    begin
      if Components[i] is TDBEdit then
         TDBEdit(Components[i]).Enabled := true;

      if Components[i] is TDateEdit then
         TDateEdit(Components[i]).Enabled := true;

      if Components[i] is TCurrencyEdit then
         TCurrencyEdit(Components[i]).Enabled := true;

      if Components[i] is TComboBox then
         TComboBox(Components[i]).Enabled := true;

      if Components[i] is TEdit then
         TEdit(Components[i]).Enabled := true;

    end;

procedure TFom1.bloquear;
var i : integer;
begin
   for i := 0 to ComponentCount -1 do
    begin
      if Components[i] is TDBEdit then
         TDBEdit(Components[i]).Enabled := false;

      if Components[i] is TDateEdit then
         TDateEdit(Components[i]).Enabled := false;

      if Components[i] is TCurrencyEdit then
         TCurrencyEdit(Components[i]).Enabled := false;

      if Components[i] is TComboBox then
         TComboBox(Components[i]).Enabled := false;

      if Components[i] is TEdit then
         TEdit(Components[i]).Enabled := false;

    end;

voce pode fazer isso com qualquer componente

...........................................................................................

Resumindo ... quando voce dá este comando: frmLocalPro.Close;

voce fechou o form de busca e consequentemente o select que foi feito

então voce deve guardar o txtCadPro_CodPro para poder localiza-lo novamente no form : procedure TfrmCadPro.btnAlterarClick(Sender: TObject);

caso contrário cada vez que voce clicar no botão alterar o registro será sempre o ultimo ou o primeiro dependendo da maneira como está trabalhando com os dados

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, esse problema de selecionar uma coisa e alterar outra se dá por que eu faço um Select com uma SQLQuery e depois pra alterar eu dou um tblCadPro.Edit??? ou seja...busco registro com query mas edito a tabela....

porque eu não consigo arranjar uma solução...

até mesmo a q você falou, de guardar o codigo pra poder fazer a pesquisa dnovo...

eu fiz o seguinte...

faço a pesquisa, e o código do produto buscado eu armazeno em uma variável; e então, faço um TEdit do form de Cadastro receber o valor desta variável...

procedure TfrmLocalPro.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var auxcod : string;
begin

  if (txtLocalPro_CodPro.Focused = True) OR (txtLocalPro_Desc.Focused = True) OR (GridLocalPro.Focused = True) Then
  begin

    if (Key = VK_DOWN) Then
    begin
      GridLocalPro.SetFocus;
      GridLocalPro.SelectedIndex := 1;
    end;

    if (Key = VK_RETURN) Then
    begin
      GridLocalPro.SetFocus;
      GridLocalPro.SelectedIndex := 1;

    with dm.QueryBuscaPro do
    begin
      Close;
      SQL.Clear;

      SQL.Add('SELECT * FROM ESTAPRO.dbf');
      SQL.Add('WHERE PRODES = :pDESC');

      ParambyName('pDESC').AsString := GridLocalPro.SelectedField.AsString;
      Open;

      if not(IsEmpty) then
      begin
        auxcod                                := dm.QueryBuscaPro.FieldByName('PROCOD').AsString;
        frmCadPro.txtCadPro_CodPro      .Text := dm.QueryBuscaPro.FieldByName('PROCOD').AsString;
        frmCadPro.cboCadPro_Secao       .Text := dm.QueryBuscaPro.FieldByName('PROTIP').AsString;
        frmCadPro.txtCadPro_DataCad     .Text := dm.QueryBuscaPro.FieldByName('PROCAD').AsString;
        frmCadPro.txtCadPro_Desc        .Text := dm.QueryBuscaPro.FieldByName('PRODES').AsString;
        frmCadPro.txtCadPro_Estoque     .Text := dm.QueryBuscaPro.FieldByName('PROQTD').AsString;
        frmCadPro.txtCadPro_UndVen      .Text := dm.QueryBuscaPro.FieldByName('PROUND').AsString;
        frmCadPro.cboCadPro_Icms        .Text := dm.QueryBuscaPro.FieldByName('PROICM').AsString;
        frmCadPro.txtCadPro_EstMin      .Text := dm.QueryBuscaPro.FieldByName('PROMIN').AsString;
        frmCadPro.txtCadPro_EstMax      .Text := dm.QueryBuscaPro.FieldByName('PROMAX').AsString;
        frmCadPro.txtCadPro_PreCus      .Text := dm.QueryBuscaPro.FieldByName('PROCUS').AsString;
        frmCadPro.txtCadPro_Vml         .Text := dm.QueryBuscaPro.FieldByName('PROLUC').AsString;
        frmCadPro.txtCadPro_PreVen      .Text := dm.QueryBuscaPro.FieldByName('PROPRE').AsString;
        frmCadPro.cboCadPro_CodForn1    .Text := dm.QueryBuscaPro.FieldByName('PROFOR').AsString;
        frmCadPro.cboCadPro_CodForn2    .Text := dm.QueryBuscaPro.FieldByName('PROFO2').AsString;
        frmCadPro.cboCadPro_CodForn3    .Text := dm.QueryBuscaPro.FieldByName('PROFO3').AsString;
        frmCadPro.cboCadPro_CodForn4    .Text := dm.QueryBuscaPro.FieldByName('PROFO4').AsString;
        frmCadPro.txtCadPro_Fracao      .Text := dm.QueryBuscaPro.FieldByName('PROFRA').AsString;
        frmCadPro.txtCadPro_UndCompra   .Text := dm.QueryBuscaPro.FieldByName('PROUNC').AsString;
        frmCadPro.txtCadPro_Local       .Text := dm.QueryBuscaPro.FieldByName('PROLOC').AsString;
        frmCadPro.txtCadPro_Cotacao     .Text := dm.QueryBuscaPro.FieldByName('PROCOT').AsString;
        frmCadPro.txtCadPro_CodOrigem   .Text := dm.QueryBuscaPro.FieldByName('PROORI').AsString;
        frmCadPro.txtCadPro_ArqBal      .Text := dm.QueryBuscaPro.FieldByName('PROPES').AsString;
        frmCadPro.txtCadPro_PesUnd      .Text := dm.QueryBuscaPro.FieldByName('PROUNP').AsString;
        frmCadPro.txtCadPro_DiasVal     .Text := dm.QueryBuscaPro.FieldByName('PRODVL').AsString;
        frmCadPro.txtCadPro_BalCaixa    .Text := dm.QueryBuscaPro.FieldByName('PROBAL').AsString;
        frmCadPro.txtCadPro_PreOfe      .Text := dm.QueryBuscaPro.FieldByName('PROPOF').AsString;
        frmCadPro.txtCadPro_DataIniOfe  .Text := dm.QueryBuscaPro.FieldByName('PROIOF').AsString;
        frmCadPro.txtCadPro_DataFinOfe  .Text := dm.QueryBuscaPro.FieldByName('PRODOF').AsString;
        frmCadPro.txtCadPro_EstoqPrat   .Text := dm.QueryBuscaPro.FieldByName('PROEPR').AsString;
        frmCadPro.txtCadPro_QtdeMinPrat .Text := dm.QueryBuscaPro.FieldByName('PROPRT').AsString;
        frmCadPro.txtCadPro_TotalComp   .Text := dm.QueryBuscaPro.FieldByName('PROCOM').AsString;
        frmCadPro.txtCadPro_TotalVend   .Text := dm.QueryBuscaPro.FieldByName('PROVEN').AsString;
        frmCadPro.txtCadPro_DataUlt     .Text := dm.QueryBuscaPro.FieldByName('PRODTC').AsString;
        frmCadPro.txtCadPro_FornUlt     .Text := dm.QueryBuscaPro.FieldByName('PROFOC').AsString;
        frmCadPro.txtCadPro_QtdeUlt     .Text := dm.QueryBuscaPro.FieldByName('PROQDC').AsString;
        frmCadPro.txtCadPro_PreUlt      .Text := dm.QueryBuscaPro.FieldByName('PROPRC').AsString;
        frmCadPro.txtCadPro_DataEnt     .Text := dm.QueryBuscaPro.FieldByName('PROENT').AsString;
        frmCadPro.txtCadPro_QtdeEnt     .Text := dm.QueryBuscaPro.FieldByName('PROQTE').AsString;
        frmCadPro.txtCadPro_DataSai     .Text := dm.QueryBuscaPro.FieldByName('PROSAI').AsString;
        frmCadPro.txtCadPro_QtdeSai     .Text := dm.QueryBuscaPro.FieldByName('PROQTS').AsString;

      end;

    end;

   // txtLocalPro_CodPro.SetFocus;
    frmLocalPro.Close;
    frmCadPro.txtAuxCod.Text := auxcod;
    end;

  end;

end;
Aí na hora de alterar, eu faço uma busca, só q agora com o código do produto buscado, que está no TEdit auxiliar, como parametro; fazendo povoar o restante dos TEdits com os campos deste registro...
procedure TfrmCadPro.btnAlterarClick(Sender: TObject);
var i: integer;
begin

with dm.QueryBuscaPro do
    begin
      Close;
      SQL.Clear;

      SQL.Add('SELECT * FROM ESTAPRO.dbf');
      SQL.Add('WHERE PROCOD = :pCOD');

      ParambyName('pCOD').AsString := txtAuxCod.Text;
      Open;

      if not(IsEmpty) then
      begin

        frmCadPro.txtCadPro_CodPro      .Text := dm.QueryBuscaPro.FieldByName('PROCOD').AsString;
        frmCadPro.cboCadPro_Secao       .Text := dm.QueryBuscaPro.FieldByName('PROTIP').AsString;
        frmCadPro.txtCadPro_DataCad     .Text := dm.QueryBuscaPro.FieldByName('PROCAD').AsString;
        frmCadPro.txtCadPro_Desc        .Text := dm.QueryBuscaPro.FieldByName('PRODES').AsString;
        frmCadPro.txtCadPro_Estoque     .Text := dm.QueryBuscaPro.FieldByName('PROQTD').AsString;
        frmCadPro.txtCadPro_UndVen      .Text := dm.QueryBuscaPro.FieldByName('PROUND').AsString;
        frmCadPro.cboCadPro_Icms        .Text := dm.QueryBuscaPro.FieldByName('PROICM').AsString;
        frmCadPro.txtCadPro_EstMin      .Text := dm.QueryBuscaPro.FieldByName('PROMIN').AsString;
        frmCadPro.txtCadPro_EstMax      .Text := dm.QueryBuscaPro.FieldByName('PROMAX').AsString;
        frmCadPro.txtCadPro_PreCus      .Text := dm.QueryBuscaPro.FieldByName('PROCUS').AsString;
        frmCadPro.txtCadPro_Vml         .Text := dm.QueryBuscaPro.FieldByName('PROLUC').AsString;
        frmCadPro.txtCadPro_PreVen      .Text := dm.QueryBuscaPro.FieldByName('PROPRE').AsString;
        frmCadPro.cboCadPro_CodForn1    .Text := dm.QueryBuscaPro.FieldByName('PROFOR').AsString;
        frmCadPro.cboCadPro_CodForn2    .Text := dm.QueryBuscaPro.FieldByName('PROFO2').AsString;
        frmCadPro.cboCadPro_CodForn3    .Text := dm.QueryBuscaPro.FieldByName('PROFO3').AsString;
        frmCadPro.cboCadPro_CodForn4    .Text := dm.QueryBuscaPro.FieldByName('PROFO4').AsString;
        frmCadPro.txtCadPro_Fracao      .Text := dm.QueryBuscaPro.FieldByName('PROFRA').AsString;
        frmCadPro.txtCadPro_UndCompra   .Text := dm.QueryBuscaPro.FieldByName('PROUNC').AsString;
        frmCadPro.txtCadPro_Local       .Text := dm.QueryBuscaPro.FieldByName('PROLOC').AsString;
        frmCadPro.txtCadPro_Cotacao     .Text := dm.QueryBuscaPro.FieldByName('PROCOT').AsString;
        frmCadPro.txtCadPro_CodOrigem   .Text := dm.QueryBuscaPro.FieldByName('PROORI').AsString;
        frmCadPro.txtCadPro_ArqBal      .Text := dm.QueryBuscaPro.FieldByName('PROPES').AsString;
        frmCadPro.txtCadPro_PesUnd      .Text := dm.QueryBuscaPro.FieldByName('PROUNP').AsString;
        frmCadPro.txtCadPro_DiasVal     .Text := dm.QueryBuscaPro.FieldByName('PRODVL').AsString;
        frmCadPro.txtCadPro_BalCaixa    .Text := dm.QueryBuscaPro.FieldByName('PROBAL').AsString;
        frmCadPro.txtCadPro_PreOfe      .Text := dm.QueryBuscaPro.FieldByName('PROPOF').AsString;
        frmCadPro.txtCadPro_DataIniOfe  .Text := dm.QueryBuscaPro.FieldByName('PROIOF').AsString;
        frmCadPro.txtCadPro_DataFinOfe  .Text := dm.QueryBuscaPro.FieldByName('PRODOF').AsString;
        frmCadPro.txtCadPro_EstoqPrat   .Text := dm.QueryBuscaPro.FieldByName('PROEPR').AsString;
        frmCadPro.txtCadPro_QtdeMinPrat .Text := dm.QueryBuscaPro.FieldByName('PROPRT').AsString;
        frmCadPro.txtCadPro_TotalComp   .Text := dm.QueryBuscaPro.FieldByName('PROCOM').AsString;
        frmCadPro.txtCadPro_TotalVend   .Text := dm.QueryBuscaPro.FieldByName('PROVEN').AsString;
        frmCadPro.txtCadPro_DataUlt     .Text := dm.QueryBuscaPro.FieldByName('PRODTC').AsString;
        frmCadPro.txtCadPro_FornUlt     .Text := dm.QueryBuscaPro.FieldByName('PROFOC').AsString;
        frmCadPro.txtCadPro_QtdeUlt     .Text := dm.QueryBuscaPro.FieldByName('PROQDC').AsString;
        frmCadPro.txtCadPro_PreUlt      .Text := dm.QueryBuscaPro.FieldByName('PROPRC').AsString;
        frmCadPro.txtCadPro_DataEnt     .Text := dm.QueryBuscaPro.FieldByName('PROENT').AsString;
        frmCadPro.txtCadPro_QtdeEnt     .Text := dm.QueryBuscaPro.FieldByName('PROQTE').AsString;
        frmCadPro.txtCadPro_DataSai     .Text := dm.QueryBuscaPro.FieldByName('PROSAI').AsString;
        frmCadPro.txtCadPro_QtdeSai     .Text := dm.QueryBuscaPro.FieldByName('PROQTS').AsString;

      end;

    end;

  cboCadPro_Secao.Items.Clear;
  dm.tblCadSecao.First;

  while dm.tblCadSecao.Eof = False do
  begin
    cboCadPro_Secao.Items.Add(dm.tblCadSecao.FieldByName('TIPNOM').AsString);
    dm.tblCadSecao.next;
  end;

  cboCadPro_CodForn1.Items.Clear;
  cboCadPro_CodForn2.Items.Clear;
  cboCadPro_CodForn3.Items.Clear;
  cboCadPro_CodForn4.Items.Clear;
  dm.tblCadForn.First;

  while dm.tblCadForn.Eof = False do
  begin
    cboCadPro_CodForn1.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    cboCadPro_CodForn2.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    cboCadPro_CodForn3.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    cboCadPro_CodForn4.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString);
    dm.tblCadForn.next;
  end;

  txtCadPro_Mode.Caption   := 'MODO ALTERAÇÃO';
  txtCadPro_CodPro.SetFocus;

  if not (txtCadPro_CodPro.Text = '') then
  begin
    for i:=1 to txtCadPro_CodPro.MaxLength - length(txtCadPro_CodPro.Text) do
      txtCadPro_CodPro.Text := '0' + txtCadPro_CodPro.Text;
  end;

  txtCadPro_AuxCodPro.Text := txtCadPro_CodPro.Text;

  dm.tblCadPro.Edit;

end;

mas não é isso q acontece....

ocorre a mesma coisa que antes...

o que eu posso fazer???

você conseguiria me explicar com mais detalhes?

[mais detalhes ainda?? desculpa, mas não estou conseguindo mesmo fazer isso]

Obrigado

Editado por Gabriel Cabral
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro ... voce deveria usar o debug do delphi para saber qual é o valor da variavel

txtAuxCod.Text que esta sendo passada para a sql, pode não ser o valor que voce está achando que é

faça um teste desta maneira

procedure TfrmCadPro.btnAlterarClick(Sender: TObject);
var i: integer;
begin

with dm.QueryBuscaPro do
    begin
      Close;
      SQL.Clear;

      SQL.Add('SELECT * FROM ESTAPRO.dbf');
      SQL.Add('WHERE PROCOD = :pCOD');

      showmessage(txtAuxCod.Text); // aqui vai aparecer o valor desta variavel
      ParambyName('pCOD').AsString := txtAuxCod.Text;
      
      Open;

      if not(IsEmpty) then
      begin

        frmCadPro.txtCadPro_CodPro      .Text := dm.QueryBuscaPro.FieldByName('PROCOD').AsString;
        frmCadPro.cboCadPro_Secao       .Text := dm.QueryBuscaPro.FieldByName('PROTIP').AsString;
        frmCadPro.txtCadPro_DataCad     .Text := dm.QueryBuscaPro.FieldByName('PROCAD').AsString;
        frmCadPro.txtCadPro_Desc        .Text := dm.QueryBuscaPro.FieldByName('PRODES').AsString;
        frmCadPro.txtCadPro_Estoque     .Text := dm.QueryBuscaPro.FieldByName('PROQTD').AsString;
        frmCadPro.txtCadPro_UndVen      .Text := dm.QueryBuscaPro.FieldByName('PROUND').AsString;
        frmCadPro.cboCadPro_Icms        .Text := dm.QueryBuscaPro.FieldByName('PROICM').AsString;
        frmCadPro.txtCadPro_EstMin      .Text := dm.QueryBuscaPro.FieldByName('PROMIN').AsString;
        frmCadPro.txtCadPro_EstMax      .Text := dm.QueryBuscaPro.FieldByName('PROMAX').AsString;
        frmCadPro.txtCadPro_PreCus      .Text := dm.QueryBuscaPro.FieldByName('PROCUS').AsString;
        frmCadPro.txtCadPro_Vml         .Text := dm.QueryBuscaPro.FieldByName('PROLUC').AsString;
        frmCadPro.txtCadPro_PreVen      .Text := dm.QueryBuscaPro.FieldByName('PROPRE').AsString;
        frmCadPro.cboCadPro_CodForn1    .Text := dm.QueryBuscaPro.FieldByName('PROFOR').AsString;
        frmCadPro.cboCadPro_CodForn2    .Text := dm.QueryBuscaPro.FieldByName('PROFO2').AsString;
        frmCadPro.cboCadPro_CodForn3    .Text := dm.QueryBuscaPro.FieldByName('PROFO3').AsString;
        frmCadPro.cboCadPro_CodForn4    .Text := dm.QueryBuscaPro.FieldByName('PROFO4').AsString;
        frmCadPro.txtCadPro_Fracao      .Text := dm.QueryBuscaPro.FieldByName('PROFRA').AsString;
        frmCadPro.txtCadPro_UndCompra   .Text := dm.QueryBuscaPro.FieldByName('PROUNC').AsString;
        frmCadPro.txtCadPro_Local       .Text := dm.QueryBuscaPro.FieldByName('PROLOC').AsString;
        frmCadPro.txtCadPro_Cotacao     .Text := dm.QueryBuscaPro.FieldByName('PROCOT').AsString;
        frmCadPro.txtCadPro_CodOrigem   .Text := dm.QueryBuscaPro.FieldByName('PROORI').AsString;
        frmCadPro.txtCadPro_ArqBal      .Text := dm.QueryBuscaPro.FieldByName('PROPES').AsString;
        frmCadPro.txtCadPro_PesUnd      .Text := dm.QueryBuscaPro.FieldByName('PROUNP').AsString;
        frmCadPro.txtCadPro_DiasVal     .Text := dm.QueryBuscaPro.FieldByName('PRODVL').AsString;
        frmCadPro.txtCadPro_BalCaixa    .Text := dm.QueryBuscaPro.FieldByName('PROBAL').AsString;
        frmCadPro.txtCadPro_PreOfe      .Text := dm.QueryBuscaPro.FieldByName('PROPOF').AsString;
        frmCadPro.txtCadPro_DataIniOfe  .Text := dm.QueryBuscaPro.FieldByName('PROIOF').AsString;
        frmCadPro.txtCadPro_DataFinOfe  .Text := dm.QueryBuscaPro.FieldByName('PRODOF').AsString;
        frmCadPro.txtCadPro_EstoqPrat   .Text := dm.QueryBuscaPro.FieldByName('PROEPR').AsString;
        frmCadPro.txtCadPro_QtdeMinPrat .Text := dm.QueryBuscaPro.FieldByName('PROPRT').AsString;
        frmCadPro.txtCadPro_TotalComp   .Text := dm.QueryBuscaPro.FieldByName('PROCOM').AsString;
        frmCadPro.txtCadPro_TotalVend   .Text := dm.QueryBuscaPro.FieldByName('PROVEN').AsString;
        frmCadPro.txtCadPro_DataUlt     .Text := dm.QueryBuscaPro.FieldByName('PRODTC').AsString;
        frmCadPro.txtCadPro_FornUlt     .Text := dm.QueryBuscaPro.FieldByName('PROFOC').AsString;
        frmCadPro.txtCadPro_QtdeUlt     .Text := dm.QueryBuscaPro.FieldByName('PROQDC').AsString;
        frmCadPro.txtCadPro_PreUlt      .Text := dm.QueryBuscaPro.FieldByName('PROPRC').AsString;
        frmCadPro.txtCadPro_DataEnt     .Text := dm.QueryBuscaPro.FieldByName('PROENT').AsString;
        frmCadPro.txtCadPro_QtdeEnt     .Text := dm.QueryBuscaPro.FieldByName('PROQTE').AsString;
        frmCadPro.txtCadPro_DataSai     .Text := dm.QueryBuscaPro.FieldByName('PROSAI').AsString;
        frmCadPro.txtCadPro_QtdeSai     .Text := dm.QueryBuscaPro.FieldByName('PROQTS').AsString;

      end;

    end;

  // retirado o código  temporariamente para o teste

  dm.tblCadPro.Edit;

end;

Faça assim e veja se dá certo... caso afirmativo coloque o restante do codigo e teste novamente

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Então, Jhonas, o valor que aparece na caixa de mensagem é o mesmo que está na caixa de texto...

então não sei porque quando clico no Alterar, a busca não é feita com ele...

Mas eu tentei fazer a busca de outra forma aqui, e deu certo...

Só que eu to fazendo com Locate(), e não sei se isso é muito aconselhável, né;

Observe como estou fazendo...

procedure TfrmCadPro.btnAlterarClick(Sender: TObject);
var i: integer;
begin

if not (txtAuxCod.Text = '')  then
begin

  if dm.tblCadPro.Locate('PROCOD', txtAuxCod.Text, []) then
  begin

    if dm.tblCadPro.FieldByName('PROCOD').IsNull = False then
    begin
      txtCadPro_CodPro.Text := dm.tblCadPro.FieldByName('PROCOD').Value;
    end;

    if dm.tblCadPro.FieldByName('PROTIP').IsNull = False then
    begin
      cboCadPro_Secao.Text := dm.tblCadPro.FieldByName('PROTIP').Value;
    end;

    if dm.tblCadPro.FieldByName('PROCAD').IsNull = False then
    begin
      txtCadPro_DataCad.Text := dm.tblCadPro.FieldByName('PROCAD').Value;
    end;

    if dm.tblCadPro.FieldByName('PRODES').IsNull = False then
    begin
      txtCadPro_Desc.Text := dm.tblCadPro.FieldByName('PRODES').Value;
    end;

    if dm.tblCadPro.FieldByName('PROQTD').IsNull = False then
    begin
    txtCadPro_Estoque.Text := dm.tblCadPro.FieldByName('PROQTD').Value;
    end;

    if dm.tblCadPro.FieldByName('PROUND').IsNull = False then
    begin
    txtCadPro_UndVen.Text := dm.tblCadPro.FieldByName('PROUND').Value;
    end;

    if dm.tblCadPro.FieldByName('PROICM').IsNull = False then
    begin
    cboCadPro_Icms.Text := dm.tblCadPro.FieldByName('PROICM').Value;
    end;

    if dm.tblCadPro.FieldByName('PROMIN').IsNull = False then
    begin
    txtCadPro_EstMin.Text := dm.tblCadPro.FieldByName('PROMIN').Value;
    end;

    if dm.tblCadPro.FieldByName('PROMAX').IsNull = False then
    begin
    txtCadPro_EstMax.Text := dm.tblCadPro.FieldByName('PROMAX').Value;
    end;

    if dm.tblCadPro.FieldByName('PROCUS').IsNull = False then
    begin
    txtCadPro_PreCus.Text := dm.tblCadPro.FieldByName('PROCUS').Value;
    end;

    if dm.tblCadPro.FieldByName('PROLUC').IsNull = False then
    begin
    txtCadPro_Vml.Text := dm.tblCadPro.FieldByName('PROLUC').Value;
    end;

    if dm.tblCadPro.FieldByName('PROPRE').IsNull = False then
    begin
    txtCadPro_PreVen.Text := dm.tblCadPro.FieldByName('PROPRE').Value;
    end;

    if dm.tblCadPro.FieldByName('PROFOR').IsNull = False then
    begin
    cboCadPro_CodForn1.Text := dm.tblCadPro.FieldByName('PROFOR').Value;
    end;

    if dm.tblCadPro.FieldByName('PROFO2').IsNull = False then
    begin
    cboCadPro_CodForn2.Text := dm.tblCadPro.FieldByName('PROFO2').Value;
    end;

    if dm.tblCadPro.FieldByName('PROFO3').IsNull = False then
    begin
    cboCadPro_CodForn3.Text := dm.tblCadPro.FieldByName('PROFO3').Value;
    end;

    if dm.tblCadPro.FieldByName('PROFO4').IsNull = False then
    begin
    cboCadPro_CodForn4.Text := dm.tblCadPro.FieldByName('PROFO4').Value;
    end;

    if dm.tblCadPro.FieldByName('PROFRA').IsNull = False then
    begin
    txtCadPro_Fracao.Text := dm.tblCadPro.FieldByName('PROFRA').Value;
    end;

    if dm.tblCadPro.FieldByName('PROUNC').IsNull = False then
    begin
    txtCadPro_UndCompra.Text := dm.tblCadPro.FieldByName('PROUNC').Value;
    end;

    if dm.tblCadPro.FieldByName('PROLOC').IsNull = False then
    begin
    txtCadPro_Local.Text := dm.tblCadPro.FieldByName('PROLOC').Value;
    end;

    if dm.tblCadPro.FieldByName('PROCOT').IsNull = False then
    begin
    txtCadPro_Cotacao.Text := dm.tblCadPro.FieldByName('PROCOT').Value;
    end;

    if dm.tblCadPro.FieldByName('PROORI').IsNull = False then
    begin
    txtCadPro_CodOrigem.Text := dm.tblCadPro.FieldByName('PROORI').Value;
    end;

    if dm.tblCadPro.FieldByName('PROPES').IsNull = False then
    begin
    txtCadPro_ArqBal.Text := dm.tblCadPro.FieldByName('PROPES').Value;
    end;

    if dm.tblCadPro.FieldByName('PROUNP').IsNull = False then
    begin
    txtCadPro_PesUnd.Text := dm.tblCadPro.FieldByName('PROUNP').Value;
    end;

    if dm.tblCadPro.FieldByName('PRODVL').IsNull = False then
    begin
    txtCadPro_DiasVal.Text := dm.tblCadPro.FieldByName('PRODVL').Value;
    end;

    if dm.tblCadPro.FieldByName('PROBAL').IsNull = False then
    begin
    txtCadPro_BalCaixa.Text := dm.tblCadPro.FieldByName('PROBAL').Value;
    end;

    if dm.tblCadPro.FieldByName('PROPOF').IsNull = False then
    begin
    txtCadPro_PreOfe.Text := dm.tblCadPro.FieldByName('PROPOF').Value;
    end;

    if dm.tblCadPro.FieldByName('PROIOF').IsNull = False then
    begin
    txtCadPro_DataIniOfe.Text := dm.tblCadPro.FieldByName('PROIOF').Value;
    end;

    if dm.tblCadPro.FieldByName('PRODOF').IsNull = False then
    begin
    txtCadPro_DataFinOfe.Text := dm.tblCadPro.FieldByName('PRODOF').Value;
    end;

    if dm.tblCadPro.FieldByName('PROEPR').IsNull = False then
    begin
    txtCadPro_EstoqPrat.Text := dm.tblCadPro.FieldByName('PROEPR').Value;
    end;

    if dm.tblCadPro.FieldByName('PROPRT').IsNull = False then
    begin
    txtCadPro_QtdeMinPrat.Text := dm.tblCadPro.FieldByName('PROPRT').Value;
    end;

    if dm.tblCadPro.FieldByName('PROCOM').IsNull = False then
    begin
    txtCadPro_TotalComp.Text := dm.tblCadPro.FieldByName('PROCOM').Value;
    end;

    if dm.tblCadPro.FieldByName('PROVEN').IsNull = False then
    begin
    txtCadPro_TotalVend.Text := dm.tblCadPro.FieldByName('PROVEN').Value;
    end;

    if dm.tblCadPro.FieldByName('PRODTC').IsNull = False then
    begin
    txtCadPro_DataUlt.Text := dm.tblCadPro.FieldByName('PRODTC').Value;
    end;

    if dm.tblCadPro.FieldByName('PROFOC').IsNull = False then
    begin
    txtCadPro_FornUlt.Text := dm.tblCadPro.FieldByName('PROFOC').Value;
    end;

    if dm.tblCadPro.FieldByName('PROQDC').IsNull = False then
    begin
    txtCadPro_QtdeUlt.Text := dm.tblCadPro.FieldByName('PROQDC').Value;
    end;

    if dm.tblCadPro.FieldByName('PROPRC').IsNull = False then
    begin
    txtCadPro_PreUlt.Text := dm.tblCadPro.FieldByName('PROPRC').Value;
    end;

    if dm.tblCadPro.FieldByName('PROENT').IsNull = False then
    begin
    txtCadPro_DataEnt.Text := dm.tblCadPro.FieldByName('PROENT').Value;
    end;

    if dm.tblCadPro.FieldByName('PROQTE').IsNull = False then
    begin
    txtCadPro_QtdeEnt.Text := dm.tblCadPro.FieldByName('PROQTE').Value;
    end;

    if dm.tblCadPro.FieldByName('PROSAI').IsNull = False then
    begin
    txtCadPro_DataSai.Text := dm.tblCadPro.FieldByName('PROSAI').Value;
    end;

    if dm.tblCadPro.FieldByName('PROQTS').IsNull = False then
    begin
    txtCadPro_QtdeSai.Text := dm.tblCadPro.FieldByName('PROQTS').Value;
    end;

  end;

end;

// parte do codigo retirado temporariamente

  txtCadPro_AuxCodPro.Text := txtCadPro_CodPro.Text;

  dm.tblCadPro.Edit;

end;

Imagino que como seja um Locate na TABELA, e não um select na QUERY, esteja funcionando...

mas nem sei se é por causa disso...

Enfim....está funcionando, mas de um jeito não muito aconselhável...

Link para o comentário
Compartilhar em outros sites

  • 0
Então, Jhonas, o valor que aparece na caixa de mensagem é o mesmo que está na caixa de texto...

então não sei porque quando clico no Alterar, a busca não é feita com ele...

Mas eu tentei fazer a busca de outra forma aqui, e deu certo...

Só que eu to fazendo com Locate(), e não sei se isso é muito aconselhável, né;

Em certas situações eu até uso sem problemas quando o locate deve ser feito em poucos registros, mas se forem muitos é desconselhável, é preferível usar uma sql

with dm.QueryBuscaPro do
    begin
      Close;
      SQL.Clear;

      SQL.Add('SELECT * FROM ESTAPRO.dbf');
      SQL.Add('WHERE PRODES = :pDESC');

      ParambyName('pDESC').AsString := GridLocalPro.SelectedField.AsString;
      Open;

      showmessage(inttostr(QueryBuscaPro.RecordCount));  // veja quantos registros a sql tá trazendo

supondo que no seu arquivo não possua códigos repetidos, deveria trazer apenas um registro ... aquele que foi escolhido

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Então....a sql traz apenas 1 registro sempre... o q está correto..

Mas este não é o caso...

eu preciso é saber como fazer com Select, essa busca q estou fazendo com Locate().

porque quando clico no alterar, que tem o comando TABLE.EDIT, ele quer alterar algo da tabela, mas se eu fizer a busca com a query, isso dá algum problema???

Não posso usar o Locate() porque a base de dados não é pequena

Link para o comentário
Compartilhar em outros sites

  • 0
OBS: porque usando locate funciona ??? porque voce localiza o registro usando dm.QueryBuscaPro e usando locate na dm.tblCadPro voce encontra o registro na tabela, mas acabou desprezando a query que já tinha todos os campos do seu registro.

Estava observando o seu código, voce faz pesquisa usando dm.QueryBuscaPro e pegava os dados de dm.tblCadPro

por isso é que não funciona como voce quer

Faça a pesquisa usando o dm.QueryBuscaPro e jogue os dados desta query nos seus campos

exemplo:

procedure TfrmCadPro.btnAlterarClick(Sender: TObject);
var i: integer;
begin

   with dm.QueryBuscaPro do
      begin
        Close;
        SQL.Clear;

        SQL.Add('SELECT * FROM ESTAPRO.dbf');
        SQL.Add('WHERE PROCOD = :pCOD');

        showmessage(txtAuxCod.Text); // aqui vai aparecer o valor desta variavel
        ParambyName('pCOD').AsString := txtAuxCod.Text;

        Open;
      end;

   if not (txtAuxCod.Text = '')  then
      begin

        if dm.QueryBuscaPro.FieldByName('PROCOD').IsNull = False then
        begin
          txtCadPro_CodPro.Text := dm.QueryBuscaPro.FieldByName('PROCOD').Value;
        end;

        if dm.QueryBuscaPro.FieldByName('PROTIP').IsNull = False then
        begin
          cboCadPro_Secao.Text := dm.QueryBuscaPro.FieldByName('PROTIP').Value;
        end;

        //  CONTINUAÇÃO DOS CÓDIGOS

        if dm.QueryBuscaPro.FieldByName('PROQTS').IsNull = False then
        begin
        txtCadPro_QtdeSai.Text := dm.QueryBuscaPro.FieldByName('PROQTS').Value;
     end;


  // parte do codigo retirado temporariamente

  txtCadPro_AuxCodPro.Text := txtCadPro_CodPro.Text;

  dm.QueryBuscaPro.Edit;

end;

Mas sinceramente eu não faria um código como este... veja como funciona a opção Form Wizard do DataBase ( Menu do delphi )

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Era bem isso que eu estava tentando dizer...

que eu fazia a busca com a Query mas editava os dados da tabela...

enfim...

fiz desse jeito que voce falou...editando a query...

Mas quando clico pra alterar, acusa o erro... 'QueryBuscaForn: Cannot modify a read-only dataset'.

Isso significa que eu posso alterar a query pra não ser 'somente leitura'??

e como eu faço isso?? pois a propriedade Read-only do dataset da query já está false!!!

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Colega ... o seu código está muito estranho

veja : voce faz a busca por esta query

with dm.QueryBuscaPro do

Mas quando clico pra alterar, acusa o erro... 'QueryBuscaForn: Cannot modify a read-only dataset'.

aqui voce já esta informando outra query

QueryBuscaForn

Isso significa que eu posso alterar a query pra não ser 'somente leitura'??

e como eu faço isso?? pois a propriedade Read-only do dataset da query já está false!!!

a propriedade Read-only do dataset da query já está false ... mas em qual ?

QueryBuscaPro ? ou QueryBuscaForn ?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom... query é query... table é table...

Aí seguem umas idéias... apenas idéias...

Se a tabela está apontando para um registro (abacaxi), fazer uma pesquisa em uma query não afetará a tabela... que continuará apontando para o abacaxi...

Eu já há uns cinco anos +- abandonei o uso dos componentes db... e os ttable... só uso os tquery sempre passando os dados a serem consultados ou alterados para componetes TEdit, TComboBox, Etc...

Assim, nunca mais tive problemas de indexação, travamentos, corrupção, bloqueios de registros nas tabelas VisualDbase7 (.dbf) e Paradox da época... hoje, uso o MySQL...

Exemplo:

DescricaoEdit.Text := Query1.FieldByName('descricao').AsString;
CustoUnitarioEdit.Value := Query1.FieldByName('precocusto').AsCurrency;
EmPromocaoCBox.Checked := Query1.FieldByName('empromocao').AsInteger=1;
Toda query, passo para texto na íntegra, sem parâmetros:
with query1 do begin
    SQL.Clear;
    SQL.Add('select * ');
    SQL.Add('from `'+sCatalogo+'`.`produtos` ');
    SQL.Add('where codigoean="'+sCodigoEan2Find+'"');
End;{with query1}
try
   query1.open;
except
   query1.SQL.SaveToFile('c:\temp\query_de_pesquisa_de_um_produto.sql');
   ShowMessage('Falha ao pesquisar...');
end;

* para queries muito complexas, salvá-las para consulta com o DBExplorer, p.e., é uma mão-na-roda!

Ok? espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, este não é o erro....

este foi apenas um engano na escrita aqui no forum...

é que eu tenho essas duas query's......mas uma não interfere na outra....

Este erro ocorre mesmo.....

- ocorre pra QueryBuscaPro quando estou usando QueryBuscaPro [no cadastro de produtos]

- ocorre pra QueryBuscaForn quando estou usando QueryBuscaForn [no cadastro de fornecedores]

_____________________________________________________________

paulobergo, eu até comecei a utilizar só TQuery, sem DBEdit....só Edit's mesmo...

mas tive vários problemas na inclusão de dados no banco..

Quando eu inseria dados com INSERT INTO, dava erro nos campos em branco, porque não podiam ficar nulos, por exemplo..

e eu não consegui resolver estes problemas[e como larguei, ainda não consigo, mas pretendo saber], então resolvi usar a TTable pra inserir, alterar e excluir.....e a Tquery apenas pra buscar um registro....

mas agora estou tendo conflito também...

já não sei o que é melhor eu utilizar...

Link para o comentário
Compartilhar em outros sites

  • 0

Bom... tem coisa que não dá para evitar... projetar bem o banco de dados é fundamental e você não deveria pular essa etapa...

No MySQL você define qual é o valor "default" de um campo caso você "se esqueça" de preenchê-lo...

Numa tabela de estoque, por exemplo, o campo do código de barras não pode ficar nulo e, ainda por cima, não pode ter repetição... assim, na definição da tabela, você define que ele nunca poderá ser nulo, será preenchido automaticamente com 14 zeros e será definido como uma chave única, para evitar repetições...

Permitir conteúdo nulo em campos usados em pesquisas e comparações traz surpresas desagradáveis... exemplo:

update estoque

set quantidade = quantidade+10

where codigo=7893934042921;

* se o conteúdo atual do campo quantidade estiver nulo, continuará nulo após a query.

* se o campo quantidade foi definido como "not null" e default=0 no banco, ele estará, por default, com a quantidade 0 (zero) e, após a query, passará a ter o valor esperado de 10 (dez)...

Ok?

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, paulobergo, mas peguei uma encrenca e tenho q fazer esta aplicação usando tabela dbf....

e não sei como definir que tal campo não pode receber valor nulo...

eu tentei definir isso com código em Delphi mesmo.....mas não consegui...

por exemplo, uma certa data que não foi preenchida, quando eu ia inserir com insert into, dizia que ' / / ' não era uma data válida...

então, eu limpava este campo antes de inserir no banco com .Clear

aí falava q não aceitava valor nulo...

era este meu problema...

Eu gostaria muito de trabalhar apenas com instruções SQL para inserir, alterar, buscar e deletar;

Enfim...para este meu caso de agora...o que voce sugere?

que eu largue as TTables e mude tudo pra TQuery??

ou tem alguma outra boa solução pra pelos menos por enquanto??

Muito obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Hê! eu não pensaria nem 1/8 de vez em só usar TQuery!

Ainda desenvolvo aplicações com tabelas .dbf e escolho duas formas de acesso: via ODBC e diretamente pela BDE.

Via ODBC, cria-se uma fonte de dados pelo Administrador ODBC e na BDE, da mesma forma que se cria qualquer alias...

As tabelas .dbf criadas na sua aplicação deverão ser do tipo VisualDbase7, dBaseIV ou dBase5... o importante é você usar sempre um campo AutoInc para não deixar que as tabelas sejam criadas no formato dBaseIII...

Exemplo, usando ODBC

create table "cliente.dbf"

(

idcliente autoincrement,

nome char(40),

cpfcnpj char(14)

);

Exemplo, usando a BDE

create table "cliente.dbf"

(

idcliente autoinc,

nome char(40),

cpfcnpj char(14)

);

Para criar índices, não há diferenças entre ODBC e BDE:

create index nome on "cliente.dbf" (nome)

create unique index cpfcnpj on "cliente.dbf" (cpfcnpj)

* No segundo exemplo aí acima, não será permitido inserir um cpf ou cnpj duplicado...

Infelizmente, não é possível definir mais restrições e valores padronizados (default) nas tabelas... pelo menos, até hoje não descobri como fazer isso...

Com relação a vantagens de tempo de acesso, aí vão alguns números, para mesmas tabelas, com drivers diferentes (é só uma pequena comparação):

- Totalizar 20mil x 16mil registros para preparar um DecisionCube dos lançamentos do IPTU de Juiz de Fora:

a) Pelo banco em OpenBase (desconhecido, mas poderoso), via ODBC driver: ~~ 01min 30seg

B) Pelo banco de desenvolvimento, em MySQL 5.0.27, via ODBC driver: 16seg

c) Pelo banco convertido em tabela local em Paradox (.db): 14seg

d) Pelo banco convertido em tabela local em dBase (.dbf, Visual dBase7). via ODBC: 10seg

e) Pelo banco convertido em tabela local em dBase (.dbf, Visual dBase7), via BDE: 6seg

Tudo isso é bastante relativo e questionável em função da complexidade que seu sistema pode assumir... no caso dos exemplos acima, as tabelas são completamente iguais, com os mesmo índices e a aplicação é exatamente a mesma, tendo um DataModule para fazer a conexão a cada um dos diferentes bancos, sendo necessário destacar que a performance "lenta" do MySQL foi devida à consulta ser feita via rede...

Como você precisa usar .dbf, deverá implementar nos campos de entrada de dados o auto-preenchimento...

Por exemplo, sempre que iniciar um formulário de inclusão de registro, os campos que não podem ficar nulos deverão ser preenchidos automaticamente...

Para entrar com datas, use, por exemplo, TDataTimePicker, pois além de não aceitar uma data nula, você pode definir limites para o usuário...

Para valores, não uso TEdit... prefiro o HKCurrEdit (Componente que você precisa instalar), pois já cuida da formatação com milhares e variada quantidade de casas decimais...

Exemplo de validação ao sair de um campo:

Procedure TFormInclusao.NomeExit(Sender: TObject);

Begin

If Nome.Text='' then

ShowMessage('O campo nome não pode ficar vazio!');

{}

End;

E para mais detalhes sobre SQL, espie a ajuda do próprio Delphi (LocalSQL.hlp) para começar...

Ok?

Espero ter ajudado...

Observação:

No meu trabalho temos muitos sistemas com BDs diferentes, e em dois ambientes (produção e desenvolvimento)... Os principais servidores são Linux... O principal banco de dados é OpenBase (todo o sistema financeiro)... existem ainda BDs MySQL, PostGreSQL, Oracle, Access, Clipper e Paradox... e temos que conviver com todos...

Eu, particularmente, prefiro o MySQL...

Link para o comentário
Compartilhar em outros sites

  • 0

Em tempo...

Por sql (é preciso criar as tabelas .dbf pelo alias da BDE), você consegue também melhorar a identificação dos campos, não ficando limitado aos dez caracteres e às abreviações que só complicam mais as coisas... PRODES passaria a ser apenas "DESCRICAO"... ou, se você não conseguir se livrar de colocar um pedaço do nome da tabela antes do nome do campo, pelo menos "PRODUTO_DESCRICAO"... veja:

create table "administracao_direta.dbf"

(

idadmdireta autoinc,

denominacao char(64),

sigla char(8),

atividade char(30),

caracteristica blob(2)

)

insert into "administracao_direta.dbf"

(denominacao, sigla, atividade, caracteristica)

values

(

"Secretaria Especial de Planejamento e Administração",

"SEPA",

"Planejamento",

"Secretaria vinculada diretamente ao Prefeito, com estrutura hierárquica definida pela Lei 39339 de 30/12/2000"

)

insert into "administracao_direta.dbf"

(denominacao, sigla, atividade, caracteristica)

values

(

"Secretaria Especial de Saúde",

"SES",

"Saúde",

"Secretaria vinculada diretamente ao Prefeito, com estrutura hierárquica definida pelas Lei 39339 de 30/12/2000 e 41020 de 06/09/2002"

)

Ok?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...