Ajuda com tabela - Copiar registro de tabela
Bom dia.
Estou criando um App, onde preciso copiar a primeira linha da tabela [n] vezes, os campos serão preenchidos pelo usuário, e depois ele deve clicar no botão [GERAR], e informar quantas linhas deverão ser geradas, o sistema tem que replicar a primeira linha [n] vezes com um [ID - paletes], em acréscimo, e na linha final dar a diferença de cestas por palete.
Estou usando o Delphi 10.3
O Botão [GERAR], ficou assim:
procedure TForm1.Button1Click(Sender: TObject);
var
i,J: Integer;
begin
for I := 2 to StrToInt(Edit1.Text) do
begin
ADOTable1.Append;
for J := 1 to ADOTable1.FieldCount-1 do
begin
case J of
0: continue;//pula o primeiro campo pois e auto incremento;
1: begin
ADOTable1.Fields[J].AsInteger := ADOTable1.Fields[J].AsInteger+I;//Incremento do Tombamento
end
else
ADOTable1.Fields[J].Value := ADOTable1.Fields[J].Value; //Demais campos
ADOTable1.Fields[J].Value := ADOTable1.Fields[J].Value;
end;
end;
ADOTable1.Post;
end;
end;
Mas quando o botão é pressionado ele gera [n] linhas com os números dos paletes em acréscimo mas os outros campos ficam em branco.
Podem me ajudar?
[img]https://i.servimg.com/u/f33/19/92/85/47/scree158.png[/img][/url]
Estou criando um App, onde preciso copiar a primeira linha da tabela [n] vezes, os campos serão preenchidos pelo usuário, e depois ele deve clicar no botão [GERAR], e informar quantas linhas deverão ser geradas, o sistema tem que replicar a primeira linha [n] vezes com um [ID - paletes], em acréscimo, e na linha final dar a diferença de cestas por palete.
Estou usando o Delphi 10.3
O Botão [GERAR], ficou assim:
procedure TForm1.Button1Click(Sender: TObject);
var
i,J: Integer;
begin
for I := 2 to StrToInt(Edit1.Text) do
begin
ADOTable1.Append;
for J := 1 to ADOTable1.FieldCount-1 do
begin
case J of
0: continue;//pula o primeiro campo pois e auto incremento;
1: begin
ADOTable1.Fields[J].AsInteger := ADOTable1.Fields[J].AsInteger+I;//Incremento do Tombamento
end
else
ADOTable1.Fields[J].Value := ADOTable1.Fields[J].Value; //Demais campos
ADOTable1.Fields[J].Value := ADOTable1.Fields[J].Value;
end;
end;
ADOTable1.Post;
end;
end;
Mas quando o botão é pressionado ele gera [n] linhas com os números dos paletes em acréscimo mas os outros campos ficam em branco.
Podem me ajudar?
[img]https://i.servimg.com/u/f33/19/92/85/47/scree158.png[/img][/url]
Huemersonfmg
Curtidas 0
Melhor post
Emerson Nascimento
05/05/2021
uma vez que o método Append é executado, um registro em branco é criado.
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
procedure TForm1.Button1Click(Sender: TObject); var i,J,iTot: Integer; registro: array of variant; begin iTot := StrToIntDef(Edit1.Text,1); // configura o tamanho do array com o número de campos da tabela SetLength(registro, ADOTable1.FieldCount); // grava o conteúdo do registro posicionado, de onde serão feitas as cópias for J := 0 to ADOTable1.FieldCount-1 do registro[J] := ADOTable1.Fields[J].Value; for I := 2 to iTot do begin ADOTable1.Append; // cria um registro em branco for J := 1 to High(registro) do // recupera os valores do array 'registro' if (J = 1) then ADOTable1.Fields[J].AsInteger := registro[J]+I;//Incremento do Tombamento else ADOTable1.Fields[J].Value := registro[J];//Demais campos ADOTable1.Post; end; end;
GOSTEI 1
Mais Respostas
Huemersonfmg
05/05/2021
uma vez que o método Append é executado, um registro em branco é criado.
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
procedure TForm1.Button1Click(Sender: TObject); var i,J,iTot: Integer; registro: array of variant; begin iTot := StrToIntDef(Edit1.Text,1); // configura o tamanho do array com o número de campos da tabela SetLength(registro, ADOTable1.FieldCount); // grava o conteúdo do registro posicionado, de onde serão feitas as cópias for J := 0 to ADOTable1.FieldCount-1 do registro[J] := ADOTable1.Fields[J].Value; for I := 2 to iTot do begin ADOTable1.Append; // cria um registro em branco for J := 1 to High(registro) do // recupera os valores do array 'registro' if (J = 1) then ADOTable1.Fields[J].AsInteger := registro[J]+I;//Incremento do Tombamento else ADOTable1.Fields[J].Value := registro[J];//Demais campos ADOTable1.Post; end; end;
GOSTEI 0
Huemersonfmg
05/05/2021
uma vez que o método Append é executado, um registro em branco é criado.
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
Boa noite, obrigado por retornar tão rápido.
Eu apliquei o código e estou tendo um erro, não consegui analisar...
[img]https://i33.servimg.com/u/f33/19/92/85/47/scree159.png[/img][/url]
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
procedure TForm1.Button1Click(Sender: TObject); var i,J,iTot: Integer; registro: array of variant; begin iTot := StrToIntDef(Edit1.Text,1); // configura o tamanho do array com o número de campos da tabela SetLength(registro, ADOTable1.FieldCount); // grava o conteúdo do registro posicionado, de onde serão feitas as cópias for J := 0 to ADOTable1.FieldCount-1 do registro[J] := ADOTable1.Fields[J].Value; for I := 2 to iTot do begin ADOTable1.Append; // cria um registro em branco for J := 1 to High(registro) do // recupera os valores do array 'registro' if (J = 1) then ADOTable1.Fields[J].AsInteger := registro[J]+I;//Incremento do Tombamento else ADOTable1.Fields[J].Value := registro[J];//Demais campos ADOTable1.Post; end; end;
Eu apliquei o código e estou tendo um erro, não consegui analisar...
[img]https://i33.servimg.com/u/f33/19/92/85/47/scree159.png[/img][/url]
GOSTEI 0
Huemersonfmg
05/05/2021
uma vez que o método Append é executado, um registro em branco é criado.
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
Boa noite, obrigado por retornar tão rápido.
Eu apliquei o código e estou tendo um erro, não consegui analisar...
[img]https://i33.servimg.com/u/f33/19/92/85/47/scree159.png[/img][/url]
dessa forma você está copiando o registro em branco para ele mesmo.
você precisa guardar o conteúdo do registro ANTES de executar o Append.
algo assim:
procedure TForm1.Button1Click(Sender: TObject); var i,J,iTot: Integer; registro: array of variant; begin iTot := StrToIntDef(Edit1.Text,1); // configura o tamanho do array com o número de campos da tabela SetLength(registro, ADOTable1.FieldCount); // grava o conteúdo do registro posicionado, de onde serão feitas as cópias for J := 0 to ADOTable1.FieldCount-1 do registro[J] := ADOTable1.Fields[J].Value; for I := 2 to iTot do begin ADOTable1.Append; // cria um registro em branco for J := 1 to High(registro) do // recupera os valores do array 'registro' if (J = 1) then ADOTable1.Fields[J].AsInteger := registro[J]+I;//Incremento do Tombamento else ADOTable1.Fields[J].Value := registro[J];//Demais campos ADOTable1.Post; end; end;
Eu apliquei o código e estou tendo um erro, não consegui analisar...
[img]https://i33.servimg.com/u/f33/19/92/85/47/scree159.png[/img][/url]
Opa consegui resolver o problema, era o [;] antes do [Else] parece que o Delphi não aceita.
Mas agora vi um que não conseguir entender, a segunda coluna está ficando em branco...
[img]https://i33.servimg.com/u/f33/19/92/85/47/scree160.png[/img][/url]
GOSTEI 0
Emerson Nascimento
05/05/2021
tente assim:
se ainda assim não funcionar, basta debugar que você vai encontrar a solução.
procedure TForm1.Button1Click(Sender: TObject); var i,J,iTot,iTomb,iAuto: Integer; registro: array of variant; begin iTot := StrToIntDef(Edit1.Text,1); // configura o tamanho do array com o número de campos da tabela SetLength(registro, ADOTable1.FieldCount); // grava o conteúdo do registro posicionado, de onde serão feitas as cópias for J := 0 to ADOTable1.FieldCount-1 do begin registro[J] := ADOTable1.Fields[J].Value; if Trim(AnsiUpperCase(ADOTable1.Fields[J].FieldName)) = 'CAMPO_TOMBAMENTO' then iTomb := J; if Trim(AnsiUpperCase(ADOTable1.Fields[J].FieldName)) = 'CAMPO_AUTOINCREMENTO' then iAuto := J; end; for I := 2 to iTot do begin ADOTable1.Append; // cria um registro em branco for J := 0 to High(registro) do if J <> iAuto then // campo autoincrmento não será manipulado begin // recupera os valores do array 'registro' if (J = iTomb) then ADOTable1.Fields[J].AsInteger := registro[J]+I //Incremento do Tombamento else ADOTable1.Fields[J].Value := registro[J];//Demais campos end; ADOTable1.Post; end; end;
GOSTEI 1
Huemersonfmg
05/05/2021
Bom dia.
Muito obrigado por seu retorno.
O código ficou perfeito, atendendo exatamente a minha necessidade, agora preciso fazer alguns ajustes para finalizar.
Muito obrigado por seu retorno.
O código ficou perfeito, atendendo exatamente a minha necessidade, agora preciso fazer alguns ajustes para finalizar.
GOSTEI 0