Fórum order by no clientDataset ou pegar o primeiro registro Selecionado #429913

28/11/2012

0

Desde já agradeço quem puder dar uma dica de como se faz isso abaixo
Tenho um formulário com o famoso trio de 4 (sqlquery,datasetprovider ,clientdataset ,datasource) um dbgrid e um editbox
tudo que eu preciso fazer é pegar o RecNo =1 do Client dataset e passar para o editbox ou para uma variavel, ai é que ta eu não estou conseguido.

A função abaixo esta correta porem nao sei como pegar o RecNO do registro selecionado no dbgrid já que pode ser selecionado mais de um.

Esse sistema é usado para uma Rádio taxi que pergunta alguem proximo ao bairro tal , os caras vão respondendo por isso pode ter mais de um selecionado no dbgrid


procedure TfrmCorridasArea.btnOrdenaFilaClick(Sender: TObject);
var
X, Y, K: Integer;

begin
OrdenaFila;

end;

procedure TfrmCorridasArea.OrdenaFila;
var
X,i,J: Integer;
aux,M,S: string;

begin
i := 0;
aux := EmptyStr;
J := 0;
S := EmptyStr;

for i := 0 to grdListaFila.SelectedRows.Count - 1 do
begin
dsListaFila.DataSet.GotoBookmark(pointer(grdListaFila.SelectedRows.Items[i])
);
aux := aux + IntToStr(dsListaFila.DataSet.RecNo)
+ '' - '' + dsListaFila.DataSet.FieldByName(''Nr_Matricula'')
.AsString + ''''#13'''';

end;
Carlos Faria

Carlos Faria

Responder

Posts

28/11/2012

Wilton Júnior

Ola,
Não entendi nada do que vc deseja mas quando eu quero um determinado registro do clientdataset eu faço um select

clientdataset.close;
with sqlquery do
begin
sql.clear;
sql.add('select campoa from tabela where campob = :campob');
parambyname('campob').value := variavel;
end;
clientdataset.open;
Responder

Gostei + 0

28/11/2012

Rodolpho Silva

Não entendi,

Essa linha já posiciona o registro no Cds:
dsListaFila.DataSet.GotoBookmark(pointer(grdListaFila.SelectedRows.Items[i])


E aqui você já não pega o RecNo?
IntToStr(dsListaFila.DataSet.RecNo)


Não testei esse código por isso, a pergunta: Isso não está funcionando?
Responder

Gostei + 0

28/11/2012

Claudia Nogueira

Veja se eu entendi direito.
Você deixa a opção do DBGrid dgMultiSelect = True e a pessoa pode selecionar vários registros com o Ctrl+Clique.
Feito isso você quer passar para variável aux o RecNo + o Nr_matribula de todos os registros selecionados.
Se for isso, ficaria assim:

Var
  bmPosicao : TBookmark;
  aux : String;
begin
  aux := '';
  bmPosicao := dsListaFila.DataSet.GetBookmark;
  dsListaFila.DataSet.DisableControls;
  dsListaFila.DataSet.First;
  while not dsListaFila.DataSet.Eof do
  begin
    if grdListaFila.SelectedRows.CurrentRowSelected then
    begin
      aux := aux + IntToStr(dsListaFila.DataSet.RecNo) + ' - ' +
             dsListaFila.DataSet.FieldByName('Nr_Matricula').AsString + #13;
    end;
    dsListaFila.DataSet.Next;
  end;
  try
    dsListaFila.DataSet.GotoBookmark(bmPosicao);
  except
    dsListaFila.DataSet.First;
  end;
  dsListaFila.DataSet.EnableControls;
end;
Responder

Gostei + 0

28/11/2012

Carlos Faria

Eu testei o seu código ainda não funcionou como eu preciso , mas é exatamente como você entendeu
Exemplo Um dbgrid com 50 linhas preenchidas o usuário seleciona 10 o primeiro registro selecionado pelo usuário entre os 10 selecionados esteja na posição 6 eu preciso pegar a matricula desse cara.
O dataset traz todos os 50 do banco mas o que eu preciso de verdade e pegar o primeiro da posição selecionado pelo usuário ;

no meu primeiro exemplo que passei esta tudo certo o showmessage mostra a order correta porem eu nao consegui passar o valor para o editbox matricula

rodei seu exemplo
Responder

Gostei + 0

28/11/2012

Carlos Faria

Amiga
Eu testei o seu código ainda não funcionou como eu preciso , mas é exatamente como você entendeu
Exemplo Um dbgrid com 50 linhas preenchidas o usuário seleciona 10 o primeiro registro selecionado pelo usuário entre os 10 selecionados esteja na posição 6 eu preciso pegar a matricula desse cara.
O dataset traz todos os 50 do banco mas o que eu preciso de verdade e pegar o primeiro da posição selecionado pelo usuário ;

no meu primeiro exemplo que passei esta tudo certo o showmessage mostra a order correta porem eu nao consegui passar o valor para o editbox matricula

rodei seu exemplo
Responder

Gostei + 0

28/11/2012

Claudia Nogueira

Ainda não entendi direito. Hehehe. Sou loira. :)
Você quer pegar o número da matrícula do primeiro selecionado e jogar no editbox matricula, porém no seu for você está concatenando todos os selecionados.
Você quer continuar jogando no aux todos os selecionados e apenas jogar o número da matrícula do primeiro selecionado no editbox matrícula?

