Fórum Como mover registros de uma tabela p/ outra #151609

03/04/2003

0

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

Responder

Posts

03/04/2003

Marcelo.c

Experimente retirar a linha:

tbBaixa.Append;


Responder

Gostei + 0

03/04/2003

Vega.x

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


Responder

Gostei + 0

03/04/2003

Marcelo.c

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.


Responder

Gostei + 0

03/04/2003

Marcelo.c

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;


Responder

Gostei + 0

03/04/2003

Vega.x

O comando Append substitui os comandos Edit e Insert.


Responder

Gostei + 0

03/04/2003

Marcelo.c

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].


Responder

Gostei + 0

03/04/2003

Vega.x

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?


Responder

Gostei + 0

03/04/2003

Anonymous

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....


Responder

Gostei + 0

03/04/2003

Marcelo.c

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;


Responder

Gostei + 0

04/04/2003

Vega.x

Valeu Marcelo.C!!!

Finalmente consegui.


Responder

Gostei + 0

04/04/2003

Marcelo.c

Fico feliz em ter ajudado.
:D


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar