Fórum order by no clientDataset ou pegar o primeiro registro Selecionado #429913
28/11/2012
0
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
Curtir tópico
+ 0Posts
28/11/2012
Wilton Júnior
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;
Gostei + 0
28/11/2012
Rodolpho Silva
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?
Gostei + 0
28/11/2012
Claudia Nogueira
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;
Gostei + 0
28/11/2012
Carlos Faria
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
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
Gostei + 0
28/11/2012
Claudia Nogueira
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?
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
Gostei + 0