Fórum DBLookupComboBox isto é um bug ? #328124
27/08/2006
0
Gigatel
Curtir tópico
+ 0Posts
27/08/2006
Micheus
O DBLookupComboBox utiliza a propriedade RecordCount do dataset para calcular o tamanho da janela a ser mostrada, com a lista. Normalmente apresenta 7(o valor de DropDownRows) linhas.
Vc vai observar que isto só vai ocorrer quando vc estiver inserindo um novo registro, já que quando for uma edição, a consulta terá que percorrer alguns registros para mostrar o valor correto no componente.
No caso específico deste componente, fiz uma modificação no código e adicionei uma nova propriedade(PreFetchedRows) onde indico o número de linhas que devem ser lidas quando a consulta é aberta. No método Open, simplesmente faço algo como:
procedure T...Open; begin for := 1 to PreFetchedRows do Next; First; end;
que é o suficiente para que RecordCount contenha um nº adequado para que a caixa de lista seja apresentada corretamente.
Gostei + 0
27/08/2006
Gigatel
procedure T...Open; begin for := 1 to PreFetchedRows do Next; First; end;
más e aí ? tem jeito ? outbm tenho que alterar o componente ? e onde coloco este código ? ...vlw t+
Gostei + 0
27/08/2006
Gigatel
procedure T...Open; begin for := 1 to PreFetchedRows do Next; First; end;
más e aí ? tem jeito ? outbm tenho que alterar o componente ? e onde coloco este código ? ...vlw t+
Gostei + 0
28/08/2006
M@gnun
dataset_do_lookup.FetchAll;
ps: Cuidado com tabelas com mt registros.
Gostei + 0
28/08/2006
Micheus
Se vc realmente está utilizando o MDO, o que posso sugerir é que faça a mesma alteração que eu fiz.
Eu alterei apenas o [i:e5cdd912f4]MDOQuery.pas[/i:e5cdd912f4], porque utilizo apenas o componente TMDOQuery para fazer os lockup´s. Resolveu perfeitamente o meu problema, porém o ´chato´ é que quando há uma atualização de versão (não ocorre como frequência) tem que ser refeita a alteração - até que o Henrique se sensibilize e implemente algo parecido em seus componentes (já mandei um e-mail para ele e nada :x )
Seguem abaixo as alterações que realizei (ver citações com meu nome):
unit MDOQuery; ... TMDOQuery = class (TMDOCustomDataSet) private FCheckRowsAffected: Boolean; FGenerateParamNames: Boolean; FParams: TParams; FPrepared: Boolean; FRowsAffected: Integer; FPreFetchRecords :Integer; // *** included by Micheus ... public constructor Create(AOwner: TComponent); override; ... procedure GetDetailLinkFields(MasterFields, DetailFields: TList); override; procedure Open; // *** changed by Micheus ... published property Active; ... property Params: TParams read FParams write SetParamsList stored False; property PreFetchRecords :Integer read FPreFetchRecords write FPreFetchRecords default 0; // *** included by Micheus ... constructor TMDOQuery.Create(AOwner: TComponent); begin inherited Create(AOwner); ... FPreFetchRecords := 0; // *** included by Micheus FRowsAffected := -1; end; ... // *** included by Micheus - Jul/2005 // *** Objetivo: Gerar um número mínimo para RecordCount, contornando // *** problemas visuais com as listas (TDBComboBox) procedure TMDOQuery.Open; // Força atualização do RecordCount procedure CalcRecordCount; begin DisableControls; while not EOF and (RecordCount < FPreFetchRecords) do Next; First; EnableControls; end; begin inherited Open; if Active and (FPreFetchRecords > 0) then CalcRecordCount; end; ...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)