Resolvi o problema, era mancada minha. O form, quando é chamado faz uma limpa nos componentes de edição (TDBEdits, TDBLookupCombos, etc) que serão criados. TAmbém dava um FREE nos componentes de acesso (query, dataset ou qualquer outra coisa). Mudei o modo de chamada. Pra cada chamada, uma nova instância do form é criada sem componentes. Aí a coisa funciona.
2008/12/19 Guionardo Furlan <guiona...@gmail.com>: > Mas o Dataset não cria automaticamente (ou deveria)? A questão é que > por ser uma rotina genérica, o form busca as informações do field no > dataset. > > 2008/12/18 Coutinho - Yahoo <emanuelcouti...@yahoo.com.br>: >> Oi Colega. >> >> Você não criou os TFields, a solução para isso é acessar os campos >> usando Dataset.fieldbyname('nome_do_campo').value. >> Eu particularmente tiparia o campo, colocando .AsString, asFloat, ou >> asInteger, conforme o campo que você estiver acessando >> Principalmente se estiver atribuindo valores ao campo. >> >> Espero ter ajudado >> >> Sds >> Emanuel Coutinho >> >> Guionardo Furlan escreveu: >> >>> >>> Buenas pessoal, >>> >>> Estou desenvolvendo um form que recebe um dataset (query, sqldataset, >>> table, etc) e monta automaticamente um dbgrid e uma série de >>> tdbedits/tdblookupcombos para edição dos dados. >>> Até aqui, funcionou adequadamente, inclusive com o controle de PK's e >>> campos lookup. >>> >>> Aí, resolvi fazer a chamada só indicando a tabela e os campos que >>> usaria e o próprio form se encarrega de criar o TMDODataset e o >>> TDataSource para ligar com o banco de dados. >>> >>> Só que acontece uma coisa estranha. Quando crio o componente, seja ele >>> TMDOQuery ou TMDODataSet, defino o valor da consulta SQL, o DataBase, >>> o Transaction via código. >>> Executando o Open do query ou dataset não dá nenhuma exceção. >>> Mas a propriedade Fields continua nil, o que me impossibilita acessar >>> os dados pelos componentes do formulário. >>> >>> Quando o formulário obtém um dataset criado na IDE, tudo funciona >>> perfeitamente. >>> >>> Olha aí o código pra criar o MDODataSet >>> >>> var >>> Q: TMDODataSet; >>> begin >>> Q:=TMDODataSet.Create(sbEdit); // sbEdit é um scrollbox onde ficam >>> os componentes de edição >>> Q.DataBase:=DM.DB; // DM é o DataModule e DB é o TMDODataBase, >>> devidamente conectado >>> Q.Transaction:=DM.Trans; >>> Q.SQL.Text:=SQLSelect; // SQLSelect é uma string criada >>> dinamicamente de acordo com os campos fornecidos >>> Q.DeleteSQL.Text:=SQLDelete; // idem >>> Q.InsertSQL.Text:=SQLInsert; >>> Q.ModifySQL.Text:=SQLUpdate; >>> Q.RefreshSQL.Text:=SQLRefresh; >>> Q.Open; // Abre sem problemas >>> if not Assigned(Q.Fields) then // Aqui é que a coisa para. Q.Fields >>> é NIL, mesmo com o dataset aberto. >>> ShowMessage('Fields é NIL'); >>> >>> Alguma idéia do que pode ser? >>> Acho que vou mudar pra zeos se não encontrar uma solução pra esse >>> problema. >>> >>> -- >>> Timeo hominem unius libri >>> Cogito ergo sum - Carpe diem >>> >>> []s >>> Guionardo Furlan >>> http://guionardo.blogspot.com <http://guionardo.blogspot.com> >>> >>> >> >> > > > > -- > Timeo hominem unius libri > Cogito ergo sum - Carpe diem > > []s > Guionardo Furlan > http://guionardo.blogspot.com > -- Timeo hominem unius libri Cogito ergo sum - Carpe diem []s Guionardo Furlan http://guionardo.blogspot.com