Não Inserir Registro Iguais no DbGrid - Open Dialog

Delphi

02/12/2018

Boa tarde!!!

Não estou conseguindo resolver um problema, tenho um dbgrid aonde eu insiro vários registros pelo opendialog,mas por exemplo, se eu esquecer de inserir 1 item, e ir para inserir de novo, e inserir um que já foi inserido anteriormente no dbgrid, vai inserir em duplicidade, preciso que inserira somente o que ainda não existe no dbgrid e mantém os que já estão no dbgrid

Veja na imagem como fica no dbgrid
https://uploaddeimagens.com.br/imagens/1-jpg-94f986e8-e523-41bc-a426-af9e829028c5


Código do botão Inserir

procedure TfrmInserirArt.btnInserirArtClick(Sender: TObject);
  var i: Integer;
  Origem, Destino, caminho: string;
begin
  if openDialogInserirArt.Execute then
        for i := 0 to openDialogInserirArt.Files.Count - 1 do
            begin
                  try
                        memTableInserirArt.Open;
                        memTableInserirArt.Append;
                        memTableInserirArt.FieldByName('ART_CODIGOOBRA').AsString := edtCodigo.Text;
                        memTableInserirArt.FieldByName('ART_NOME').AsString := ExtractFileName(openDialogInserirArt.Files[i]);
                        memTableInserirArt.FieldByName('ART_CAMINHO').AsString := ExtractFilePath(openDialogInserirArt.Files[i]);
                        memTableInserirArt.FieldByName('ART_DATA').AsString := mskdata.Text;
                        memTableInserirArt.FieldByName('ART_NOMECAMINHO').AsString := ExtractFilePath(openDialogInserirArt.Files[i]) + ExtractFileName(openDialogInserirArt.Files[i]);
                        memTableInserirArt.FieldByName('ART_DESTINO').AsString := 'C:\\SisEng\\Art\\CodigoObra\\' + memTableInserirArt.FieldByName('ART_CODIGOOBRA').AsString;
                        memTableInserirArt.FieldByName('ART_STATUS').AsString := 'FECHADO';
                        memTableInserirArt.FieldByName('ART_CAMINHORENOMEADO').AsString := memTableInserirArt.FieldByName('ART_DESTINO').AsString +'\\'+memTableInserirArt.FieldByName('ART_NOME').AsString;
                        memTableInserirArt.FieldByName('ART_NUMERO').AsString := edtNumeroArt.Text;
                        memTableInserirArt.FieldByName('ART_TIPO').AsString := 'CONSTRUTORA';
                        memTableInserirArt.Post;
                  except
                      on E: Exception do
                        begin
                          //memTableInserirArt.Cancel;
                          ShowMessage('Erro ao incluir o arquivo na tabela.' + sLineBreak +
                                      E.Message);
                        end;
                  end;

            end;
    ShowMessage('Verifique,Caso haja ART[s] em Negrito, já foram inseridas!'+#13+'Favor Excluir!');
end;
Bruno Henrique

Bruno Henrique

Curtidas 0

Respostas

Natanael Ferreira

Natanael Ferreira

02/12/2018

Tente utilizar o Locate para testar se é uma duplicidade:

procedure TfrmInserirArt.btnInserirArtClick(Sender: TObject);
var
  i: Integer;
  Origem, Destino, caminho: string;
begin
  if openDialogInserirArt.Execute then
    for i := 0 to openDialogInserirArt.Files.Count - 1 do
    begin
      try
        memTableInserirArt.Open;

        if not memTableInserirArt.Locate('ART_NOME', ExtractFileName(openDialogInserirArt.Files[i]),
          [loCaseInsensitive]) then // Se não for duplicidade, insere novo registro
        begin
          memTableInserirArt.Append;
          memTableInserirArt.FieldByName('ART_CODIGOOBRA').AsString := edtCodigo.Text;
          memTableInserirArt.FieldByName('ART_NOME').AsString :=
            ExtractFileName(openDialogInserirArt.Files[i]);
          memTableInserirArt.FieldByName('ART_CAMINHO').AsString :=
            ExtractFilePath(openDialogInserirArt.Files[i]);
          memTableInserirArt.FieldByName('ART_DATA').AsString := mskdata.Text;
          memTableInserirArt.FieldByName('ART_NOMECAMINHO').AsString :=
            ExtractFilePath(openDialogInserirArt.Files[i]) +
            ExtractFileName(openDialogInserirArt.Files[i]);
          memTableInserirArt.FieldByName('ART_DESTINO').AsString := 'C:\\\\SisEng\\\\Art\\\\CodigoObra\\\\'
            + memTableInserirArt.FieldByName('ART_CODIGOOBRA').AsString;
          memTableInserirArt.FieldByName('ART_STATUS').AsString := 'FECHADO';
          memTableInserirArt.FieldByName('ART_CAMINHORENOMEADO').AsString :=
            memTableInserirArt.FieldByName('ART_DESTINO').AsString + '\\\\' +
            memTableInserirArt.FieldByName('ART_NOME').AsString;
          memTableInserirArt.FieldByName('ART_NUMERO').AsString := edtNumeroArt.Text;
          memTableInserirArt.FieldByName('ART_TIPO').AsString := 'CONSTRUTORA';
          memTableInserirArt.Post;
        end;
      except
        on E: Exception do
        begin
          // memTableInserirArt.Cancel;
          ShowMessage('Erro ao incluir o arquivo na tabela.' + sLineBreak + E.Message);
        end;
      end;
    end;

  ShowMessage('Verifique,Caso haja ART[s] em Negrito, já foram inseridas!' + #13 +
    'Favor Excluir!');
end;
GOSTEI 0
POSTAR