Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marostegan

[Resolvido] Trasferir Vários Dados

Recommended Posts

Pessoal, estou com um problema aqui...

 

até hoje só precisei fazer a transferencias de um cadastro para outra tabela, nesse caso sempre utilizei:

 

begin
dm.q_baixa_inq.Close;
dm.q_baixa_inq.SQL.Clear;
dm.q_baixa_inq.SQL.Add('Insert into tbl_baixa_inq(id_inq, valor, vencimento, baixa, parcela, tipo, especificacao, baixados) values ('''+f_cad_inquilinos.DBEdit76.Text+''','''+f_cad_inquilinos.DBEdit72.Text+''','''+f_cad_inquilinos.DBEdit74.Text+''','''+MaskEdit1.Text+''','''+f_cad_inquilinos.DBEdit73.Text+''','''+f_cad_inquilinos.DBComboBox3.Text+''','''+f_cad_inquilinos.DBEdit75.Text+''','''+edt_baixa.Text+''')');
dm.q_baixa_inq.ExecSQL;

 

 

Agora surgiu um problema aqui, onde tenho que transferir vários dados de uma tabela para outra.

 

Por exemplo, todos os cadastro que o campo "SITUACAO" estiver com "A" deve sair da tabela 1 e ir para a tabela 2

 

como posso fazer isso?

 

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, sugiro dar uma estudada em sql... afinal, não é difícil montar o sql que você deseja fazer... seria algo do tipo...

 

insert into TabelaA ( campoA, campoB, campoC)
select valorA, valorB, valorC
from TabelaB
where situacao = "A"

 

Obs.: não lembro se o delphi dá suporte a este tipo de sql direto nos TQuery da vida.

Obs2: se a tabela for muito grande, poderá travar seu programa enquanto estiver fazendo este comando... ai teria duas saídas: criar uma procedure (se o banco de dados aceitar) para controlar essa migração através de cursores ou tentar utilizar o BCP (novamente se o BD suportar) para importar estes dados a partir de um arquivo, que você poderia gerar com um select que montasse o arquivo de BCP no formato lido pelo banco.

 

[ ]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá amigo.. eu tentei fazer umas coisas aqui... mas não deu certo...

 

tenho aqui a tabela aonde os recibos são gerados: tbl_pag_inq e a tabela para onde os dados devem ir que é: tbl_gerados_inq

 

fiz um filtro por data de vencimento (tem varias datas diferentes de vencimento de um cliente dentro do mes, então esse filtro pega tudo o que vence dentro do mes, independente do dia):

 

var
 Present: TDateTime; dataini, datafim : Tdate;
 Ano, Mes, Dia : Word;
begin
 dm.q_pag_inq.First;
 Present:= EndOfTheMonth(Date);
 DecodeDate(Present, Ano, Mes, Dia);
 dataini := StartOfTheMonth(Date);
 datafim := EndOfTheMonth(Date);
 DateEdit1.Date := dataini;
 DateEdit2.Date := datafim;
begin
with dm.q_pag_inq do
begin
Close;
SQL.Clear;
SQL.Add('select * from tbl_pag_inq where vencimento Between :dataini and :datafim');
SQL.Add('AND id_inq = ' + QuotedStr(f_cad_inquilinos.Edt_inq.Text));
SQL.Add('AND baixados = ' + QuotedStr(f_cad_inquilinos.edt_baixa.Text) + 'order by vencimento asc');
Parameters.ParamByName('dataini').Value := DateEdit1.date;
Parameters.ParamByName('datafim').Value := DateEdit2.date;
Open;

end; end; end;

 

*** até aqui eu fiz o filtro, gera o recibo tudo certinho... porém, quando o usuario solicitar esse filtro dos pagamentos abertos no mes e gerar recibos todos os valores devem ser transferidos para uma outra tabela (tbl_gerados_inq)... e é aqui que eu nao consigo.

 

 

depois de toda essa programação ai em cima, tentei fazer isso:

 

begin
dm.q_pag_inq.Close;
dm.q_pag_inq.sql.Clear;
dm.q_pag_inq.sql.add('INSERT INTO tbl_gerados_inq SELECT * FROM tbl_pag_inq where vencimento between :dataini and :datafim');
dm.q_pag_inq.SQL.Add('AND id_inq = ' + QuotedStr(f_cad_inquilinos.Edt_inq.Text)); //aqui ele filtra pelo codigo do cliente
dm.q_pag_inq.SQL.Add('AND baixados = ' + QuotedStr(f_cad_inquilinos.edt_baixa.Text) + 'order by vencimento asc'); //aqui ele filtra os campos que estão como baixados "N"
dm.q_pag_inq.ExecSQL;

 

** não dá erro... mas também não funciona

 

 

Os nome das Querys:

 

tbl_gerados_inq -> q_gerados_inc

tbl_pag_inq -> q_pag_inq

 

 

Mas o que está errado? (meu banco de dados é Access)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na query onde está migrando os dados não está faltando passar as datas do between?? Ele deve estar considerando as datas entre null and null por isso não dá erro (provavelmente).

 

[ ]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso passar uma dica para simplificar? Tenha um adoQuery que irá buscar os dados da tabela origem e um adoQuery para inserir os dados na tabela destino.

 

 qryOrigem.SQL.Text := 'SELECT os dados da tabela origem';
 qryOrigem.Open;
 qryOrigem.First;
 while not qryOrigem do
   begin
     qryDestino.SQL.Text := 'INSERT na tabelas destino ( nestes campos) VALUES (' +  qryOrigem.FieldByName('MeuCampo').Value + ', ' + qryOrigem.FieldByName('MeuOutroCampo').Value + ')';
     qryDestino.ExecSQL;
     qryOrigem.Next;
   end;

 

Enfim, não é a forma mais elegante mas é a forma conceitualmente mais fácil em se desenvolver, apesar do trabalho massante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá pessoal... consegui resolver da seguinte forma:

 

var
 i: integer;
 NomeCampo: String;
begin  //transfere todos os filtrados
 dm.q_pag_inq.First;
 While Not dm.q_pag_inq.Eof Do
    Begin
       dm.q_gerados_inq.Append;
       For i := 0 To dm.q_pag_inq.FieldCount - 1 Do
           Begin
               NomeCampo := dm.q_pag_inq.Fields[i].FieldName;
               dm.q_gerados_inq.FieldbyName(NomeCampo).Value :=
               dm.q_pag_inq.FieldbyName(NomeCampo).Value;
           End;
       dm.q_gerados_inq.Post;
       dm.q_pag_inq.Next;
end; end; end; 

 

 

obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ops.. surgiu um probleminha...

 

na hroa de baixar os dados filtrados, usei esse esquema e tudo fucniona certinho..

 

só que na tabela baixa tem um campo a mais, "data_baixa"

 

como faço pra ele jogar pra todos os dados transferindo, no campo "data_baixa", a data que está em um edit?

 

 

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uai...

 

simples:

 

var
 i: integer;
 NomeCampo: String;
begin
 //transfere todos os filtrados
 dm.q_pag_inq.First;
 While Not dm.q_pag_inq.Eof Do
   Begin
     dm.q_gerados_inq.Append;
     For i := 0 To dm.q_pag_inq.FieldCount - 1 Do
       Begin
         NomeCampo := dm.q_pag_inq.Fields[i].FieldName;
         dm.q_gerados_inq.FieldbyName(NomeCampo).Value := dm.q_pag_inq.FieldbyName(NomeCampo).Value;
         dm.q_gerados_inq.FieldByName('data_baixa').Value := StrToDate(edit1.Text);
       End;
     dm.q_gerados_inq.Post;
     dm.q_pag_inq.Next;
   end;
end;

 

Não me lembro se existe a function StrToDate mas deve existir uma equivalente, pelo menos dentro da DateUtils.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.