Amiga
Eu testei o seu código ainda não funcionou como eu preciso , mas é exatamente como você entendeu
Exemplo Um dbgrid com 50 linhas preenchidas o usuário seleciona 10 o primeiro registro selecionado pelo usuário entre os 10 selecionados esteja na posição 6 eu preciso pegar a matricula desse cara.
O dataset traz todos os 50 do banco mas o que eu preciso de verdade e pegar o primeiro da posição selecionado pelo usuário ;

no meu primeiro exemplo que passei esta tudo certo o showmessage mostra a order correta porem eu nao consegui passar o valor para o editbox matricula

rodei seu exemplo
Responder

Gostei + 0

28/11/2012

Carlos Faria

Quero pegar o da nr_matricula do primeiro selecionado no dbgrid. É exatamente Isso porem esse registro selecionado pode estar não posição 10 de um dbgrid com 30 registros.
É exatamente isso !
Responder

Gostei + 0

28/11/2012

Carlos Faria

Exatamente isso
quero pegar o da nr_matricula do primeiro selecionado no dbgrid. é exatamente isso porem esse registro selecionado pode estar não posição 10 de um dbgrid com 30 registros.
é exatamente isso !
Responder

Gostei + 0

28/11/2012

Carlos Faria

Retificando eu quero jogar somente 1 registro no editbox apenas o primeiro selecionado.
Se existem 10 registros selecionados para mim interessa apenas o primeiro do grid.
Criei um campo RecNo


1 80
2 30 --selecionado no dbgrid
3 17
4 87
5 98
6 10 --selecionado no dbgrid
7 09
8 03
9 21 --selecionado no dbgrid


Conforme o exemplo acima me interessa pegar a matricula do RecNo 2 pois ele é o primeiro da fila
Responder

Gostei + 0

28/11/2012

Claudia Nogueira

Se na sua função estava faltando somente pegar o primeiro, por que você não faz isso:
procedure TfrmCorridasArea.OrdenaFila;
var
X,i,J: Integer;
aux,M,S: string;
begin
i := 0;
aux := EmptyStr;
J := 0;
S := EmptyStr;

for i := 0 to grdListaFila.SelectedRows.Count - 1 do
begin
if i = 0 then
editbox := dsListaFila.DataSet.FieldByName(''Nr_Matricula'').AsString;
dsListaFila.DataSet.GotoBookmark(pointer(grdListaFila.SelectedRows.Items[i]));
aux := aux + IntToStr(dsListaFila.DataSet.RecNo) + '' - '' + dsListaFila.DataSet.FieldByName(''Nr_Matricula'').AsString + ''''#13'''';
end;
Responder

Gostei + 0

28/11/2012

Claudia Nogueira

Ops. Postei o if no lugar errado.

procedure TfrmCorridasArea.OrdenaFila;
var
X,i,J: Integer;
aux,M,S: string;
begin
i := 0;
aux := EmptyStr;
J := 0;
S := EmptyStr;

for i := 0 to grdListaFila.SelectedRows.Count - 1 do
begin
dsListaFila.DataSet.GotoBookmark(pointer(grdListaFila.SelectedRows.Items[i]));
if i = 0 then
editbox := dsListaFila.DataSet.FieldByName(''Nr_Matricula'').AsString;
aux := aux + IntToStr(dsListaFila.DataSet.RecNo) + '' - '' + dsListaFila.DataSet.FieldByName(''Nr_Matricula'').AsString + ''''#13'''';
end;
Responder

Gostei + 0

29/11/2012

Carlos Faria

Menina Legal
Na mosca , muito obrigado pela ajuda.
Funcionou perfeitamente correto.
Sucesso
Responder

Gostei + 0

29/11/2012

Carlos Faria

Perfeito !!!!!!!!!!!!!!!!
Menina Legal
Na mosca , muito obrigado pela ajuda.
Funcionou perfeitamente correto.
Sucesso

Responder

Gostei + 0

30/11/2012

Carlos Faria

Amiga Claudinha
Você Saberia me dizer qual evento do dbgrid simula o clique do mouse , eu preciso abrir esse danado posicionado na posição 1 ou qualquer outra que seja , percebi que se não clicar a rotina passa a não funcionar.
Responder

Gostei + 0

30/11/2012

Claudia Nogueira

Se você usar o SetFocus antes já não resolve?

Amiga Claudinha
Você Saberia me dizer qual evento do dbgrid simula o clique do mouse , eu preciso abrir esse danado posicionado na posição 1 ou qualquer outra que seja , percebi que se não clicar a rotina passa a não funcionar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar