Otimizar abertura de tabelas
Tenho um datamodule com 18 tabelas e quero criar uma função a ser executada no evento OnCreate deste datamodule para abrir as tabelas. Não tenho muita prática em manipulação de string em Delphi, então peço ajuda de vocês.
Vejam oque já fiz:
var
mqtdTables: integer;
vetTables: array of string;
.
.
.
mqtdTable:=18;
setlength(vetTables,mqtdTable);
vetTables[1]:=´tAssistidos´;
vetTables[2]:=...
.
.
.
procedure TdmPrincipal.abreTabelas;
var i: integer;
begin
for i:=1 to mqtdTable do
begin
AnsiExtractQuotedStr(vetTables[i],´).active:=true;
end;
end;
Nossa, nunca fiz isso antes em Delphi, na verdade é só um palpite :oops:
A mensagem de erro é a seguinte:
´types of actual and format parameters must to be identical ´
Desde já, agradeço a quem puder me ajudar.
Vejam oque já fiz:
var
mqtdTables: integer;
vetTables: array of string;
.
.
.
mqtdTable:=18;
setlength(vetTables,mqtdTable);
vetTables[1]:=´tAssistidos´;
vetTables[2]:=...
.
.
.
procedure TdmPrincipal.abreTabelas;
var i: integer;
begin
for i:=1 to mqtdTable do
begin
AnsiExtractQuotedStr(vetTables[i],´).active:=true;
end;
end;
Nossa, nunca fiz isso antes em Delphi, na verdade é só um palpite :oops:
A mensagem de erro é a seguinte:
´types of actual and format parameters must to be identical ´
Desde já, agradeço a quem puder me ajudar.
Sandrad
Curtidas 0
Respostas
Marco Salles
05/05/2007
Tenho um datamodule com 18 tabelas e quero criar uma função a ser executada no evento OnCreate deste datamodule para abrir as tabelas. Não tenho muita prática em manipulação de string em Delphi, então peço ajuda de vocês.
eu tenho um pouco de receio disso ,porque os nomes tem que baterem , senão :cry: :cry: :cry:
mas pode ser feito assim
const
vetTables: array[1..18] of string = (´NomeTabela1´,´NomeTabela2´,etc...);
procedure TdmPrincipal.abreTabelas; var i: integer; begin for i:=1 to high(vetTables) do begin try TSuaClasse(FindComponent(vetTables[i])).active:=True; except showmessage(´não existe tablea com este nome : ´+vetTables[i]); end; end; end;
TsuaClasse pode ser TTable , TClintDataSet etc...
GOSTEI 0
Sandrad
05/05/2007
Deu erro. Gera uma excessão EAcessViolation.
Qto a ter q ter realmente o nome no array... bom, sei q dá pra melhorar isso, como criar uma função q varre o datamodule e coloca no array todos os componentes TZtable, por exemplo... mas aí eu já não sei fazer ainda, portando prefiro resolver um problema de cada vez.
Qto a ter q ter realmente o nome no array... bom, sei q dá pra melhorar isso, como criar uma função q varre o datamodule e coloca no array todos os componentes TZtable, por exemplo... mas aí eu já não sei fazer ainda, portando prefiro resolver um problema de cada vez.
GOSTEI 0
Saint
05/05/2007
eu faco assim, seto as tags das querys que quero que sejam iniciadas logo que o datamodulo for criado como 1, ai no oncreate coloco:
for i:=0 to dm.componentcount-1 do
if dm.components[i] is tzquery then
if ((dm.components[i] as tzquery).tag=1) then
(dm.components[i] as tzquery).open;
for i:=0 to dm.componentcount-1 do
if dm.components[i] is tzquery then
if ((dm.components[i] as tzquery).tag=1) then
(dm.components[i] as tzquery).open;
GOSTEI 0
Sandrad
05/05/2007
Muito bom! Parece perfeito. Vou testar logo mais e posto aqui o resultado.
Obrigada.
Obrigada.
GOSTEI 0
Sandrad
05/05/2007
Perfeito, como eu havia dito antes!!
Muito obrigada mesmo.
Muito obrigada mesmo.
GOSTEI 0
Marco Salles
05/05/2007
Sandra , é claro que percorrer todos os Componentes do Modulo e usar um if para selecionar somente aqueles da minha classe etc... é indiscutível que irá funcionar
Mas me estranhou a sua resposta :cry: :cry: :cry:
Porém quanto a sua afirmação que deu erro
é estranho , unica forma que imagino que possa ocorrer isso é voce chamar esta função antes que esse Componentes tenham sido criado
No mais se puder me da mais detalhe , sei que voce ja resolveu seu problema , é so mesmo para tentar descobrir porque Deu este Erro :cry: :cry:
Obrigado
for i:=0 to dm.componentcount-1 do
if dm.components[i] is tzquery then
if ((dm.components[i] as tzquery).tag=1) then
(dm.components[i] as tzquery).open;
Mas me estranhou a sua resposta :cry: :cry: :cry:
const vetTables: array[1..18] of string = (´NomeTabela1´,´NomeTabela2´,etc...);
Código: procedure TdmPrincipal.abreTabelas; var i: integer; begin for i:=1 to high(vetTables) do begin try TSuaClasse(FindComponent(vetTables[i])).active:=True; except showmessage(´não existe tablea com este nome : ´+vetTables[i]); end; end; end;
TsuaClasse pode ser TTable , TClintDataSet etc...
Porém quanto a sua afirmação que deu erro
Deu erro. Gera uma excessão EAcessViolation.
é estranho , unica forma que imagino que possa ocorrer isso é voce chamar esta função antes que esse Componentes tenham sido criado
No mais se puder me da mais detalhe , sei que voce ja resolveu seu problema , é so mesmo para tentar descobrir porque Deu este Erro :cry: :cry:
Obrigado
GOSTEI 0