GARANTIR DESCONTO

Fórum Query somente leitura com FB #278041

20/04/2005

0

Olá, queria uma query que me traga meu select, mas somente leitura, ou seja, soh pra exibição.. usei IBQuery e IBDataSet, porem toda vez, q mudo de registro no DBGrid, ele vai no banco e pega algo, isso torna lento...


como faço pra ele nao ir no banco?



desde ja agradeco

[]s


Titanius

Titanius

Responder

Posts

20/04/2005

Edilcimar

tente stringgrid em vez de dbgrid


Responder

Gostei + 0

20/04/2005

Gandalf.nho

Use um ClientDataSet ligado ao IbQuery, assim os dados ficarão na memória.


Responder

Gostei + 0

20/04/2005

Titanius

mas soh de eu usar o ClientDataSet, eh preciso instalar o midas.dll nao eh?


Responder

Gostei + 0

20/04/2005

Gandalf.nho

Sim, ou incorporar a unit correspondente no seus USES. Outra sugestão é usar outras tabelas em memória como as da biblioteca RxLib


Responder

Gostei + 0

20/04/2005

Titanius

Sim, pensei nisso.. estou usando a do RxLib, porem por ser um sistema que acessa o firebird, via internet, demora certo tempo pra trazer os dados, e com isso demora pra incluir os dados no RxLib MemData... queria ver se tinha como fazer o proprio componente do interbase ficar somente como leitura.. :(

irei tentar melhorar a query pra ver se diminui otempo,

Obrigado


Responder

Gostei + 0

20/04/2005

Marco Salles

Observaçoes:

1)Com esta a propriedade [b:a35f250420]Unidirecional[/b:a35f250420] do Componente IbQuery

2)Voce esta Usando BDE :?: :?: --->> o BDE neste caso ajuda muito , pois ele mantem em um Cache local os dados ja carregados da tabela


3)a dica do edilcimar não funciona :?: :?:
tente stringgrid em vez de dbgrid


3)O Caso simples de um controle dbgrid usado para percorrer uma tabela inteira é comum em Programas Locais, mas geralmente deve ser evitado em ambiente Cliente\Servidor... É melhor filtrar apenas parte dos registros e apenas os campos que se esta interessado.. Por exemplo , para lista de nome --->> Solicite ao Usuário a Inicial do Nome


Responder

Gostei + 0

20/04/2005

Edilcimar

se não funciona como é que eu uso?


Responder

Gostei + 0

20/04/2005

Titanius

