Como mover registros de uma tabela p/ outra

Delphi

03/04/2003

Olá pessoal!

Possuo em uma base de dados Access, com conexao via ADO, 2 tabelas:
TabelaCadastro
TabelaBaixa

Ambas com os seguintes campos:

COD AutoInc
PROTOCOLO Número
NOME Texto

Criei na tela de baixa de operações o seguinte código no botão de baixa:

[color=blue:86a217e52a]procedure TF_Baixa.btnBaixarClick(Sender: TObject);
var
i: Integer;
begin
with Modulo do
if MessageDlg(´Deseja baixar o registro?´, mtCustom, [mbYes, mbNo], 0)= idYes then
begin
tbBaixa.Append;
for i:= 0 to tbProt.FieldCount - 1 do
tbBaixa.Fields[i].Assign(tbProt.Fields[i]);
tbBaixa.Post;
tbProt.Delete;
end
else
Abort;
end;[/color:86a217e52a]

Esse código acima faria o seguinte:
Se eu clicar no botão ´Sim´, o registro seria copiado para a TabelaBaixa e depois excluído da TabelaCadastro.

Mas acaba surgindo a seguinte mensagem de erro:

[color=red:86a217e52a]´List index out of bounds (20)´[/color:86a217e52a]

e o registro selecionado para baixa nem é copiado para a TabelaBaixa e nem excluído da TabelaCadastro.

Como devo proceder nesse caso?

Desde já agradeço.


Vega.x

Vega.x

Curtidas 0

Respostas

Marcelo.c

Marcelo.c

03/04/2003

Experimente retirar a linha:

tbBaixa.Append;


GOSTEI 0
Vega.x

Vega.x

03/04/2003

Não funcionará pq o Append serve para preparar a tabela para receber os dados.


GOSTEI 0
Marcelo.c

Marcelo.c

03/04/2003

Tem razão. É que eu não me lembrava de ter utilizado Append no meu código, olhei e percebi que utilizo [b:da3ecae114]Insert[/b:da3ecae114], experimente trocar Append por Insert, quem sabe.


GOSTEI 0
Marcelo.c

Marcelo.c

03/04/2003

Outro detalhe que verifiquei é que antes de promover a operação eu coloco a Tabela origem em edição, veja o código:

if MessageDlg(´Tem certeza que deseja transferir o aluno para não-freqüentes?´,mtinformation,[mbyes,mbNo],0) = mrNo then
exit;
DM_Geral.TabParados.open;
Dm_Geral.TabControle.edit;
Dm_Geral.TabParados.insert;
for Num := 0 to DM_Geral.TabControle.FieldCount - 1 do
DM_Geral.TabParados.Fields[Num].Assign(DM_Geral.TabControle.Fields[Num]);
Dm_Geral.TabParados.post;
Dm_Geral.TabControle.delete;


GOSTEI 0
Vega.x

Vega.x

03/04/2003

O comando Append substitui os comandos Edit e Insert.


GOSTEI 0
Marcelo.c

Marcelo.c

03/04/2003

Você não entendeu. Não é na tabela de [b:22656dd74d]destino[/b:22656dd74d] que eu utilizo Edit, é na tabela de [b:22656dd74d]origem[/b:22656dd74d].


GOSTEI 0
Vega.x

Vega.x

03/04/2003

Continua dando a mesma mensagem de erro.

Um colega meu falou que o erro não é nos INSERT, APPEND e EDIT, e sim na linha:

[color=red:dab183a662]for i:= 0 to tbProt.FieldCount - 1 do[/color:dab183a662]

A função da linha acima (como ele disse) é atribuir um valor à variável ´i´.
Quando eu executo o comando DELETE, o erro acontece.

Como eu poderia proceder neste caso?


GOSTEI 0
Anonymous

Anonymous

03/04/2003

cara por que você está copiando de uma tabela para outra, por que ao invés de copiar os dados para uma outra tabela você não cria um campo na propria tabela de ´origem´ chamado status e quando algo for baixado você coloca o status deste objeto para B de baixado por exemplo e se vc não quiser em determinado ponto mostrar os registros baixados, é só fazer um filtro na tabela...


espero ter ajudado....


GOSTEI 0
Marcelo.c

Marcelo.c

03/04/2003

Verifique se vc declarou a varíavel [b:f0c0430d82]i[/b:f0c0430d82].

A idéia do [b:f0c0430d82]Balceiro[/b:f0c0430d82] é válida, mas o código que estou utilizando funciona bem, veja o código completo:

procedure TF_DPessoais.BitBtnEnviaClick(Sender: TObject);
[b:f0c0430d82]var
Num: SmallInt;[/b:f0c0430d82][i:f0c0430d82]//integer também funciona.[/i:f0c0430d82]
begin
if DM_Geral.TabControle.TableName=´Controle de Alunos´ then
begin
if MessageDlg(´Tem certeza que deseja transferir o aluno para não-freqüentes?´,mtinformation,[mbyes,mbNo],0) = mrNo then
exit;
DM_Geral.TabParados.open;
Dm_Geral.TabControle.edit;
Dm_Geral.TabParados.insert;
for Num := 0 to DM_Geral.TabControle.FieldCount - 1 do
DM_Geral.TabParados.Fields[Num].Assign(DM_Geral.TabControle.Fields[Num]);
Dm_Geral.TabParados.post;
Dm_Geral.TabControle.delete;
end
end;


GOSTEI 0
Vega.x

Vega.x

03/04/2003

Valeu Marcelo.C!!!

Finalmente consegui.


GOSTEI 0
Marcelo.c

Marcelo.c

03/04/2003

Fico feliz em ter ajudado.
:D


GOSTEI 0
POSTAR