Copiar o registro anterior e usar parte dele

Delphi

04/05/2007

Estou usando o MySQL e o Delphi 7.
Preciso copiar parte de um registro da tabela e colocar no próximo registro. Ex: Minha tabela tem 5 campos diferentes e preciso copiar 2 campos do registro atual e usar para o próximo registro, mas não me interessa copiar esses campos para sempre.
Ouvi falar de um comando chamado Carry ou Set Carry do SQL, mas não sei usar isso.
Alguém pode me ajudar?


Mcsmarmcs

Mcsmarmcs

Curtidas 0

Respostas

Mcsmarmcs

Mcsmarmcs

04/05/2007

Só pra complementar: eu gostaria que no próximo registro os dados aparececem em campos edit.


GOSTEI 0
Adriano Santos

Adriano Santos

04/05/2007

Cara não tem muito segredo, eu acho. Não sei se entendi direito.
Eu criaria variáveis pra armazenar temporariamente os valores dos campos que precisa e daria um next na tabela. Depois do next você edita o registro e passa para os campos os valores armazenados nas variáveis. Assim:

procedure TForm1.Button1Click(Sender: TObject);
var
  Nome: string;
  Endereco: string;
begin
  Nome := ClientDataSet1.FieldByName(´NOME´).Asstring;
  Endereco := ClientDataSet1.FieldByName(´ENDERECO´).Asstring;
  ClientDataSet1.Next;
  ClientDataSet1.Edit;
  ClientDataSet1.FieldByName(´NOME´).Asstring := Nome;
  ClientDataSet1.FieldByName(´ENDERECO´).Asstring := Endereco;
  ClientDataSet1.Post;
  ClientDataSet1.ApplyUpdates(0);
  Edit1.Text := Nome;
  Edit2.Text := Endreco;
end;



GOSTEI 0
Mcsmarmcs

Mcsmarmcs

04/05/2007

Na verdade, foi ainda mais simples, com o código abaixo consegui resolver. A diferença é que estou usando componentes ADO e você deve estar usando dbExpress.

var
data: string;
begin
data := QRYfuturo.FieldByName(´data´).Asstring;
QRYfuturo.Next;
QRYfuturo.Insert;
QRYfuturo.FieldByName(´data´).Asstring := data;
end;

Mas ainda não acabou, tem um campo que precisa se repetir, mas ele está em um local qualquer da tabela.
Ex: Ao entrar com o conteúdo do campo, seria necessário trazer algumas informações referentes a este campo.
Devo usar alguma consulta?


GOSTEI 0
Paullsoftware

Paullsoftware

04/05/2007

e que tipo de campo seria esse?


GOSTEI 0
Adriano Santos

Adriano Santos

04/05/2007

Na verdade, foi ainda mais simples, com o código abaixo consegui resolver. A diferença é que estou usando componentes ADO e você deve estar usando dbExpress.

É isso ai, uso DBX, mas o princípio é o mesmo.


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

04/05/2007

É um campo chamado nome e é do tipo string.
Ao criar um novo registro, eu digito algo neste campo nome e deve haver uma consulta pra verificar se o conteúdo deste campo já existe.
Se o que digitei já existir, pego o conteúdo do campo data do registro antigo e replico no campo data do registro atual.


GOSTEI 0
Paullsoftware

Paullsoftware

04/05/2007

Esse nome seria o nome de um pessoa, tipo cliente??

se for, não acha meio impróprio essa técnica? uma vez que exitam umas 30 [b:ababbc3ee7]Maria José da Silva[/b:ababbc3ee7] como faria pra saber qual é? não sei se essa seria a melhor solução para o seu problema, ainda não entendi exatamente o que você quer fazer realmente... :roll:


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

04/05/2007

Vai haver nomes repetidos mas só do mesmo cliente, o que vai diferenciar é um campo data, mas eu gostaria de pegar a última vez que cada cliente estava presente.


GOSTEI 0
Paullsoftware

Paullsoftware

04/05/2007

você pode fazer uma pesquisa auxiliar no evento OnExit do DbEdit correspondente, para usar o conteudo digitado em uma pesquisa na tabela, claro que tb deve ser usado uma query auxiliar para isso...
é só uma ideia...:wink:


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

04/05/2007

Você poderia me dar um exemplo?


GOSTEI 0
Adriano Santos

Adriano Santos

04/05/2007

Você poderia me dar um exemplo?


procedure TForm1.DBEditPesquisaExit...;
begin
  with QueryAuxiliar do
  begin
    Close;
    Sql.Clear;
    Sql.Add(´SELECT * FROM TABELA WHERE CAMPO= :PESQUISA´);
    ParamByName(´PESQUISA´).AsString := DbEditPesquisa.Text;

    Open;
    if not IsEmpty then
      //Faz alguma coisa.
    Close;
  end;
end;



GOSTEI 0
Paullsoftware

Paullsoftware

04/05/2007

[quote:f4d1632d9d=´Adriano Santos´]
Você poderia me dar um exemplo?


procedure TForm1.DBEditPesquisaExit...;
begin
  with QueryAuxiliar do
  begin
    Close;
    Sql.Clear;
    Sql.Add(´SELECT * FROM TABELA WHERE CAMPO= :PESQUISA´);
    ParamByName(´PESQUISA´).AsString := DbEditPesquisa.Text;

    Open;
    if not IsEmpty then
      //Faz alguma coisa.
    Close;
  end;
end;
[/quote:f4d1632d9d]
Valeu [b:f4d1632d9d]x-man[/b:f4d1632d9d] pela força!!! :wink:


GOSTEI 0
POSTAR