Ir para conteúdo
Fórum Script Brasil
  • 0

Atribuir Valor Aos Dados Pesquisados


Guest - João Paulo -

Pergunta

Guest - João Paulo -

Ai alguém sabe se tem como eu fazer um pesquisa e por um botão do lado que se apertado ele atribui esse valor a todos os itens da pesquisa? tipo pago ou não porque tipo que vou fazer uma pesquisa da data 10/04/2006 ate 10/05/2006, so que tem gente que manda trem atrasado ai tipo que depois quando eu fizer a pesquisa 10/04/2006 ate 10/05/2006 os que já foram pagos não vai aparecer entenderam? acho que na parte do sql eu sei fazer beleza mas não sei atribuir esses valor na variavel do meu banco... conto com vocês para essa ajuda

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

Se entendi direito seria o seguinte:

Se sua query (dataset) permitir alteração (tipo propriedade RequestLive = true), basta que você, após pressionar o tal botão, percorra todos os registros da query (tipo while not query.EOF do) e, dentro deste loop, coloque a query em modo de edição (edit), altere o campo pago de acordo com sua necessidade e grave (post).

Se não for possivel utilizar a query para a alteração, então inclua no seu select os campos que são a chave primária na tabela de origem da query e utilize-os para posicionar num table (TTable p.e., que você deverá adicionar em seu form e configurar adequadamente). Assim, no loop mensionado anteriormente, para cada item da query você não irá mais tentar editar a query, mas sim posicionar a tabela, colocando ela em modo edição, alterando o campo desejado e gravando as informações, em seguida passa a próxima linha da query e assim sucessivamente.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Eu entendi o que você falou mas não sei como fazer o codigo poderia me ajudar dando um exemplo??? pode ser de qualquer modo, pois so quero por pago nos campos que foram pesquisado e consequentimente apareceram no dbgrid!!

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, não sei que banco você utiliza, nem os componentes de acesso, assim vou supor que você esteja utilizando tabelas Paradox, um componente TQuery (Query1 com RequestLive = true) ligado ao seu TDBGrid (TDBGrid1) e que estejam filtrados apenas os registros no período que você mencionou(abaixo).

quando eu fizer a pesquisa 10/04/2006 ate 10/05/2006 os que já foram pagos não vai aparecer entenderam?
Então, no evento OnClick do botão adicione o seguinte código:
procedure TForm1.ButtonClick(Sender :TObject);
begin
  Query1.DisableControls;  // evita que o seu dbgrid mostre a movimentação do cursor na tabela  
  Query1.First;
  while Query1.EOF do
  begin
    Query1SITUACAO.Value := 1;  // supondo que o nome do campo seja SITUACACAO e 1=Pago
    Query1.Next;
  end;
  Query1.First;
  Query1.EnableControls;
end

Veja se é isto que você queria.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - João Paulo -

Query1.DisableControls; // evita que o seu dbgrid mostre a movimentação do cursor na tabela

Query1.First;

while Query1.EOF do

begin

Query1Pagamento.Value := 'PAGO'; // supondo que o nome do campo seja SITUACACAO e 1=Pago

Query1.Next;

end;

Query1.First;

Query1.EnableControls;

Micheus puz assim so que não deu ele não atribui o pago para o pagamento, ah eu puz pago porque se eu por um fala que é string e não int, vo explicar aqui como esta meu programa, é o seguinte eu armazeno em uma tabela paradox com um table1 so que o table esta no form1, nesse form3 que é onde eu faço a pesquisa para o relatorio to usando o query1 para pesquisar e mandar para o dbgrid, ai eu coloquei um botão aqui chamado pagar e queria que quando apertace ele ele alterace os registros na tabela pondo pago nos que foram pesquisados... entendeu?

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe minha falha. Eu deveria ter posto em modo edição e depois postar a alteração:

procedure TForm1.ButtonClick(Sender :TObject);
begin
  Query1.DisableControls;  // evita que o seu dbgrid mostre a movimentação do cursor na tabela  
  Query1.First;
  while Query1.EOF do
  begin
    Query1.Edit;
    Query1SITUACAO.Value := 1;  // supondo que o nome do campo seja SITUACACAO e 1=Pago
    Query1.Post;
    Query1.Next;
  end;
  Query1.First;
  Query1.EnableControls;
end

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - João Paulo -

Micheus tentei so que parece, que não está entrando no while por fiz o teste e num funcionou, outra coisa eu posso substituir o 1 por PAGO? e tambem quando eu tirei o while travo fanlando query1: cannot modifiy a realy-only dataset, preciso d+ disso, e obrigado por estar ajudando

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - João Paulo -

