Sou iniciante em Delphi, estou trabalhando num escritório que já existe 
um programinha de vendas de produtos feito em Delphi 7.
Não existe uma rotina para deletar o produto, o que existe é se ele é 
ativo ou não, se for ativo é visível no relatório, etc...
Isso está deixando o arquivo muito grande, e eu pensei em mudar para 
excluir fisicamente.
Não há Banco de Dados, e o meu chefe não quer refazer o programa, então 
vou só implementar mesmo...

Tentei fazer um array multiplo para mudar o id_Cliente antigo, o nome e 
o id_clientenovo (vcs vão ver mais abaixo, mas não implementei nada aqui 
do array)
Seria o array mais ou menos assim:
========================================
tmpArrayCliente  : array of array of String;

tmpArrayCliente[NOrdem -1][0] := IntToStr(clientes.id_cliente);
tmpArrayCliente[NOrdem -1][1] :=  cliente.nome;
tmpArrayCliente[NOrdem -1][2] := IntToStr(NOrdem);

pego na rotina de exclusão de clientes e uso na rotina de manutenção do 
record produtos, mas não estou conseguindo.
========================================

Exemplo para facilitar o que estou dizendo:

type
   clientes = record
  id_cliente : integer;
       nome : String[40];
end;

type
  produtos = record
  id_produto : integer;
  id_cliente : integer;
  produto : string[60];
end;
...
var
  fcliente : file of clientes;
  cliente : clientes;
  fproduto: file of produtos;
  produto: produtos;
...

// É claro que existem mais coisas, porém, para facilitar o entendimento 
vou colocar apenas estes.

Quando eu excluir um cliente quero que o produto do cliente (que foi 
removido) também seja removido. Eu até fiz, só que, quando vou 
visualizar os clientes, os produtos deles são trocados, verificando, 
vejo que o número de ordem (1,3,4...) fica sem um número, então eu fiz:

Tem todo aquele processo de abrir, reset, etc... que não vou colocar 
aqui, só o necessário.

procedure...
var
  nOrdem : integer;
begin
  nOrdem := 1;

seek(fcliente,0);
while not eof(fcliente) do
begin
  {se diferente do que vai ser excluído}
  if cliente.id_cliente <> StrToInt(label1.caption) then
  begin
     {tmpcliente é um record temporário}
      tmpcliente.id_cliente := nOrdem;
      tmpcliente.nome := cliente.nome;

// aqui eu pegava também o id_cliente, o nOrdem, o nome e colocava no 
array dito lá no início
  end;

inc(nOrdem);
end;

{Até que funciona, ele coloca em ordem novamente, 1,2,3,4...
O problema é com o record PRODUTOS. Quero eliminar o produto referente 
aquele cliente excluído e deixar na ordem, sendo que a ordem bata com a 
ordem do record dos clientes: id_cliente = 2 - nome = fernando.
produtos: "produto.id_cliente = 2" fique para fernando (lembrando que a 
ordem foi mudada e o id_cliente 2 era de outra pessoa, mas foi excluído, 
e colocado o nOrdem novamente deixando o id_cliente para, agora, com 
fernando.
Tentei implementar com o array mas fiquei todo enrolado :) }

// Entenderam? Não sei se existe outra forma de fazer isso, eu tentei 
usar a lógica da lógica que eu tenho :)
end;

Robson

Responder a