Fórum Como criar um ClientDataset em tempo de execução ? #356549
03/04/2008
0
Caros amigos!
Estou precisando criar um ClientDataset em tempo de execução.
Estou montando uma rotina em POO e preciso montar esta tabela.
Minha tabela tem os seguinte campos:
Cds_Dados:
Codigo Integer
Nome VarChar(50)
Data TdateTime
Valor Currency
etc....
Preciso fazer isto em tempo de execucao e ao final destrui-la.
A quem responder, desde já meus agradecimentos.
ANT.CARLOS/SP
Ant.carlos/sp
Curtir tópico
+ 3Post mais votado
03/04/2008
var cdsTemp : TClientDataSet;
begin
-- cdsTemp := TClientDataSet.Create(Self);
-- cdsTemp.Close;
-- cdsTemp.FieldDefs.Clear;
-- cdsTemp.FieldDefs.add(´CODIGO´,ftInteger);
-- cdsTemp.FieldDefs.add(´NOME´,ftString,50);
-- cdsTemp.CreateDataSet;
end;
Espero ter ajudado.
Joaoshi
Gostei + 4
Mais Posts
04/04/2008
Ant.carlos/sp
Caro amigo, obrigado pela atenção.
Beleza, me ajudou muito, mas preciso tbém:
1-Criar um DataSourse e ligar ao CDS.
2-Ao final destruir estes dois componentes.
100+
ANT.CARLOS/SP
Gostei + 1
04/04/2008
Delphi32
var cdsTemp : TClientDataSet; dsTemp: TDataSource; begin cdsTemp := TClientDataSet.Create(nil); cdsTemp.Close; cdsTemp.FieldDefs.Clear; cdsTemp.FieldDefs.add(´CODIGO´,ftInteger); cdsTemp.FieldDefs.add(´NOME´,ftString,50); cdsTemp.CreateDataSet; dsTemp := TDataSource.Create(nil); dsTemp.DataSet := cdsTemp; end;
Obs.: mudei o ´Create(Self)´ para ´Create(nil)´. Dessa forma você fica responsável pela liberar o componente da memória. Para fazer isso você usaria:
cdsTemp.Close; FreeAndNil(cdsTemp); FreeAndNil(dsTemp);
t+!
Gostei + 2
23/04/2008
Wadojr
[color=green:64a71871aa] cds_qtd_oper.FieldDefs.Add(´Total_Oper´,ftInteger);
cds_qtd_oper.FieldDefs.Add(´Total_Qtd´,ftFloat);
cds_qtd_oper.FieldDefs.Add(´Rest_Oper´,ftInteger);[/color:64a71871aa]
em algum momento preciso destruir todos os fields que foram criados neste client, para criar outros diferentes. Como faço para destruir todos os fields?
desde já agradeço moçada, abraços!!!
Gostei + 1
23/04/2008
Fabiano Góes
para destruir todos o TFields
var i: integer; begin ClientDataSet1.Close; for i := 0 to ClientDataSet1.FieldDefs.Count - 1 do if i > 0 then ClientDataSet1.FieldDefs.Delete(i-1) else ClientDataSet1.FieldDefs.Delete(i); // criar novamente os TFields end;
Gostei + 1
23/04/2008
Joaoshi
Gostei + 1
23/04/2008
Fabiano Góes
muito bem lembrado joaoshi.
alterando meu código:
begin ClientDataSet1.Close; ClientDataSet1.FieldDefs.Clear; // criar novamente os TFields end;
Gostei + 1
23/04/2008
Ant.carlos/sp
Tenha um outro problema:
Preciso agora ativar os eventos desta tabela:
AfterInsert, AfterPost, ...
Desde já meus agradecimentos.
ANT.CARLOS / SP
Gostei + 1
24/04/2008
Dmalta
Começe colocando o componente em design-time no form ou data module. Configure todas as [b:3c5773bc54]propriedades[/b:3c5773bc54] e implemente todos os [b:3c5773bc54]eventos[/b:3c5773bc54] necessários. Esse componente servirá apenas como protótipo e você logo poderá excluí-lo.
Utilize um desses métodos para gerar o código:
1) Visualize o form como texto (´View as Text´ no menu popup), localize o objeto (Ctrl+F para ´Find´), copie a sua definição (Ctrl+C), vá para o editor de código, cole a definição anterior (Ctrl+V) e faça as alterações necessárias para adaptar o texto à sintaxe Delphi. Por exemplo, é necessário trocar ´=´ por ´:=´ e acrescentar ´;´ no fim das linhas.
2) Usando [url=http://gexperts.org/]GExperts[/url] é mais fácil. Apenas selecione o componente e depois clique na opção ´Component to Code´ no menu popup (right-click). Vá para o editor de código e cole (Ctrl+V) o código que o GExpert gerou automaticamente e copiou para a área de transferência.
Por fim, delete o componente protótipo que tinha criado.
Gostei + 1
24/04/2008
Wadojr
Valew demaaais, abraços!!
Gostei + 1
24/04/2008
Wadojr
[color=green:b1fc4aecd9]Olá!
Tenha um outro problema:
Preciso agora ativar os eventos desta tabela:
AfterInsert, AfterPost, ...
Desde já meus agradecimentos.
ANT.CARLOS / SP[/color:b1fc4aecd9]
Amigo para inserir eventos no seu ClientDataSet Dinamico basta vc criar uma Procedure que contenha o código que vc precisa e referencia-la.
Ex:[color=green:b1fc4aecd9] procedure AfterPost_Dinamic(DataSet: TDataSet);
procedure TfrmOrcamento.AfterPost_Dinamic(DataSet: TDataSet);
begin
*seu código
end;[/color:b1fc4aecd9]
Quando criar o ClientDataSet referencie sua procedure..
Ex:
[color=green:b1fc4aecd9]//criando o client dinamicamente
cds_qtd_oper := TClientDataSet.Create(nil);
cds_qtd_oper.Close;
// inserindo os eventos necessarios
cds_qtd_oper.AfterOpen := AfterPost_Dinamic;[/color:b1fc4aecd9]
Gostei + 2
27/04/2008
Ant.carlos/sp
Boa tarde!
TEnho novo problema: DBGrid X CDS
Fiz tudo conforme os amigos passaram e funcionou.
Mas, Este CDS está ligado à um DBGRID.
Quando informo os dados no teclado, tudo funiona normalmente.
Quando faço faço uma pesquisa, seleciono o registro, gravo na tabela,
o DBGrid não exibe os dados, embora os mesmos estejam gravados, mas somente nas colunas que gravei, pois nas coluna q digito os dados permanecem.
O problema acontece qdo informo a tabela CDS criada em tempo de execucao.
No meu form, tenho um Cds Protótipo o qual uso pra config. o DBGrid, depois
o subistu-o pelo que eu crie, quando faço isso o DBGrid perde algumas configuraçoes, como por exemplo Campos CheckBox, passam a apresentar o a string
´T´/ou ´F´.
A quem responder, desde já meus agradecimentos.
ANT.CARLOS/SP
Gostei + 0
28/04/2008
Ant.carlos/sp
Bom Resolvi o problema.
Como uso um no meu Form Cds para configurar meu Grid, eu esta usando localmente: Cds_dados.Append,Post.
Mas, para acessar o arquivo q deseja usar, inserido no
Ds_DataSourse := Informe_Nome_Tabela(), deveria usar p/ referir-me a tabela estrangeira, Ds_Datasouse.Dataset.Insert, Post,....
O segredo é usar: Ds_Datasouse.Dataset
Obrigado pessoal
Gostei + 0
25/07/2018
Gladstone Matos
var cdsTemp : TClientDataSet;
begin
-- cdsTemp := TClientDataSet.Create(Self);
-- cdsTemp.Close;
-- cdsTemp.FieldDefs.Clear;
-- cdsTemp.FieldDefs.add(´CODIGO´,ftInteger);
-- cdsTemp.FieldDefs.add(´NOME´,ftString,50);
-- cdsTemp.CreateDataSet;
end;
Espero ter ajudado.
excelente, obrigado! :D
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)