micheus tava relendo tudo de novo e na 1 vez que você respondeu, você falou qua talvez não desse para fazer alterações no registro usando query, acho que deve ser isso então mas como eu faria do outro modo que você frisou na sua resposta? e se eu estiver enganado desculpe, mas pensei que podia ser isso, se puder ajudar

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Pedro -

É realmente do jeito que ele falo eu também não consegui, vo tentar fazer do outro jeito ou senão usar no SQL o update, mas sera que da certo, vo ver se eu acho algo falando porque está dificil

Link para o comentário
Compartilhar em outros sites

  • 0
outra coisa eu posso substituir o 1 por PAGO?
Como eu coloquei no comentário (supondo que o nome do campo seja SITUACACAO e 1=Pago) eu não tenho idéia da estrutura da tabela em questão. Então se você utiliza este campo como um alfa-numérico e o conteúdo deve ser o texto 'PAGO', então substitua.

travo fanlando query1: cannot modifiy a realy-only dataset
acho que deve ser isso então mas como eu faria do outro modo que você frisou na sua resposta?
Realmente este é o motivo da mensagem. Veja bem, se você estiver utilizando tabelas paradox e se sua consulta na query utiliza apenas uma tabela (não há relacionamento com outra), você pode definir a propriedade RequestLive (do componente TQuery em questão) para TRUE. Caso contrário, preciso de mais informações para dar a outra alternativa: nome da tabela e campo(s) da chave primária.
Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

é o seguinte eu tentei colocando o campo RequestLive como TRUE, mas eu tentei do jeito que você falou e não deu, infelizmente não substitue, mas é o seguinte vou falar os nomes minha tabela chama mercadorias, e eu puz como chave primaria so o cod mesmo que vai almendando indefinidamente...

Link para o comentário
Compartilhar em outros sites

  • 0

a questão da chave que citei no post anterior seria, no sentido de que você a incluiria na cláusula select da sua query. Assim, adaptando o código posteriormente, ao invés de você tentar colocar a query em modo de edição (o que não está sendo possível), você adiciona ao seu form um TTable apontando para a tabela a ser atualizada, configura o índice através das propriedades IndexName ou IndexFieldNames, e utilizando o campo chave incluido na query, você posiciona o registro na tabela utilizando FindKey. Daí é só dar um edit no component Table, alterar a informação que você quer e em seguida dar um post. Algo mais ou menos assim:

  Table1.Open;
  while Query1.EOF do
  begin
    if Table1.FindKey[Query1campochave.value] then
    begin
      Table1.Edit;
      Table1SITUACAO.Value := 'PAGO';  // supondo que o nome do campo seja SITUACACAO e seja alfanumérico
      Table1.Post;
    end;
    Query1.Next;
  end;
  Table1.Close;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - João Paulo -

tentei como você falou so que deu erro na linha

if form1.Table1.FindKey[Query1codigo.value] then

e falou [Error] Unit3.pas(199): Not enough actual parameters

e [Error] Unit3.pas(199): Array type required

o resto num deu mais erro não.

ah e no table1 eu coloquei o campo codigo como indexfieldname, ah e tentei com os dois viu usndo esse campo da table e o indexname

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - João Paulo -

procedure TForm3.Button1Click(Sender: TObject);

begin

form1.Table1.Open;

while Query1.EOF do

begin

if form1.Table1.FindKey[Query1codigo.value] then

begin

form1.Table1.Edit;

form1.Table1pagamento.Value := 'PAGO'; // supondo que o nome do campo seja SITUACACAO e seja alfanumérico

form1.Table1.Post;

end;

Query1.Next;

end;

form1.Table1.Close;

end;[code]

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - João Paulo -

Micheus num sei porque mas ontem não estava dando nem com o parentese mas o que importa é que hj deu certo, vou colocar o codigo que fico o meu para se alguém precisar, lembrando que tem de fazer as auterações que você avia falado!!! ah e outra coisa fiz algumas auterações para funcionar tipo

while not Query1.EOF do // alterei aqui, pois você avia esquecido do not

begin

if form1.Table1.FindKey([Query1codigo.value]) then

begin

form1.Table1.Edit;

form1.Table1pagamento.Value := 'PAGO'; // supondo que o nome do campo seja SITUACACAO e seja alfanumérico

form1.Table1.Post;

end;

Query1.Next;

end;

// ah e tambem eu tirei o table1.open e o table1.close, porque senão quando a pessoa voltasse na tela de registro num daria para ela escrever mais nenhum registro como a tabela teria sido fechada... ok obrigado pela ajuda...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...