Como mover registros de uma tabela p/ outra
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.
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
Curtidas 0
Respostas
Marcelo.c
03/04/2003
Experimente retirar a linha:
tbBaixa.Append;
tbBaixa.Append;
GOSTEI 0
Vega.x
03/04/2003
Não funcionará pq o Append serve para preparar a tabela para receber os dados.
GOSTEI 0
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
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;
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
03/04/2003
O comando Append substitui os comandos Edit e Insert.
GOSTEI 0
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
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?
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
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....
espero ter ajudado....
GOSTEI 0
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;
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
03/04/2003
Valeu Marcelo.C!!!
Finalmente consegui.
Finalmente consegui.
GOSTEI 0
Marcelo.c
03/04/2003
Fico feliz em ter ajudado.
:D
:D
GOSTEI 0