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

Responder a