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