Fórum Clonar registro de uma tabela #7891
23/07/2009
0
Irenildo Carvalho
Curtir tópico
+ 0Posts
23/07/2009
Rodrigo Mourão
Bem existe mil maneira de preparar Neston, invent uma. Com Delphi é a mesma coisa. Eu vou lhe mostar aqui uma das muitas maneira que você pode fazer isso. Eu faria o seguinte criaria uma função no Delphi CloneBem assim:
function CloneBem(BemID, Quantidade: Integer): Boolean;
A ideia é você passar a chave do Bem, que é o identificador unico do bem e a quantidade de clones que você faz. A implementação ficaria assim:
function CloneBem(BemID, Quantidade: Integer): Boolean;
var
Select, Insert: String;
Qry: TSqlQuery;
begin
Select := 'Select * from Bem where BemID = '+IntToStr(BemID);
Qry := TSqlQuery.Create(Self);
Qry.SqlConnection := SeuSqlConnectionAqui;
Qry.Sql.Add(Select);
Qry.Open;
If not Qry.Eof then
begin
for I := 1 to Quantidade do
begin
Insert := 'Insert into Bem (Tombamento, CampoA, CampoB, CampoC) values ('+
Insert := Insert +IntToStr(Qry.FieldByName('Tombamento').asInteger+I)+', '+
Insert := Insert +Qry.FieldByName('CampoA').asString+', '+
Insert := Insert +Qry.FieldByName('CampoB').asString+', '+
Insert := Insert +Qry.FieldByName('CampoC').asString+')';
SeuSqlConnectionAqui.ExecuteDirect(Insert);
end;
end;
end;
Bem como vc nao deu detalhes do banco e conexao entao pensei num rotina 100% Delphi. Aqui asumi que vc usa DBX caso não adapte para seu tipo de conexao. Bem o que fiz foi dar um select e trazer o registro que vc quer clonar. Feito isso criamos um loop de 1 até a quantidade que quer colocar e para cada loop dp for geramos um comando insert so alteramos o tombamento que vai ser o tombamento atual + I ou seja + 1, 2, 3, 4, etc.
Acho que isso ajuda e espero ter sido claro.
Abs!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Gostei + 0
26/07/2009
Irenildo Carvalho
Quantidade: Integer): Boolean;
var
Select, Insert: String;
Qr: TAdoQuery;
begin Select := 'Select * from tb_Patrimonio where pat_codigo = '+IntToStr(pat_codigo);
Qr := TADOQuery.Create(Self);
qr.Connection := dmAdo.ADOConnection;
Qr.Sql.Add(Select);
Qr.Open;
If not Qr.Eof then
begin
for I := 1 to Quantidade do
begin
Insert := 'Insert into tb_patrimonio (pat_codigo, pat_descricao, pat_referencia, pat_valor) values ('+
Insert := Insert +IntToStr(Qr.FieldByName('pat_codigo').asInteger+I)+', '+
Insert := Insert +Qr.FieldByName('pat_descricao').asString+', '+
Insert := Insert +Qr.FieldByName('pat_referencia').asString+', '+
Insert := Insert +Qr.FieldByName('pat_valor').asString+')';
dmAdo.ADOConnection.Execute(Insert);
end;
end;
end; Segue a imagem do erro...
Gostei + 0
28/07/2009
Rodrigo Mourão
var
I: Integer;
Abs!
Gostei + 0
28/07/2009
Irenildo Carvalho
Gostei + 0
28/07/2009
Rodrigo Mourão
function TfrmCadPatrimonioDetalhe.ClonePat(pat_codigo,
Quantidade: Integer): Boolean;
var
Select, Insert: String;
Qr: TAdoQuery;
begin Select := 'Select * from tb_Patrimonio where pat_codigo = '+IntToStr(pat_codigo);
Qr := TADOQuery.Create(Self);
qr.Connection := dmAdo.ADOConnection;
Qr.Sql.Add(Select);
Qr.Open;
If not Qr.Eof then
begin
for I := 1 to Quantidade do
begin
Insert := 'Insert into tb_patrimonio (pat_codigo, pat_descricao, pat_referencia, pat_valor) values (';
Insert := Insert +IntToStr(Qr.FieldByName('pat_codigo').asInteger+I)+', ';
Insert := Insert +Qr.FieldByName('pat_descricao').asString+', ';
Insert := Insert +Qr.FieldByName('pat_referencia').asString+', ';
Insert := Insert +Qr.FieldByName('pat_valor').asString+')';
dmAdo.ADOConnection.Execute(Insert);
end;
end;
end;
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Gostei + 0
28/07/2009
Irenildo Carvalho
Gostei + 0
28/07/2009
Rodrigo Mourão
Correto:
Insert := 'Insert into tb_patrimonio (pat_codigo, pat_descricao, pat_referencia, pat_valor) values (';
Insert := Insert +IntToStr(Qr.FieldByName('pat_codigo').asInteger+I)+', ';
Insert := Insert +Qr.FieldByName('pat_descricao').asString+', ';
Insert := Insert +Qr.FieldByName('pat_referencia').asString+', ';
Insert := Insert +Qr.FieldByName('pat_valor').asString+')';
Errado:
Insert := 'Insert into tb_patrimonio (pat_codigo, pat_descricao, pat_referencia, pat_valor) values ('+
Insert := Insert +IntToStr(Qr.FieldByName('pat_codigo').asInteger+I)+', '+
Insert := Insert +Qr.FieldByName('pat_descricao').asString+', '+
Insert := Insert +Qr.FieldByName('pat_referencia').asString+', '+
Insert := Insert +Qr.FieldByName('pat_valor').asString+')'+
Gostei + 0
28/07/2009
Irenildo Carvalho
Gostei + 0
28/07/2009
Irenildo Carvalho
var
Select, Insert: String;
Qr: TAdoQuery;
i, quantidade : integer;
begin
inherited;
with DataSource.DataSet do
begin
if State = dsEdit then
begin
qr := TADOQuery.Create(Self);
try
qr.Connection := dmADO.ADOConnection;
qr.SQL.Add('Select * from tb_Patrimonio where pat_codigo = '+FieldByName ('pat_codigo').AsString);
Select := IntToStr(FieldByName ('pat_codigo').Value); qr.Open; Quantidade := strtoint(edTombamento.Text); If not Qr.Eof then
begin
for i := 1 to Quantidade do
begin
dmAdo.ADOConnection.Execute ('Insert into tb_patrimonio (pat_tombamento, pat_descricao, pat_referencia, pat_valor) values ('+
IntToStr(Qr.FieldByName('pat_tombamento').asInteger+I)+', '+
Qr.FieldByName('pat_descricao').asString+', '+
Qr.FieldByName('pat_referencia').asString+', '+
Qr.FieldByName('pat_valor').asString+')');
end;
end;
finally
qr.Close;
qr.Free;
end;
end;
end;
end; end.
Gostei + 0
28/07/2009
Rodrigo Mourão
Não a virgula grande e para ficar em destraque mesmo. rsrsrs e que nem eu saiba qual era a diferença.
Bem, eu nunca vi este tipo de erro, qual é o banco ?
Pela mensagem está parecendo que ele não aceita a palavra armário. Parece que ele entende como nome de coluna.
Se quiser mandar a app que eu compilo e teste. Erros tem que ser depurados, debugados. Utilize o disco virtual para enviar o projeto para que eu possa compilar e testar .
Fico no aguardo abs !!
Gostei + 0
29/07/2009
Irenildo Carvalho
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/bd.rar Na dúvida, segue os componentes utilizados também... -> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/rxlib275.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/xpmenu7.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/rxlib275.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/VCLSckin%204.8.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/Componente.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/Sistemas.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/TMS_pack_1.part01.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/TMS_pack_1.part02.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/TMS_pack_1.part03.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/TMS_pack_1.part04.rar
-> http://video.devmedia.com.br/discovirtual/201854/Proj%20Patrimonio/TMS_pack_1.part05.ra tô no aguardo um abraço
Gostei + 0
31/07/2009
Irenildo Carvalho
Gostei + 0
31/07/2009
Rodrigo Mourão
O sistema tira-dúvidas se propoes a auxiliar os usuarios a resolver os seus problemas atraves dos post. Bem foi o que eu fiz, postei uma rotina para clonar o código.
A rotina funciona, o erro que ocorre é algum problema em sua aplicacao por isso eu pedi para vc postar seus fontes, mesmo a o suporte não abrangendo a analise do codigo.
Para eu analizar o código preciso montar seu ambiente, que inclui instalar seu banco e todos essas dezenas de componentes que vc usa. Ai aparecem os problema que é erro em componentes do D2009, etc.
Por este motivo vou criar um aplicacao com um tabela apenas, mostrando para vc a rotina funcionando e ai vc adapata ao seu sistema. Isso será mais rápido.
A aplicacao utiliza Access e ADO.
Em 1h eu ja espero ter algo pronto aqui e estarei postando aqui !!!
Abs!!
Gostei + 0
31/07/2009
Irenildo Carvalho
Gostei + 0
02/08/2009
Rodrigo Mourão
var
i,J: Integer;
begin
for I := 1 to StrToInt(LabeledEdit2.Text) do
begin
AdoInsert.Append;
for J := 0 to ADODataSet1.FieldCount-1 do
begin
case J of
0: continue;//pula o primeiro campo pois e auto incremento;
1: begin
AdoInsert.Fields[J].AsInteger := ADODataSet1.Fields[J].AsInteger+I; //Incremento do Tombamento
end
else
AdoInsert.Fields[J].Value := ADODataSet1.Fields[J].Value; //Demais campos
end;
end;
AdoInsert.Post;
end;
end;
Eu tenho 2 AdoDataSet, um apra pegar o patrimonio e um para inserir as copias. Abaixo segue o link do exemplo feito em delphi e usando seu proprio banco de dados:
http://video.devmedia.com.br/RodrigoCarreiro/Consultoria/Patrimonio.rar
P.S.: Quando disse analise de codigo estava me referindo a analise dos fontes.
Abs!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)