order by no clientDataset ou pegar o primeiro registro Selecionado
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;
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
Curtidas 0
Respostas
Wilton Júnior
28/11/2012
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;
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
Rodolpho Silva
28/11/2012
Não entendi,
Essa linha já posiciona o registro no Cds:
E aqui você já não pega o RecNo?
Não testei esse código por isso, a pergunta: Isso não está funcionando?
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
Claudia Nogueira
28/11/2012
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:
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
Carlos Faria
28/11/2012
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
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
Carlos Faria
28/11/2012
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
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
Claudia Nogueira
28/11/2012
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?
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
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
Carlos Faria
28/11/2012
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 !
É exatamente isso !
GOSTEI 0
Carlos Faria
28/11/2012
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 !
é exatamente isso !
GOSTEI 0
Carlos Faria
28/11/2012
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
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
GOSTEI 0
Claudia Nogueira
28/11/2012
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;
GOSTEI 0
Claudia Nogueira
28/11/2012
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;
GOSTEI 0
Carlos Faria
28/11/2012
Menina Legal
Na mosca , muito obrigado pela ajuda.
Funcionou perfeitamente correto.
Sucesso
Na mosca , muito obrigado pela ajuda.
Funcionou perfeitamente correto.
Sucesso
GOSTEI 0
Carlos Faria
28/11/2012
Perfeito !!!!!!!!!!!!!!!!
Menina Legal
Na mosca , muito obrigado pela ajuda.
Funcionou perfeitamente correto.
Sucesso
Na mosca , muito obrigado pela ajuda.
Funcionou perfeitamente correto.
Sucesso
GOSTEI 0
Carlos Faria
28/11/2012
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.
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.
GOSTEI 0
Claudia Nogueira
28/11/2012
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.
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.
GOSTEI 0
Carlos Faria
28/11/2012
setfocus nao , eu encontrei uma que deu certo
grdListaFila.SelectedRows.CurrentRowSelected := True;
obrigado mais uma vez , agora sim terminado
grdListaFila.SelectedRows.CurrentRowSelected := True;
obrigado mais uma vez , agora sim terminado
GOSTEI 0