Fórum Parâmetro do ClientDataSet não Paramentro no ClientDataSet #444461
31/05/2013
0
Gostaria de pegar o nome de um ClientDataSet e jogar em uma variável qualquer depois poder usar ela como se fosse o próprio ClientDataSet:
Ex: tenho um ClientDataSet com o nome de CDSEmpresa
Gostaria de pegar o nome do ClientDataSet que no caso e CDSEmpresa e jogar em uma variável Variavel_Nome para depois usar normalmente como se fosse o próprio clientdataset
Variavel_Nome.First;
while not Variável_Nome.Eof do
Begin
......
End;
Regis Ribeiro
Curtir tópico
+ 0Posts
31/05/2013
Claudia Nogueira
Var
Variavel_Nome : String;
begin
Variavel_Nome := 'CDSEmpresa';
with TClientDataSet(Self.FindComponent(Variavel_Nome)) do
begin
First;
while not Eof do
begin
//...
Next;
end;
end;
end;
Gostei + 0
01/06/2013
Regis Ribeiro
1 Tenho Um Data Module com vários ClientDataSet
2 Peguei os nomes de cada um dos ClientDataSet e joguei dentro de um ListBox
Que ficou assim Ex:
DM.ClientDataSet001
DM.ClientDataSet002
DM.ClientDataSet003
3 agora quero percorrer o meu ListBox e pegar o nome do primeiro itens encontrado que no meu caso aqui e DM.ClientDataSet001 e jogar em uma variável Ex:
Var
VTabelas : String;
Begin
VTabelas:= ‘DM.ClientDataSet001’;//neste caso estou pegando de um ListBox
4 depois que o nome do meu ClientDataSet já esta dentro da variável poder trabalhar com ele como se fosse o próprio ClientDataSet Ex:
VRecebe.First;
Gostei + 0
01/06/2013
Claudia Nogueira
Gostei + 0
01/06/2013
Claudia Nogueira
Gostei + 0
01/06/2013
Regis Ribeiro
Ele copila normalmente, mas da um erro no First.
este codigo esta no form e o ClientDataSet esta Data Module
Var
Variavel_Nome : String;
begin
Variavel_Nome := 'ClientDataSetO0000'; //este ClientDataSet esta Data Module
with TClientDataSet(Self.FindComponent(Variavel_Nome)) do//aque passa normalmente nao da erro
begin
First; //O erro e aqui // Access Violation at address 0048DE4E in module
while not Eof do
begin
ShowMessage('Estou aqui');
Next;
end;
end;
end;
Gostei + 0
01/06/2013
Claudia Nogueira
No meu teste, como não estava, eu criei:
TClientDataSet(Self.FindComponent(Variavel_Nome)).CreateDataSet;
Gostei + 0
01/06/2013
Regis Ribeiro
Var
Variavel_Nome : String;
begin
Variavel_Nome := 'ClientDataSetO0000'; //este ClientDataSet esta Data Module
//Coloquei o linha de
TClientDataSet(Self.FindComponent(Variavel_Nome)).CreateDataSet; // agora esta //dando erro aqui = Access Violation at address 0048DE4E in module
with TClientDataSet(Self.FindComponent(Variavel_Nome)) do//aque passa normalmente nao da erro
begin
First;//Aqui da um erro// Access Violation at address 0048DE4E in module
while not Eof do
begin
ShowMessage('Estou aqui');
Next;
end;
end;
end;
Gostei + 0
01/06/2013
Claudia Nogueira
Se for isso, em vez de usar o Self, você tem que usar o DM.
Var Variavel_Nome : String; begin Variavel_Nome := 'ClientDataSetO0000'; with TClientDataSet(DM.FindComponent(Variavel_Nome)) do begin First; while not Eof do begin //... Next; end; end; end;
Gostei + 0
01/06/2013
Regis Ribeiro
//Agora para os amigos que por ventura precisem disto ai vai como eu fiz com a ajuda //da Claudiadnh.
//1 vale lembrar para verificar se no USES do form tem DBClient
//2 Seu ClientDataSet está em um DataModule e você está usando o //código em um form, Se for isso, em vez de usar o Self, você tem //que usar o DM.
//Ex:
// with TClientDataSet(DM.FindComponent(Variavel_Nome)) do no Caso de //DataModule.
//with TClientDataSet(Self.FindComponent(Variavel_Nome)) do no Caso de estar //usando o código dentro de um form onde esta o seu ClientDataSet.
//No meu caso eu já estou com as tabelas criadas do meu ClientDataSet.
//Mas para Criar o ClientDataSet usar:
//TClientDataSet(Self.FindComponent(Variavel_Nome)).CreateDataSet;
//Respeitando do (Self)se for no form ou (DM) DataModule.
//Vamos ao código:
//No onclick do Botão coloque este código.
Var
W:Integer;
Variavel_Nome : String;
begin
//Coloquei os nomes do meu ClientDataSet em um ListBox
for w := ListBox1.Items.Count - 1 downto 0 do
begin
//Alimento minha variável do no nome do meu ClientDataSet
Variavel_Nome :=ListBox1.Items[w];
// Não tem que constar (DM. ClientDataSetO0000) somente o nome da
//ClientDataSet Ex://'ClientDataSetO0000' mesmo ele estando do seu DataModule.
with TClientDataSet(DM.FindComponent(Variavel_Nome)) do
begin
First;
while not Eof do
begin
ShowMessage(‘Primeiro Registro');
Next;
end;
end;
End;
end;
//para povoar meu ListBox este e o código que uso
Colocar um ListBox no form e um Button depois
procedure TForm.Button7Click(Sender: TObject);
var
n : LongInt;
begin
ListBox1.Clear;
for n := 0 to DM.ComponentCount - 1 do
begin
if (DM.Components[n] is TClientDataSet) then
begin
ListBox1.Items.Add(DM.Components[n].Name);
End;
End;
end;
Bom da mesma forma que sempre fui ajudado por amigos e companheiro deixo aqui o que estou fazendo para que outros possam usufruir, e isto só foi possível graças a ajuda da Cludiadnh muito obrigado mais uma vez.
Gostei + 0
30/09/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)