Editar StringGrid

Delphi

CRUD - Delphi

19/10/2020

Boa tarde Pessoal,
Mais uma vez recorro a ajuda de vocês. Tenho um StringGrid em meu form e carrego as informações dele de uma tabela. Estas informações podem ser editadas pelo usuário, assim como o usuário pode acrescentar linhas no StringGrid e adicionar informações relevantes neste form. O que preciso é que quando o usuário acrescente linhas com informações o sistema salve apenas estas alterações. Hoje salvo e recupero da seguinte forma:
SALVAR:
 with CDS, StringGrid1 do
 begin
  for i := 1 to Pred(RowCount) do
  begin
  Insert;
  FieldByName('ID').Value:= DBEdit1.Text;
  FieldByName('DESCRICAO').AsString := Cells[0,i];
  FieldByName('DOCUMENTO').AsString := Cells[1,i];
  FieldByName('AREA').AsString := Cells[2,i];
  FieldByName('VALOR').AsString := Cells[3,i];
  Post;
  end;
 end;


RECUPERAR:
CDSRecuperaGrid.Close;
CDSRecuperaGrid.ParamByName('pid').AsInteger:= StrToIntDef(DBEdit1.Text, 0);
CDSRecuperaGrid.Open;
 if CDSRecuperaGrid.RecordCount > 0 then
 begin
  for i := 1 to CDSRecuperaGrid.RecordCount do
  begin
  StringGrid1.RowCount:= CDSRecuperaGrid.RecordCount + 1;
  StringGrid1.Cells[0,i]:= CDSRecuperaGrid.FieldByName('DESCRICAO').AsString;
  StringGrid1.Cells[1,i]:= CDSRecuperaGrid.FieldByName('DOCUMENTO').AsString;
  StringGrid1.Cells[2,i]:= CDSRecuperaGrid.FieldByName('AREA').AsString;
  StringGrid1.Cells[3,i]:= CDSRecuperaGrid.FieldByName('VALOR').AsString;
  SBnew.Enabled:= false;
  CDSRecuperaGrid.Next;
  end;
 end
  else
 begin
 limpaGrid(StringGrid1);
 SBnew.Enabled:= true;
 end;


Como podem notar eu tentei forçar somente edição neste form, mas sem sucesso e não sei como prosseguir para solução que espero.
Se puderem me dar uma ideia de como prossigo. Agradeço desde já.
Devnator

Devnator

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

19/10/2020

pergunta:

porque StringGrid e não dbGrid? tem algum motivo?

GOSTEI 0
Devnator

Devnator

19/10/2020

Bom dia,

pergunta:

porque StringGrid e não dbGrid? tem algum motivo?



Respondendo sua pergunta Emerson. Eu carrego informações de uma tabela, que é o tipo de transação em uma coluna e na outra coluna o usuário digita o valor do documento, essas informações posteriormente são salvas em uma outra tabela com ID do cliente, documento e valor. Só que neste StringGrid eu preciso que seja preenchido somente os documentos referentes as operações de cada orçamento fechado. Neste caso utilizei StringGrid com ComboBox na primeira coluna para o usuário selecionar apenas os documentos contidos na negociação e na segunda coluna eu tratei para apenas aceitar números, se alterar para DBGrid ele trará todos os documentos e isto dificultará a usabilidade para o usuário que terá que procurar em mais de duzentos registros e incluir os valores que podem estar no começo, meio ou fim do DBGrid. No StringGrid com a seleção apenas dos documentos que pertencem a negociação a visibilidade do sistema (Na minha opinião) fica menos poluída.

Obrigado!
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

19/10/2020

você pode fazer isso a partir de um dataset ligado numa grid.
os documentos podem ficar em outro dataset e serem filtrados conforme necessidade, e serem utilizados como lookup no campo desejado.
acredito que seja mais produtivo e mais fácil de gerenciar os registros incluídos/alterados.

você pode se orientar por este artigo.

https://www.devmedia.com.br/clientdataset-gerando-tabela-temporaria-em-memoria/3193


GOSTEI 0
POSTAR