Copiar o registro anterior e usar parte dele
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?
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
Curtidas 0
Respostas
Mcsmarmcs
04/05/2007
Só pra complementar: eu gostaria que no próximo registro os dados aparececem em campos edit.
GOSTEI 0
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:
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
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?
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
04/05/2007
e que tipo de campo seria esse?
GOSTEI 0
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
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.
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
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:
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
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
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:
é só uma ideia...:wink:
GOSTEI 0
Mcsmarmcs
04/05/2007
Você poderia me dar um exemplo?
GOSTEI 0
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
04/05/2007
[quote:f4d1632d9d=´Adriano Santos´]
[/quote:f4d1632d9d]
Valeu [b:f4d1632d9d]x-man[/b:f4d1632d9d] pela força!!! :wink:
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;
Valeu [b:f4d1632d9d]x-man[/b:f4d1632d9d] pela força!!! :wink:
GOSTEI 0