Criar Tabela Dinamica - ClientDataSet
:?: Olá a todos.
Preciso desenvolver uma rotina que crie tabelas dinamicamente.
Que essa tabela seja criada com a estrutura: SqlDataSet, Provider, ClientDataSet, DataSource.
Desenvolvi uma função que cria uma tabela especifica (com campos definidos) mas não consegui fazer uma função que crie tabelas diversas com a mesma estrutura.
Alguma coisa assim Exemplo:
Crietabela( NomeTabela );
AddCampos( Campo1, Tipo1, Campo2, Tipo2, etc..)
ou
CriaTabela( NomeTabela, Campos,Tipo,etc..)
===
Abaixo a função que uso prara criar uma tabela de Titulos
function CriaTabelaTitulos( NomeTabela:String; NomeDataSource:String) : Boolean;
Var
Campo : Tfield;
Begin
Result := false;
try
Tabela2.Name := NomeTabela;
Tabela2.Close;
Tabela2.Fields.Clear;
Tabela2.FieldDefs.Clear;
with Tabela2.FieldDefs do
begin
Campo := TStringField.Create( Application );
Campo.FieldName := ´Ped_Cod´;
Campo.Name := ´Ped_Cod´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Pedido´;
//
Campo := TStringField.Create( Application );
Campo.FieldName := ´Cliente´;
Campo.Name := ´Cliente´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Cliente´;
//
Campo := TFloatField.Create( Application );
Campo.FieldName := ´VlrPedido´;
Campo.Name := ´VlrPedido´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Vlr. Pedido´;
//
Campo := TStringField.Create( Application );
Campo.FieldName := ´Docto´;
Campo.Name := ´Docto´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Docto´;
//
Campo := TDateField.Create( Application );
Campo.FieldName := ´Vencto´;
Campo.Name := ´Vencto´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Vencto´;
end;
Tabela2.CreateDataSet;
Except
begin
MessageDlg(´Error na Criação da Tabela´, mtError, [mbOK],0);
exit;
end;
end;
Result := true;
end;
Abraços a todos.
Neto
Preciso desenvolver uma rotina que crie tabelas dinamicamente.
Que essa tabela seja criada com a estrutura: SqlDataSet, Provider, ClientDataSet, DataSource.
Desenvolvi uma função que cria uma tabela especifica (com campos definidos) mas não consegui fazer uma função que crie tabelas diversas com a mesma estrutura.
Alguma coisa assim Exemplo:
Crietabela( NomeTabela );
AddCampos( Campo1, Tipo1, Campo2, Tipo2, etc..)
ou
CriaTabela( NomeTabela, Campos,Tipo,etc..)
===
Abaixo a função que uso prara criar uma tabela de Titulos
function CriaTabelaTitulos( NomeTabela:String; NomeDataSource:String) : Boolean;
Var
Campo : Tfield;
Begin
Result := false;
try
Tabela2.Name := NomeTabela;
Tabela2.Close;
Tabela2.Fields.Clear;
Tabela2.FieldDefs.Clear;
with Tabela2.FieldDefs do
begin
Campo := TStringField.Create( Application );
Campo.FieldName := ´Ped_Cod´;
Campo.Name := ´Ped_Cod´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Pedido´;
//
Campo := TStringField.Create( Application );
Campo.FieldName := ´Cliente´;
Campo.Name := ´Cliente´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Cliente´;
//
Campo := TFloatField.Create( Application );
Campo.FieldName := ´VlrPedido´;
Campo.Name := ´VlrPedido´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Vlr. Pedido´;
//
Campo := TStringField.Create( Application );
Campo.FieldName := ´Docto´;
Campo.Name := ´Docto´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Docto´;
//
Campo := TDateField.Create( Application );
Campo.FieldName := ´Vencto´;
Campo.Name := ´Vencto´;
Campo.DataSet := Tabela2;
Campo.DisplayLabel := ´Vencto´;
end;
Tabela2.CreateDataSet;
Except
begin
MessageDlg(´Error na Criação da Tabela´, mtError, [mbOK],0);
exit;
end;
end;
Result := true;
end;
Abraços a todos.
Neto
Neto
Curtidas 0
Respostas
Marco Salles
26/04/2007
não sei se eu entendi mas pode usar POO
Carregue assim:
procedure TForm1.Button1Click(Sender: TObject);
type
TParametros = class
Tipos : TFieldType;
Tamanho: integer;
Requerido : Boolean;
end;
function CriarTabela(cds:TclientDataSet;Lista:TstringList):Boolean;
var
i:integer;
begin
try
result:=False;
with cds do
begin
Close;
Fields.Clear;
FieldDefs.Clear;
for i:=0 to Lista.Count - 1 do
FieldDefs.Add(Lista[i],Tparametros(lista.Objects[i]).Tipos,
Tparametros(Lista.Objects[i]).Tamanho,
Tparametros(Lista.Objects[i]).Requerido);
CreateDataSet;
result:=True;
end;
finally
if not result Then
MessageDlg(´Error na Criação da Tabela´, mtError, [mbOK],0);
end;
end;
Carregue assim:
procedure TForm1.Button1Click(Sender: TObject);
var
umaLista:TstringList;
Parametros:TParametros;
i:Integer;
begin
umaLista:=TstringList.create;
// Exemplo...
parametros:=Tparametros.Create;
parametros.Tipos:=ftString;
parametros.Tamanho:=30;
parametros.Requerido:=true;
umaLista.AddObject(´Ped_Cod´,parametros);
bla...bla..bla..
for i:0 to UmaLista.count - 1 do
TParametros.(umalIsta.objects[i]).Free;
Freeandnil(UmaLista);
end;
GOSTEI 0
Marco Salles
26/04/2007
não sei se eu entendi mas pode usar POO
Carregue assim:
procedure TForm1.Button1Click(Sender: TObject);
type
TParametros = class
Tipos : TFieldType;
Tamanho: integer;
Requerido : Boolean;
end;
function CriarTabela(cds:TclientDataSet;Lista:TstringList):Boolean;
var
i:integer;
begin
try
result:=False;
with cds do
begin
Close;
Fields.Clear;
FieldDefs.Clear;
for i:=0 to Lista.Count - 1 do
FieldDefs.Add(Lista[i],Tparametros(lista.Objects[i]).Tipos,
Tparametros(Lista.Objects[i]).Tamanho,
Tparametros(Lista.Objects[i]).Requerido);
CreateDataSet;
result:=True;
end;
finally
if not result Then
MessageDlg(´Error na Criação da Tabela´, mtError, [mbOK],0);
end;
end;
Carregue assim:
procedure TForm1.Button1Click(Sender: TObject);
var
umaLista:TstringList;
Parametros:TParametros;
i:Integer;
begin
umaLista:=TstringList.create;
// Exemplo...
parametros:=Tparametros.Create;
parametros.Tipos:=ftString;
parametros.Tamanho:=30;
parametros.Requerido:=true;
umaLista.AddObject(´Ped_Cod´,parametros);
bla...bla..bla..
CriarTabela(cds,umaLista);
for i:=0 to UmaLista.count - 1 do
TParametros(umalIsta.objects[i]).Free;
umaLista.Free;
end;
GOSTEI 0
Neto
26/04/2007
:idea: Quero tentar usar conforme vc está indicando.
Criei uma nova unit no projeto onde vou colocar as intruções que vc está me ´dizendo´, e quando declaro o type no início da unit (após interface) o delphi retorna:
Undeclared identifier: TFieldType.
Estou fazendo assim.
Tenho um projeto com o formulario principal que ainda não coloquei nada nele. Adicionei uma nova Unit no projeto e estou declarando no início assim:
=================
unit Unit2;
interface
type
TParametros = class
Tipos : TFieldType;
Tamanho: integer;
Requerido : Boolean;
end;
implementation
end.
Como devo fazer para o sistema reconhecer as instruções que vc passou
Abraços
Neto
Criei uma nova unit no projeto onde vou colocar as intruções que vc está me ´dizendo´, e quando declaro o type no início da unit (após interface) o delphi retorna:
Undeclared identifier: TFieldType.
Estou fazendo assim.
Tenho um projeto com o formulario principal que ainda não coloquei nada nele. Adicionei uma nova Unit no projeto e estou declarando no início assim:
=================
unit Unit2;
interface
type
TParametros = class
Tipos : TFieldType;
Tamanho: integer;
Requerido : Boolean;
end;
implementation
end.
Como devo fazer para o sistema reconhecer as instruções que vc passou
Abraços
Neto
GOSTEI 0
Marco Salles
26/04/2007
Como devo fazer para o sistema reconhecer as instruções que vc passou
para o Delphi 7.0 faz assim
interface uses DB,DBClient,Classes,QDialogs;
//DB para o TFieldType
//DBClient para o TclientDataSet
//Classes para o TStringList
//QDialogs para o MessageDlg
GOSTEI 0
Neto
26/04/2007
Ok fiz como vc mandou e deu certo. Bastou declarar no uses da nova Unit.
Agora o próximo problema.
Declarei cds como tipo TClientDataSet no var do Buttom, ai reconheceu
CriarTabela(cds , umaLista);
Aqui no for quando faço Tparameters.Create( >>> aqui quando digito o parenteses o Delphi retorna [ * Np Parameters Expected * ]
for i:=0 to UmaLista.count - 1 do
TParametros.Create(umalIsta.objects[i]).Free
Ai se eu rodo com F9 o sitema retorna:
Too many actual parameters.
Obrigado
Abraços
Neto
Agora o próximo problema.
Declarei cds como tipo TClientDataSet no var do Buttom, ai reconheceu
CriarTabela(cds , umaLista);
Aqui no for quando faço Tparameters.Create( >>> aqui quando digito o parenteses o Delphi retorna [ * Np Parameters Expected * ]
for i:=0 to UmaLista.count - 1 do
TParametros.Create(umalIsta.objects[i]).Free
Ai se eu rodo com F9 o sitema retorna:
Too many actual parameters.
Obrigado
Abraços
Neto
GOSTEI 0
Marco Salles
26/04/2007
Aqui no for quando faço Tparameters.Create( >>> aqui quando digito o parenteses o Delphi retorna [ * Np Parameters Expected * ]
for i:=0 to UmaLista.count - 1 do
TParametros.Create(umalIsta.objects[i]).Free
Porque [u:1d6af7b566]Create[/u:1d6af7b566] ??????
simplesmente é assim :
for i:=0 to UmaLista.count - 1 do
TParametros.(umalIsta.objects[i]).Free
deixo eu usar o meu bom ´Ingles´:
Copy with Atencion
entende....
GOSTEI 0
Neto
26/04/2007
With Atenção do //// perdão pisei na bola ( atenção )
Obrigado pela ajuda, mas temos mais problemas....
Ao Clicar no botão para executar o sistema retorna erro de exceção.
for i := 0 to UmaLista.count - 1 do
TParametros(umalIsta.objects[i]).Free;
posso enviar o projeto para algum endereço pra vc ver.
Acho que ao criar a nova tabela a rotina não está recebendo parametro.
Desculpe a (imbessssibilidade - burrice), te agradeço.
Abraços e bom domingo (dia do senhor), vamos lá.
Neto
Obrigado pela ajuda, mas temos mais problemas....
Ao Clicar no botão para executar o sistema retorna erro de exceção.
for i := 0 to UmaLista.count - 1 do
TParametros(umalIsta.objects[i]).Free;
posso enviar o projeto para algum endereço pra vc ver.
Acho que ao criar a nova tabela a rotina não está recebendo parametro.
Desculpe a (imbessssibilidade - burrice), te agradeço.
Abraços e bom domingo (dia do senhor), vamos lá.
Neto
GOSTEI 0
Marco Salles
26/04/2007
With Atenção do //// perdão pisei na bola ( atenção )
nun precisa pedir perdão nada não e não é burrice não.. eu é que sou brincalhão
posso enviar o projeto para algum endereço pra vc ver.
Acho que ao criar a nova tabela a rotina não está recebendo parametro.
nun carece não... Acho que da para resolver aqui mesmo. é so ficar mais calmo e encarar o Bicho.. ele so assusta é igual cavalo ,
´O Computador é igual ao CAVALO : sabe quem ta Montando nele´
Ao Clicar no botão para executar o sistema retorna erro de exceção.
que erro que dá ???
Com voce ta povoando os Objetos desta StringList ????
GOSTEI 0