nao, nao estou usando bde, estou usando a paleta normal do interbase e ja tentei a propriedade unidirecional, e tbm nao funcionou... tentei com o stringgrid e tbm nao funcionou... :(

edilcimar, tem como vc me enviar um exemplo de como voce usou?



[]s


Responder

Gostei + 0

20/04/2005

Edilcimar

não tenho o dlephi aqui, mas jogue para variáveis e delas para o stringgrid.coluns[x,y]


Responder

Gostei + 0

20/04/2005

Titanius

tentei isso, mas preciso do evento que muda a localizacao, pois pra cada item selecionado tem uma descricao diferente....


Responder

Gostei + 0

20/04/2005

Edilcimar

você utilizou matriz para as variáveis?


Responder

Gostei + 0

20/04/2005

Edilcimar

veja este exemplo que eu utilizo para calcular comissão de vendedores de um programa para farmácia, adapte-o para o seu caso, não tenho o delphi mas abri o pas com o notepad
procedure TForm56.Button1Click(Sender: TObject);
var
Vendedor, Comissao, VendaBo, VendaTotal, Percentual, PercentualBo,
Nome : Variant;
I, NumVendedor : Integer;
TotalGeral : Real;
begin
Numero := 1;
NumVendedor := 1;
TotalGeral := 0;
Table1.Open;
With Table1 do
Begin
First;
While not eof do
Begin
Numero := FieldByName(´NUMERO´).AsInteger;
Next;
End;
End;
Vendedor := VarArrayCreate([1, Numero], VarOleStr);
Comissao := VarArrayCreate([1, Numero], VarCurrency);
VendaBo := VarArrayCreate([1, Numero], VarCurrency);
VendaTotal := VarArrayCreate([1, Numero], VarCurrency);
Percentual := VarArrayCreate([1, Numero], varDouble);
PercentualBo := VarArrayCreate([1, Numero], varDouble);
For I := 1 to Numero do
Begin
Vendedor[I] := ´´;
Comissao[I] := 0;
VendaBo[I] := 0;
VendaTotal[I] := 0;
Percentual[I] := 0;
PercentualBo[I] := 0;
End;
Table2.Open;
Table2.Filtered := True;
With Table1 do
Begin
First;
While not eof do
Begin
NumVendedor := FieldByName(´NUMERO´).AsInteger;
Vendedor[NumVendedor] := FieldByName(´NOME´).AsString;
With Table2 do
Begin
While not eof do
Begin
Comissao[NumVendedor] := Comissao[NumVendedor] + FieldByName(´COMISSAO´).AsFloat;
If FieldByName(´COMISSAO´).AsFloat > 0 then
VendaBo[NumVendedor] := VendaBo[NumVendedor] + FieldByName(´VALOR´).AsFloat;
VendaTotal[NumVendedor] := VendaTotal[NumVendedor] + FieldByName(´VALOR´).AsFloat;
TotalGeral := TotalGeral + FieldByName(´VALOR´).AsFloat;
Next;
End;
End;
Next;
End;
First;
I := 1;
StringGrid1.Cells[0,0] := ´VENDEDOR´;
StringGrid1.Cells[1,0] := ´COMISSÃO´;
StringGrid1.Cells[2,0] := ´VENDA COMISSIONADO´;
StringGrid1.Cells[3,0] := ´¬ COMISSÃO´;
StringGrid1.Cells[4,0] := ´VENDA TOTAL´;
StringGrid1.Cells[5,0] := ´¬. VENDAS´;
While not eof do
Begin
NumVendedor := FieldByName(´NUMERO´).AsInteger;
Percentual[NumVendedor] := 100 * VendaTotal[NumVendedor] / TotalGeral;
If VendaTotal[NumVendedor] > 0 then
PercentualBo[NumVendedor] := 100 * VendaBo[NumVendedor] / VendaTotal[NumVendedor]
Else
PercentualBo[Numvendedor] := 0;
StringGrid1.Cells[0,I] := Vendedor[NumVendedor];
StringGrid1.Cells[1,I] := FloatToStrF(Comissao[NumVendedor], ffCurrency, 10,2);
StringGrid1.Cells[2,I] := FloatToStrF(VendaBo[NumVendedor], ffCurrency, 10,2);
StringGrid1.Cells[3,I] := FloatToStrF(PercentualBo[NumVendedor], ffFixed, 3,3);
StringGrid1.Cells[4,I] := FloatToStrF(VendaTotal[NumVendedor], ffCurrency, 10,2);
StringGrid1.Cells[5,I] := FloatToStrF(Percentual[NumVendedor], ffFixed, 3,3);
I := I + 1;
StringGrid1.RowCount := I + 1;
Next;
End;
End;
end;

isto calcula e acrescenta uma linha em branco no final


Responder

Gostei + 0

20/04/2005

Titanius

nao, eh q tem somente uma coluna, mas de qulquer forma nao daria para mim, pois teria que dar o .Next na query e assim ele de qualqueer forma iria ao banco de dados..

obrigado..

[]s


Responder

Gostei + 0

20/04/2005

Edilcimar

no exemplo eu leio para depois mostrar


Responder

Gostei + 0

20/04/2005

Gandalf.nho

Vc não pode delimitar os dados antes de trazê-los? Pq qualquer solução teria que trazer todos os dados antes de jogá-los numa tabela em memória, stringgrid ou algo semelhante. Na verdade, vc não quer somente leitura (o que o IBQuery já é), vc quer um cache ou algo do gênero.


Responder

Gostei + 0

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

Aceitar