Ao criar instancia de um ClientDataset não vem os Fields ???
Oi, eu gostaria de saber como faço para criar uma instância de um ClientDataSet que já tenha Fields e estes persistam na instância, exemplo:
Tenho um ClientDataset: cdsPacientes e neles tem os seguintes fields:
cdsPacientesPAC_CODIGO cujo DisplayText é ´Código´ entre outras configurações;
cdsPacientesPAC_NOME cujo DisplayText é ´Nome´.
ao fazer o seguinte :
cdsNovoPaciente:= cdsPacientes.Create(Self);
o cdsNovoPaciente perde os displaytexts assim como os outros atributos, o mesmo acontece quando tento fazer um clone, alguém poderia me ajudar a solucionar este problema ?
Tenho um ClientDataset: cdsPacientes e neles tem os seguintes fields:
cdsPacientesPAC_CODIGO cujo DisplayText é ´Código´ entre outras configurações;
cdsPacientesPAC_NOME cujo DisplayText é ´Nome´.
ao fazer o seguinte :
cdsNovoPaciente:= cdsPacientes.Create(Self);
o cdsNovoPaciente perde os displaytexts assim como os outros atributos, o mesmo acontece quando tento fazer um clone, alguém poderia me ajudar a solucionar este problema ?
Ibotirama
Curtidas 0
Respostas
Adriano Santos
19/04/2007
Oi, eu gostaria de saber como faço para criar uma instância de um ClientDataSet que já tenha Fields e estes persistam na instância, exemplo:
Tenho um ClientDataset: cdsPacientes e neles tem os seguintes fields:
cdsPacientesPAC_CODIGO cujo DisplayText é ´Código´ entre outras configurações;
cdsPacientesPAC_NOME cujo DisplayText é ´Nome´.
ao fazer o seguinte :
cdsNovoPaciente:= cdsPacientes.Create(Self);
o cdsNovoPaciente perde os displaytexts assim como os outros atributos, o mesmo acontece quando tento fazer um clone, alguém poderia me ajudar a solucionar este problema ?
Não colega, a forma que vc quer usar (TabelaCAMPO) só é possível porque vc adiciona os campos em tempo de projeto, ou seja, tipifica os campos.
Em runtime use FieldByName
cdsPacientes.FieldByName(´PAC_CODIGO´).AsTipo; cdsPacientes.FieldByName(´PAC_NOME´).AsTipo;
GOSTEI 0
Ibotirama
19/04/2007
Ok, mas o negócio é o seguinte, quanto a isso não tem problema, o meu problema é o seguinte, quando eu clono ou crio uma instância do ClientDataSet que foi definido em tempo de projeto os Fields perdem as propriedades como DisplayLabel, etc.
como eu faço pra que isso não ocorra ?
como eu faço pra que isso não ocorra ?
GOSTEI 0
Marco Salles
19/04/2007
Ok, mas o negócio é o seguinte, quanto a isso não tem problema, o meu problema é o seguinte, quando eu clono ou crio uma instância do ClientDataSet que foi definido em[b:57c4a51a84] tempo de projeto os Fields perdem as propriedades como DisplayLabel[/b:57c4a51a84], etc. como eu faço pra que isso não ocorra ?
[u:57c4a51a84]em tempo de projeto[/u:57c4a51a84] ???? voce tem certeza disso :?: :?:
Como o adriano colocou :
em tempo de projeto estas alteraçoes estão persistidas .. Nun entendo , porque isto esta occorrendo com voce
GOSTEI 0
Ibotirama
19/04/2007
Veja em tempo de projeto eu coloco lá as definições certo.
depois em tempo de execução eu tento clonar ou criar uma instânica do objeto (definido em tempo de projeto) e este (em tempo de execução) não vem com os DisplayLabels dos fields do mesmo jeito que estão em tempo de projeto.
Entendeu ?
depois em tempo de execução eu tento clonar ou criar uma instânica do objeto (definido em tempo de projeto) e este (em tempo de execução) não vem com os DisplayLabels dos fields do mesmo jeito que estão em tempo de projeto.
Entendeu ?
GOSTEI 0
Marco Salles
19/04/2007
Veja em tempo de projeto eu coloco lá as definições certo.
depois em tempo de execução eu tento clonar ou criar uma instânica do objeto (definido em tempo de projeto) e este (em tempo de execução) não vem com os DisplayLabels dos fields do mesmo jeito que estão em tempo de projeto.
Entendeu ?
entender eu entendi..... So estou achando muito estranho isto esta ocorrendo , porque os Tfields estão persistidos ... Deveria vir sim com as propriedades alteradas
Saia deste projeto e faça um outro teste simples
Coloque um Tclientdataset Dois DataSorce e dois dbgrid
Defina os campos para o ClintDtaset
de um CreateDataSet
Mude as propriedades a Gosto
Coloque no novo projeto
var
umClone:TclientDataSet;
begin
umClone:=TclientDataSet.Create(nil)
umClone.CloneCursor(SeuClientDataSet,true,true);
DataSorce2.Dataset:=umClone;
end;
[b:670c3d08ed]Ao executar este método aparecerá no DbGrid2 as Propreidades Alteradas pelo SeuClientDataSet[/b:670c3d08ed]
Não é isso que esta ocorrendo com Você :?: :?: :?:
GOSTEI 0
Ibotirama
19/04/2007
Seguinte descobri o que está acontecendo :
1 - a propriedade Options - > poIncFieldProps tem que estar true.
2 - as propriedades vem do SQLDataSet ligado ao Provider e não diretamente do ClientDataSet que está sendo clonado ou seja:
tenho um SQLDataSet dstPacientes, um DataSetProvider dspPacientes e um ClientDataSet cdsPacientes. caso eu faça
as propriedades como DisplayLabel viram de dstPacientes e não de cdsPacientes.[/code]
1 - a propriedade Options - > poIncFieldProps tem que estar true.
2 - as propriedades vem do SQLDataSet ligado ao Provider e não diretamente do ClientDataSet que está sendo clonado ou seja:
tenho um SQLDataSet dstPacientes, um DataSetProvider dspPacientes e um ClientDataSet cdsPacientes. caso eu faça
var umClone:TclientDataSet; begin umClone:=TclientDataSet.Create(nil) umClone.CloneCursor(cdsPacientes, true, true); DataSorce2.Dataset:=umClone; end;
as propriedades como DisplayLabel viram de dstPacientes e não de cdsPacientes.[/code]
GOSTEI 0
Adriano Santos
19/04/2007
Seguinte descobri o que está acontecendo :
1 - a propriedade Options - > poIncFieldProps tem que estar true.
2 - as propriedades vem do SQLDataSet ligado ao Provider e não diretamente do ClientDataSet que está sendo clonado ou seja:
tenho um SQLDataSet dstPacientes, um DataSetProvider dspPacientes e um ClientDataSet cdsPacientes. caso eu faça
as propriedades como DisplayLabel viram de dstPacientes e não de cdsPacientes.[/code]
var umClone:TclientDataSet; begin umClone:=TclientDataSet.Create(nil) umClone.CloneCursor(cdsPacientes, true, true); DataSorce2.Dataset:=umClone; end;
Ixi, ainda bem que descobriu pq eu já ia responder:
[b:0738a751a4]Ixi Marco não funfou...rsrsr.[/b:0738a751a4]
Mexi um pouco aqui e descobri que tb dá pra fazer assim
procedure TForm1.Button2Click(Sender: TObject); var umClone:TClientDataSet; begin ClientDataSet1.Open; umClone:= TClientDataSet.Create(Nil); umClone.Data := ClientDataSet1.Data; umClone.Open; end;
Porém com a propriedade Options > poIncFieldProps ativa ele traz as propriedades do SqlDataSet e com ela falsa traz do ClientDataSet. Bem loko isso hein?
vlw
GOSTEI 0
Marco Salles
19/04/2007
sinceramente eu nen imaginei que este clientdataset estava associado usando a tecnologia dbexpress... Acho que é porque eu estou tão envolvido numa aplicação mybase que nen me passou pela idéia
esta maneira Adriano , nun acho legal . Voce fica com o mesmo Ponteiro
As vezes voce quer fazer uma Pesquisa , percorrer os registros do ClientDataSet, e usando o Data , voce desloca os registros do Outro ClientDataSet simultaneamente...
Mexi um pouco aqui e descobri que tb dá pra fazer assim
Código:
procedure TForm1.Button2Click(Sender: TObject);
var
umClone:TClientDataSet;
begin
ClientDataSet1.Open;
umClone:= TClientDataSet.Create(Nil);
umClone.Data := ClientDataSet1.Data;
umClone.Open;
end;
esta maneira Adriano , nun acho legal . Voce fica com o mesmo Ponteiro
As vezes voce quer fazer uma Pesquisa , percorrer os registros do ClientDataSet, e usando o Data , voce desloca os registros do Outro ClientDataSet simultaneamente...
GOSTEI 0
Adriano Santos
19/04/2007
[quote:90a58d175b=´Marco Salles´]...
esta maneira Adriano , nun acho legal . Voce fica com o mesmo Ponteiro
As vezes voce quer fazer uma Pesquisa , percorrer os registros do ClientDataSet, e usando o Data , voce desloca os registros do Outro ClientDataSet simultaneamente...[/quote:90a58d175b]
Perai véio, tah me dizendo que se eu fizer uma pesquisa qualquer usando um locate, findfirst ou seja lá o que, no primeiro ClientDataSet o segundo é deslocado tb? Acho que não hein véio. Porque ambos vão trabalhar idenpendente. Acabei de fazer um teste e tudo certo. Não consegui visualizar isso. Coloquei na minha area de ftp o exemplo, talvez eu esteja fazendo algo diferente.
Uso isso em n-tier. O engraçado que posso até fechar o clientdataset1 que tudo está normal.
Vlw.
http://www.doiscliques.com/pub/teste-clone.zip
esta maneira Adriano , nun acho legal . Voce fica com o mesmo Ponteiro
As vezes voce quer fazer uma Pesquisa , percorrer os registros do ClientDataSet, e usando o Data , voce desloca os registros do Outro ClientDataSet simultaneamente...[/quote:90a58d175b]
Perai véio, tah me dizendo que se eu fizer uma pesquisa qualquer usando um locate, findfirst ou seja lá o que, no primeiro ClientDataSet o segundo é deslocado tb? Acho que não hein véio. Porque ambos vão trabalhar idenpendente. Acabei de fazer um teste e tudo certo. Não consegui visualizar isso. Coloquei na minha area de ftp o exemplo, talvez eu esteja fazendo algo diferente.
Uso isso em n-tier. O engraçado que posso até fechar o clientdataset1 que tudo está normal.
Vlw.
http://www.doiscliques.com/pub/teste-clone.zip
GOSTEI 0
Marco Salles
19/04/2007
eitaaaa..... :lol: :lol:
[b:17d35efc4f]marco saales citou[/b:17d35efc4f]
veja , vamos supor que voce esteja numa situação de inserção de algum produto.. Existem infinitas situaçoes e razões , para [u:17d35efc4f][b:17d35efc4f]não permitir [/b:17d35efc4f][/u:17d35efc4f], produtos com códigos identicos.. Entre várias soluçoes < esqueça um Pouco a estrutura de banco de dados e nos apeguemos ao nosso ClientDataset > uma solução é apresentada abaixo:
o codigo acima , usa a Propriedade [b:17d35efc4f]Data[/b:17d35efc4f] ...Olhando a estrutura acima , daríamos certo que o codigo implementa o esperado :arrow: Que é impedir o cadastramento de dois produtos com codigos Iguais...
:cry: :cry:
O unico e fatal problema é que o Cursor do cdsData não é independente do ClintDataSet1..[u:17d35efc4f][color=red:17d35efc4f][b:17d35efc4f] Isto cria uma situaçõ de Loop Infinito[/b:17d35efc4f][/color:17d35efc4f][/u:17d35efc4f]
Apos criado este CdsData , posso ate concordar pelos teste que voce fez ,que se tem dois cursores independentes.. Porém no exato momento
da atribuição de
cdsData.Data:=clientDataset1.Data; [u:17d35efc4f]o cursor não são idependentes[/u:17d35efc4f]
:arrow:
Porém , voce poderia escrever o codigo anterior usando o CloneCursor que não teria nenhum Problema ..
[b:17d35efc4f]marco saales citou[/b:17d35efc4f]
As vezes voce quer fazer uma Pesquisa , percorrer os registros do ClientDataSet, e usando o Data , voce desloca os registros do Outro ClientDataSet simultaneamente...
veja , vamos supor que voce esteja numa situação de inserção de algum produto.. Existem infinitas situaçoes e razões , para [u:17d35efc4f][b:17d35efc4f]não permitir [/b:17d35efc4f][/u:17d35efc4f], produtos com códigos identicos.. Entre várias soluçoes < esqueça um Pouco a estrutura de banco de dados e nos apeguemos ao nosso ClientDataset > uma solução é apresentada abaixo:
procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet); var CdsData:TClientdataset; begin try //cria cdsData:=TclientDataSet.Create(nil); //copia cdsData.Data:=clientDataset1.Data; //efetua busca if cdsData.Locate(´Id_empresa´,dataset.FieldByName (´Id_empresa´).AsString,[]) Then //se achou gera exceção raise exception.Create(´Exi maria´); finally //destroe cdsData.Free;end;
o codigo acima , usa a Propriedade [b:17d35efc4f]Data[/b:17d35efc4f] ...Olhando a estrutura acima , daríamos certo que o codigo implementa o esperado :arrow: Que é impedir o cadastramento de dois produtos com codigos Iguais...
:cry: :cry:
O unico e fatal problema é que o Cursor do cdsData não é independente do ClintDataSet1..[u:17d35efc4f][color=red:17d35efc4f][b:17d35efc4f] Isto cria uma situaçõ de Loop Infinito[/b:17d35efc4f][/color:17d35efc4f][/u:17d35efc4f]
Apos criado este CdsData , posso ate concordar pelos teste que voce fez ,que se tem dois cursores independentes.. Porém no exato momento
da atribuição de
cdsData.Data:=clientDataset1.Data; [u:17d35efc4f]o cursor não são idependentes[/u:17d35efc4f]
:arrow:
Porém , voce poderia escrever o codigo anterior usando o CloneCursor que não teria nenhum Problema ..
GOSTEI 0