Romário,

Os campos são criados automaticamente para você caso não haja campo 
persistente (campo com representação em tempo de desenvolvimento e 
mantido no arquivo DFM pelo Delphi) associado ao dataset. Você não tem 
como criar campos persistentes em tempo de execução- isso inclui campos 
de lookup e calculados, que são suportados somente através da definição 
de suas propriedades em tempo de desenvolvimento. Bem, isso foi o que 
pude comprovar na prática ao tentar viabilizar o uso de tais campos em 
um antigo projeto meu. Depois de muito quebrar cabeça constatei que os 
campos são criados e associados corretamente mas, durante a execução, 
sempre tenho problemas quando o dataset tenta acessar o buffer interno 
de dados desses campos (que não foi alocado prevendo os campos de lookup 
e/ou calculados adicionais na chamada a CreateFields). Fica bizarro! De 
todo modo, não estou dizendo ser impossível. Estou apenas dizendo que 
até onde tentei, no Delphi 5, não foi possível fazer de modo trivial. 
Acredito que se a forma como o buffer interno é implementado pelos 
datasets fosse mais flexível, isso seria possível sim. Como essa parte 
do código foi tratada como detalhe de implementação, ficamos com esse 
probleminha...

Se você inspecionar o código de DBTables como exemplo, verá que o 
InternalOpen é o *único* ponto do código que a rotina CreateFields é 
chamada e, antes de ser chamada, é verificado se os campos devem ser 
criados dinamicamente (DefaultFields). Todos os demais códigos que 
implementam datasets se comportam da mesma forma em relação ao 
InternalOpen/CreateFields.

Campos criados dinamicamente possuem exatamente as mesmas propriedades 
que seus análogos criados em tempo de desenvolvimento. A única diferença 
é a forma de acesso, que *tem* que ser feita através de um dos acessores 
disponíveis: FieldByName(), Fields[], FindField(), etc. E, claro, como 
disse antes, a impossibilidade de você criar na unha campos "avançados" 
como lookups e calculados.

Cordialmente,

Demian Lessa
Salvador - Brasil

Romario (Listas) wrote:
> Senhores(as),
> 
> Alguém poderia me dar uma dica de como adicionar TODOS os campos da 
> tabela em um SQLDataSet durante a execução do aplicativo?
> 
> Em tempo de projeto é feito da seguinte forma (após associar o SQL à 
> propriedade CommandText):
> 
> 1. Abre-se o SQLDataSet
> 2. Clica com o botão direito no editor de campos
> 3. Seleciona "Add ALL Fields" (CTRL+F) nos itens de menu
> 
> Entretanto, não consegui encontrar nenhuma função parecida que faça isso 
> em tempo de execução.
> 
> Alguém conhece uma função ou tem um exemplo de como eu poderia fazer isso?
> 
> Obrigado!
> 
> Sds,
> 
> Romario


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a