só edita o primeiro registro
Pessoal esse procedire abaixo está com um problema...
ele só edita o primeiro registro da tabela em questão, se alguem conseguir me ajudar por favor postaem aqui....
estarei informando o trecho do código que ocorre o problema
ele só edita o primeiro registro da tabela em questão, se alguem conseguir me ajudar por favor postaem aqui....
estarei informando o trecho do código que ocorre o problema
procedure TMateriais.Btn_SalvarClick(Sender: TObject);
begin
if Materiais.Edit_Nome.Text = ´´ then
ShowMessage(´Campo "Nome" está vazio, por favor verifique´)
else
begin
DM.qry_Materiais.insert;
DM.qry_Materiais.FieldByName(´Codigo´).AsInteger := StrToInt(Edit_Codigo.Text);
DM.qry_Materiais.FieldByName(´Nome´).AsString := Edit_Nome.text;
DM.qry_Materiais.FieldByName(´Referencia´).AsString:= Edit_codigoR.text;
DM.qry_Materiais.FieldByName(´Tipo´).AsString := Combo_Tipo.text;
DM.qry_Materiais.FieldByName(´Quantidade´).AsString:= Edit_Qtdade.text;
DM.qry_Materiais.FieldByName(´Autor´).AsString := Combo_autor.text;
DM.qry_Materiais.FieldByName(´Editora´).AsString := Combo_Editora.text;
DM.qry_Materiais.FieldByName(´Sinopse´).AsString := Memo_Sinopse.Lines.Text;
DM.qry_Materiais.FieldByName(´Area´).AsString := Combo_Area.text;
DM.qry_Materiais.FieldByName(´Exemplar´).AsString := Edit_Exemplar.text;
DM.qry_Materiais.FieldByName(´Volume´).AsString := Edit_Volume.text;
DM.qry_Materiais.FieldByName(´Local´).AsString := Edit_LocalEdicao.text;
DM.qry_Materiais.FieldByName(´Ano_Edicao´).AsString:= Edit_AnoEdicao.text;
DM.qry_Materiais.FieldByName(´Edicao´).AsString := Edit_Edicao.text;
DM.qry_Materiais.Post;
DM.qry_Materiais.ApplyUpdates;
{************SÓ TA EDITANDO A PRIMEIRA LINHA DA TABELA************}
// edita a quantidade de materiais cadastrados dentro de uma area, na tabela areas
DM.qry_ArNovo.Close;
DM.qry_ArNovo.SelectSQL.Clear;
DM.qry_ArNovo.SelectSQL.add(´select * from AREA where NOME Like:Consulta ´);
DM.qry_ArNovo.Params[0].AsString;
DM.qry_ArNovo.ParamByName(´Consulta´).AsString:=´´+´¬´+combo_area.Text+´¬´;
Dm.qry_ArNovo.open;
DM.Qry_ArNovo.Edit;
DM.Qry_ArNovoUCOD.AsInteger := StrToint(RetornaDecimal(Edit_CodigoR.Text));
DM.Qry_ArNovo.Post;
DM.Qry_ArNovo.ApplyUpdates;
{**********************************************************************}
end;
end;
Mahdak
Curtidas 0
Respostas
Rjun
23/09/2005
Do jeito que está, é só para editar a primeira linha mesmo. O que você está querendo fazer?
GOSTEI 0
Emilio
23/09/2005
Juliano;
Vc temque percorrer a tabela. vc pode fazer usando o seguinte codigo:
while not nomeTabela.eof do //enquanto a tabela não chegar ao ultimo registro
begin
//aqui vc edita os valores
nomeTabela.next; //proximo registro
end;
Espero ter ajudado
Emílio
Vc temque percorrer a tabela. vc pode fazer usando o seguinte codigo:
while not nomeTabela.eof do //enquanto a tabela não chegar ao ultimo registro
begin
//aqui vc edita os valores
nomeTabela.next; //proximo registro
end;
Espero ter ajudado
Emílio
GOSTEI 0
Mahdak
23/09/2005
Juliano;
Vc temque percorrer a tabela. vc pode fazer usando o seguinte codigo:
while not nomeTabela.eof do //enquanto a tabela não chegar ao ultimo registro
begin
//aqui vc edita os valores
nomeTabela.next; //proximo registro
end;
Espero ter ajudado
Emílio
Emilio o trecho com problema é esse:
{************SÓ TA EDITANDO A PRIMEIRA LINHA DA TABELA************}
// edita a quantidade de materiais cadastrados dentro de uma area, na tabela areas
DM.qry_ArNovo.Close;
DM.qry_ArNovo.SelectSQL.Clear;
DM.qry_ArNovo.SelectSQL.add(´select * from AREA where NOME Like:Consulta ´);
DM.qry_ArNovo.Params[0].AsString;
DM.qry_ArNovo.ParamByName(´Consulta´).AsString:=´´+´¬´+combo_area.Text+´¬´;
Dm.qry_ArNovo.open;
DM.Qry_ArNovo.Edit;
DM.Qry_ArNovoUCOD.AsInteger := StrToint(RetornaDecimal(Edit_CodigoR.Text));
DM.Qry_ArNovo.Post;
DM.Qry_ArNovo.ApplyUpdates;
{**********************************************************************}
1. no select acima eu pesso que ele posicione no registro da tabela que tenha o mesmo nome que ´Combo_Area.text´.
2. coloco em seguida a tabela em modo de edição em tal registro e edito ela...
essa seria a minha lógica... mas acho que está errada neh?
então voce me sugere que eu fassa assim: ??
while not DM.Qry_ArNovo.eof do begin DM.Qry_ArNovo.Edit; DM.Qry_ArNovoUCOD.AsInteger := StrToint(RetornaDecimal(Edit_CodigoR.Text)); DM.Qry_ArNovo.Post; DM.Qry_ArNovo.ApplyUpdates; DM.Qry_ArNovo.next; //proximo registro
mas esse código nao editaria registro por registro???
eu gostaria de editar apenas o registro da tabela que tenha o mesmo nome que ´Combo_Area.text´.
Abraços!
GOSTEI 0
Rjun
23/09/2005
Note que a query vai conter o resultado da instrução SELECT que você utilizou.
GOSTEI 0
Emilio
23/09/2005
é como o Rjun falou....
GOSTEI 0
Mahdak
23/09/2005
Note que a query vai conter o resultado da instrução SELECT que você utilizou.
Isso mesmo Rogério, era ai que eu queria chegar... entao a minha query teria que conter o regitro que eu escolhece no ComboBox, porem nao é isso que está acontecendo, por que ela simplesmente nao edita outro registro a nao ser o primeiro registro da tabela...
alguma possivel solução?
[]´s
GOSTEI 0
Rjun
23/09/2005
Sua cláusula SQL irá selecionar todos os registros em que Area for igual ao resultado do combobox. O loop será feito nesses registros e não nos registros da tabela. Do jeito que você fez ele só faz a alteração no primeiro registro.
GOSTEI 0
Mahdak
23/09/2005
Sua cláusula SQL irá selecionar todos os registros em que Area for igual ao resultado do combobox. O loop será feito nesses registros e não nos registros da tabela. Do jeito que você fez ele só faz a alteração no primeiro registro.
voce poderia me dar um exemplo de como ajeitar isso entao, por que eu achava que:
´select * from AREA where NOME Like:Consulta ´
Consulta = Combobox.text
queria dizer: selecione todos os campos da tabela area quando o campo NOME, for igual a string contida no ComboBox....
fiquei meio perdidão agora....
[]´s
GOSTEI 0
Rjun
23/09/2005
Mas foi isso que eu disse. So que você esta alterando apenas um registro. Para você alterar todos os registros que você selecionou, você precisar fazer o que o [b:fed4a1bb3d]emilio[/b:fed4a1bb3d] disse. Faça um loop com o while.
GOSTEI 0
Martins
23/09/2005
Mas foi isso que eu disse. So que você esta alterando apenas um registro. Para você alterar todos os registros que você selecionou, você precisar fazer o que o emilio disse. Faça um loop com o while.
isso mesmo, vc vai digamos filtrar os registros q satisfaçam a condição desejada e depois basta fazer um loop, então vc vai editar todos os registro.
GOSTEI 0
Mahdak
23/09/2005
[quote:6b145152b6]Mas foi isso que eu disse. So que você esta alterando apenas um registro. Para você alterar todos os registros que você selecionou, você precisar fazer o que o emilio disse. Faça um loop com o while.
isso mesmo, vc vai digamos filtrar os registros q satisfaçam a condição desejada e depois basta fazer um loop, então vc vai editar todos os registro.[/quote:6b145152b6]
Martins, nao sei se estou me expresando mal, ou se estou viajando na maionese mesmo...
eu nao to querendo editar todos os registros da tabela, mas sim aquele registro da tabela ´area´ onde o ´Nome´ seja igual a string contida no ComboBox...
´select * from AREA where NOME Like:Consulta ´ Consulta := Combobox.text;
Por desencargo de consciencia tentei o sugerio pelos amigos de fazer um loop, e tambem nao deu certo... ele nao edita o registro escolhido no Combobox, mas sim somente o primeiro registro da tabela. Vou postar aqui como fiz o loop....
// edita a quantidade de materiais cadastrados dentro de uma area, na tabela areas DM.qry_ArNovo.Close; DM.qry_ArNovo.SelectSQL.Clear; DM.qry_ArNovo.SelectSQL.add(´select * from AREA where NOME Like:Consulta ´); DM.qry_ArNovo.Params[0].AsString; DM.qry_ArNovo.ParamByName(´Consulta´).AsString:=´´+´¬´+combo_area.Text+´¬´; Dm.qry_ArNovo.open; while not DM.Qry_ArNovo.eof do begin DM.Qry_ArNovo.Edit; DM.Qry_ArNovoUCOD.AsInteger := StrToint(RetornaDecimal(Edit_CodigoR.Text)); DM.Qry_ArNovo.Post; DM.Qry_ArNovo.ApplyUpdates; DM.Qry_ArNovo.next; end;
entao?
GOSTEI 0
Rjun
23/09/2005
Altere a linha onde você passa o parâmetro. Deixe-a assim:
DM.qry_ArNovo.ParamByName(´Consulta´).AsString := QuotedStr(´¬´+combo_area.Text+´¬´);
GOSTEI 0
Martins
23/09/2005
Altere a linha onde você passa o parâmetro. Deixe-a assim:
DM.qry_ArNovo.ParamByName(´Consulta´).AsString := QuotedStr(´¬´+combo_area.Text+´¬´);
Se ainda não funcionar, faz o seguinte, vc manda o banco de dados e nós montamos um exemplo funcional, aí vc só faz as adaptações, pq tá suado esse negócio.
:wink:
GOSTEI 0
Mahdak
23/09/2005
Seguinte amigos, consegui fazer ele percorrer a tabela, achar o registro que quero e tal...
Coloco a tabela em modo de edição, o sistema passa por todas as linhas até editar a tabela e cadastrar o material... PORÉMMMM, nao está acontecendo a ediçãon do material agora. ja troquei os componentes, ja refiz os códigos dos componentes, emfim, aquele problema de achar o registro ja passou, agora nao to conseguindo editar...
A ideia é a seguinte: O usuario aperta no botao ´novo´, que vai gerar um código de referencia pro material (que está linkado com a tabela areas e a tabela livros) e depois de cadastrar o material ele clica no botao salvar... vou postar o procedure dos dois botoes aqui pra voces darem uma analizada. Se precisarem do banco de dados e da UNIT em questao disponibilizo sim... jpxst@hotmail.com;´msn´...
Esse procedure está ok, o problema vem no começo do código do procedure seguinte(nao está editando de fato na tabela):
Coloco a tabela em modo de edição, o sistema passa por todas as linhas até editar a tabela e cadastrar o material... PORÉMMMM, nao está acontecendo a ediçãon do material agora. ja troquei os componentes, ja refiz os códigos dos componentes, emfim, aquele problema de achar o registro ja passou, agora nao to conseguindo editar...
A ideia é a seguinte: O usuario aperta no botao ´novo´, que vai gerar um código de referencia pro material (que está linkado com a tabela areas e a tabela livros) e depois de cadastrar o material ele clica no botao salvar... vou postar o procedure dos dois botoes aqui pra voces darem uma analizada. Se precisarem do banco de dados e da UNIT em questao disponibilizo sim... jpxst@hotmail.com;´msn´...
procedure TMateriais.Btn_NovoClick(Sender: TObject); var Cod1,cod2,cod3 : integer; begin if combo_area.Text = ´´ then begin ShowMessage(´O campo "Área" está vazio, por favor escolha uma Área.´); end else begin // Gera o Código do material DM.qry_MatCod.Open; DM.qry_MatCod.SelectSQL.Clear; DM.qry_MatCod.SelectSQL.add(´SELECT (MAX(CODIGO) + 1 ) PROX FROM LIVROS´); dm.qry_MatCod.open; cod1 := dm.qry_MatCod.Fields[0].AsInteger; if cod1 = null then begin cod1:=0; end else cod1:=cod1; Edit_Codigo.Text := FloatToStr(cod1); // esse select seleciona o numero que vai antes o ponto (o código da area escolhida) DM.qry_ArNovo.Close; DM.qry_ArNovo.SelectSQL.Clear; DM.qry_ArNovo.SelectSQL.add(´select * from AREA where NOME Like:Consulta ´); DM.qry_ArNovo.Params[0].AsString; DM.qry_ArNovo.ParamByName(´Consulta´).AsString:=´¬´+combo_area.Text+´¬´; Dm.qry_ArNovo.open; cod2 := DM.Qry_ArNovoCODIGO.AsInteger; Cod3 := DM.Qry_ArNovoUCOD.AsInteger + 1; if cod3 = null then begin cod3:=0; end else cod3:=cod3; edit_CodigoR.Text := IntToStr(Cod2) + ´.´ + IntToStr(cod3); end; end;
Esse procedure está ok, o problema vem no começo do código do procedure seguinte(nao está editando de fato na tabela):
procedure TMateriais.Btn_SalvarClick(Sender: TObject);
Var
Cod: Integer;
Nome: String;
begin
{*********o problema está aqui*****}
while not DM.Qry_ArNovo.eof do
begin
Cod := DM.Qry_ArNovoCODIGO.AsInteger;
Nome := DM.Qry_ArNovoNOME.AsString;
DM.Qry_ArNovo.Edit;
DM.Qry_ArNovoCODIGO.AsInteger := Cod;
DM.Qry_ArNovoNOME.AsString := Nome;
DM.Qry_ArNovoUCOD.AsInteger := StrToint(RetornaDecimal(Edit_CodigoR.Text));
DM.Qry_ArNovo.Post;
DM.Qry_ArNovo.ApplyUpdates;
DM.Qry_ArNovo.next;
end;
{****************Fim do pobrema**************************}
// aqui ta tudo tranquilo
if Materiais.Edit_Nome.Text = ´´ then
ShowMessage(´Campo "Nome" está vazio, por favor verifique´)
else
begin
DM.qry_Materiais.insert;
DM.qry_Materiais.FieldByName(´Codigo´).AsInteger := StrToInt(Edit_Codigo.Text);
DM.qry_Materiais.FieldByName(´Nome´).AsString := Edit_Nome.text;
DM.qry_Materiais.FieldByName(´Referencia´).AsString:= Edit_codigoR.text;
DM.qry_Materiais.FieldByName(´Tipo´).AsString := Combo_Tipo.text;
DM.qry_Materiais.FieldByName(´Quantidade´).AsString:= Edit_Qtdade.text;
DM.qry_Materiais.FieldByName(´Autor´).AsString := Combo_autor.text;
DM.qry_Materiais.FieldByName(´Editora´).AsString := Combo_Editora.text;
DM.qry_Materiais.FieldByName(´Sinopse´).AsString := Memo_Sinopse.Lines.Text;
DM.qry_Materiais.FieldByName(´Area´).AsString := Combo_Area.text;
DM.qry_Materiais.FieldByName(´Exemplar´).AsString := Edit_Exemplar.text;
DM.qry_Materiais.FieldByName(´Volume´).AsString := Edit_Volume.text;
DM.qry_Materiais.FieldByName(´Local´).AsString := Edit_LocalEdicao.text;
DM.qry_Materiais.FieldByName(´Ano_Edicao´).AsString:= Edit_AnoEdicao.text;
DM.qry_Materiais.FieldByName(´Edicao´).AsString := Edit_Edicao.text;
DM.qry_Materiais.Post;
DM.qry_Materiais.ApplyUpdates;
ShowMessage(´Material Cadastrado Com Sucesso.´);
end;
end;
GOSTEI 0