Destaque

Como devemos encarar nossa vida profissional Algumas pessoas me perguntam que tipo de trabalho elas poderiam fazer pra ganhar dinheiro, para estas pessoas sempre mostro este texto: "Não paute sua vida, nem sua carreira, pelo dinheiro. Ame seu ofício com todo o coração. Persiga fazer o melhor. Seja fascinado pelo realizar, que o dinheiro...

Read more

Como a realidade aumentada poderá mudar sua vida no... GPS mais desenvolvido, redes sociais revolucionárias e novas maneiras de fazer compras. Faça um passeio pela realidade aumentada e veja como esta tecnologia pode mudar a nossa vida nos próximos anos. Quando assistimos aos filmes de ficção com ambientação no futuro é comum vermos carros voadores,...

Read more

Delphi: Redimesionar form child em MDI Esta rotina redimensiona o formulário Child de uma aplicação MDI para preencher todo a área do form pai. procedure TForm1.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); var MainForm: TForm; Rect: TRect; //OurWidth: Integer; //OurHeight: Integer; begin if Showing then begin MainForm :=...

Read more

ASP e SQL Server: Pegar o retorno do campo ID da tabela... Bom Pessoal, vamos idealizar Uma Rotina Muito Usada, tipo Uma Vendas de Produtos, existem Onde a Tabela de Vendas da EA tabela de itens das Vendas, EO Grande Problema É Como gravar nd tabela itens de Vendas Vendas o ID da tabela, tem aqui uma Solução sem gambiarras código Tabajara Nem. Rotina ESSA...

Read more

Delphi: Transação DBExpress (Vários exemplos)

0

Postado em : 19-07-2009 | By : Paulo H Oliveira | In : Delphi
var
Transacao: TTransactionDesc;
begin
SQLDataSet1.CommandText:= ‘select ID, NOME from CLIENTES where ID = :id;
SQLDataSet1.ParamByName(‘id’).AsInteger:= 1;
ClientDataSet1.Open; // Note que apenas o TClientDataSet deve ser aberto
with ClientDataSet1 do
begin
Append;
FieldByName(‘ID’).AsInteger:= 2005;
FieldByName(‘NOME’).AsString:= ‘ClubeDelphi’;
Post;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:=  xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
if  ApplyUpdates(0) = 0 then
SQLConnection1.Commit(Transacao)
else SQLConnection1.Rollback(Transacao);
end;
==============================================
var
TudoOK: Boolean;
Transacao: TTransactionDesc;
begin
TudoOK:= False;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:=  xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
// Aplicando os updates
if ClientDataSet1.ApplyUpdates(0) = 0 then
if ClientDataSet2.ApplyUpdates(0) = 0 then
if ClientDataSet3.ApplyUpdates(0) = 0 then
if ClientDataSet4.ApplyUpdates(0) = 0 then
TudoOK:= True;
// Note que TudoOK só será true se não houver nenhum erro em nenhum dos Updates
if TudoOK then
begin
SQLConnection1.Commit(Transacao);
ShowMessage(‘Atualizações OK.’);
end
else
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(‘Ocorreram erros. Alterações descartadas.’);
end;
end;
==============================================
var
Transacao: TTransactionDesc;
begin
with SQLDataSet1 do
begin
CommandText:= ‘insert into CLIENTES (ID, NOME) values (:id, :nome)’;
ParamByName(‘id).AsInteger:= 2005;
ParamByName(‘nome’).AsString:= ‘ClubeDelphi’;
Transacao.TransctionID:= 1;
Transacao.IsolationLevel:=  xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
try
ExecSQL;
SQLConnection1.Commit (Transacao);
except
on E: Exception do
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(‘Ocorreram erros.’ + #13 + E.Message);
end;
end;
end;
end;

var

Transacao: TTransactionDesc;

begin

SQLDataSet1.CommandText:= ‘select ID, NOME from CLIENTES where ID = :id;

SQLDataSet1.ParamByName(‘id’).AsInteger:= 1;

ClientDataSet1.Open; // Note que apenas o TClientDataSet deve ser aberto

with ClientDataSet1 do

begin

Append;

FieldByName(‘ID’).AsInteger:= 2005;

FieldByName(‘NOME’).AsString:= ‘ClubeDelphi’;

Post;

Transacao.TransactionID:= 1;

Transacao.IsolationLevel:=  xilReadCommitted;

SQLConnection1.StartTransaction(Transacao);

if  ApplyUpdates(0) = 0 then

SQLConnection1.Commit(Transacao)

else SQLConnection1.Rollback(Transacao);

end;

Read the rest of this entry »

Delphi: Redimesionar form child em MDI

0

Postado em : 19-07-2009 | By : Paulo H Oliveira | In : Delphi

Esta rotina redimensiona o formulário Child de uma aplicação MDI para preencher todo a área do form pai.

procedure TForm1.SetBounds(ALeft, ATop, AWidth,
AHeight: Integer);
var
MainForm: TForm;
Rect: TRect;
//OurWidth: Integer;
//OurHeight: Integer;
begin
if Showing then begin
MainForm := Application.MainForm;
// Obtem o retângulo da área cliente MDI
Windows.GetWindowRect(MainForm.ClientHandle, Rect);
// Calcular largura e altura da área cliente
//OurWidth := Rect.Right – Rect.Left;
//OurHeight := Rect.Bottom – Rect.Top;
// Calcula a nova posição
//ALeft := (OurWidth – Width) div 2;
//ATop := (OurHeight – Height) div 2;
end;
inherited SetBounds(0, 0, Rect.Right-Rect.Left-5, Rect.Bottom-Rect.Top-5);
//inherited SetBounds(ALeft, ATop, AWidth, AHeight);
end;

procedure TForm1.SetBounds(ALeft, ATop, AWidth,

AHeight: Integer);

var

MainForm: TForm;

Rect: TRect;

//OurWidth: Integer;

//OurHeight: Integer;

begin

if Showing then begin

MainForm := Application.MainForm;

// Obtem o retângulo da área cliente MDI

Windows.GetWindowRect(MainForm.ClientHandle, Rect);

// Calcular largura e altura da área cliente

//OurWidth := Rect.Right – Rect.Left;

//OurHeight := Rect.Bottom – Rect.Top;

// Calcula a nova posição

//ALeft := (OurWidth – Width) div 2;

//ATop := (OurHeight – Height) div 2;

end;

inherited SetBounds(0, 0, Rect.Right-Rect.Left-5, Rect.Bottom-Rect.Top-5);

//inherited SetBounds(ALeft, ATop, AWidth, AHeight);

end;

Delphi: Várias dicas de impressão pelo TPrinter

0

Postado em : 19-07-2009 | By : Paulo H Oliveira | In : Delphi
if PrintDialog1.Execute then begin
vPrinterLinha := 0;
vFormulario := 66;
Canvas.Font.Name := ‘Courier New’;
Canvas.Font.Size := 8;
Printer.BeginDoc;
with Printer do begin
vPrinterLinha := 1;
vAltura := Canvas.TextHeight(‘A’);
cdsRel.Last;
cdsRel.First;
try
for vI := 1 to cdsRel.RecordCount do begin
vString := cdsRel.Fieldbyname(‘LinRel’).Value;
Canvas.TextOut(0, (vI – 1) * vAltura, vString);
inc(vPrinterLinha);
cdsRel.Next;
if vPrinterLinha > vFormulario – 3 then begin
Printer.NewPage;
vPrinterLinha := 1
end;
end;
finally
EndDoc;
end;
end;
end;
———————————————————————
Impressão com o TPrinter ( Via gerenciador de impressão)
Delphi
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Linha:integer;
Tamanho:integer;
Coluna:integer;
begin
Printer.Orientation := poLandscape;
Printer.BeginDoc;
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.Font.Name := ‘Times New Roman’;
Printer.Canvas.Font.Size := 10;
Linha := 20;
Coluna:= 20;
Tamanho := Printer.Canvas.TextWidth(‘a’);
Table1.First;
while not Table1.Eof do
begin
if Linha = 20 then
begin
Coluna := 20;
Printer.Canvas.TextOut(0,Linha,’Relação de Clientes’);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
Printer.Canvas.TextOut(Coluna,Linha,’Cod’);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,’Nome’);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,’Endereço’);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
end;
Coluna := 20 ;
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Codigo’).AsString);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Nome’).AsString);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘End’).AsString);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
Table1.Next;
if Linha > Printer.PageHeight-20 then
Begin
Printer.NewPage;
Linha := 20;
end;
end;
Printer.EndDoc;
end;
———————————————————————-
procedure TFOrcamento.ImprimirClick(Sender: TObject);
Var
Linha, Coluna, Quantidade : Integer;
IndiceHorizontal, IndiceVertical, Total, TotalGeral : Real;
Codigo : String;
Begin
With IBQimprime do
begin
close;
sql.Clear;
sql.Add(‘ Select orcamento.*, orcamentodet.*, empresa.fantasia, empresa.fone, atendente.nome ‘ +
‘ from orcamento ‘ +
‘ left join orcamentodet on orcamento.id = orcamentodet.idorcamento ‘+
‘ left join empresa on orcamento.idempresa = empresa.id ‘ +
‘ left join atendente on orcamento.idatendente = atendente.id ‘+
‘ where orcamento.id = ‘ + QuotedStr(DBEdit2.Text));
open;
end;
Imprimir.Enabled := False;
Cursor := crHourGlass;
IndiceHorizontal := Printer.PageWidth / 960;
IndiceVertical := Printer.PageHeight / 792;
Printer.canvas.font.Name := ‘Arial’;
Printer.Orientation := poPortrait;
Printer.BeginDoc;
Linha := 0;
Quantidade := 0;
TotalGeral := 0;
With IBQimprime do
Begin
First;
While not eof do // para imprimir toda a tabela
Begin
With Printer.Canvas do
Begin
If Linha = 0 then
Begin
Printer.canvas.font.Name := ‘Monotype Corsiva’;
Printer.canvas.font.style:=[fsitalic];
Font.Size := 20;
Coluna := Round(15 * IndiceHorizontal);
TextOut(Coluna, Linha, IBQimprimeFANTASIA.text);
Coluna := Round(720 * IndiceHorizontal);
TextOut(Coluna, Linha, DateToStr(Now));
Linha := Linha + Round(23 * IndiceVertical);
Coluna := Round(250 * IndiceHorizontal);
Printer.canvas.font.Name := ‘Arial’;
Printer.canvas.font.style:=[];
Font.Size := 20;
TextOut(Coluna, Linha, ‘Emissao do Orçamento ‘);
Linha := Linha + Round(28 * IndiceVertical);
Font.Size := 9;
Coluna := 0;
TextOut(Coluna, Linha, ‘CÓDIGO’);
Coluna := Round(90 * IndiceHorizontal);
TextOut(Coluna, Linha, ‘QUANT’);
Coluna := Round(170 * IndiceHorizontal);
TextOut(Coluna, Linha, ‘VALOR’);
Linha := Linha + (Round(25 * IndiceVertical));
End;
Coluna := 0;
Codigo := IntToStr(IBQimprimeIDPRODUTO.Value);
TextOut(Coluna, Linha, Codigo);
Coluna := Round(90 * IndiceHorizontal);
TextOut(Coluna, Linha, floattostr(IBQimprimeQTDE.Value));
Total := IBQimprimeTOTAL1.Value;
TotalGeral := TotalGeral + Total;
Quantidade := Quantidade + 1;
Coluna := Round(170 * IndiceHorizontal);
TextOut(Coluna, Linha, FloatToStrF(Total, ffFixed, 10, 2));
Linha := Linha + Round(20 * IndiceVertical);
If Linha >= 600 then
Begin
Linha := 0;
Printer.NewPage;
End;
End;
IBQimprime.Next;
End;
End;
Printer.Canvas.Font.Size := 10;
Linha := Linha + Round(25 * IndiceVertical);
If Linha > 600 then
Printer.NewPage;
Coluna := 0;
Printer.Canvas.TextOut(Coluna, Linha, ‘QUANTIDADE TOTAL DE ÍTENS: ‘ + IntToStr(Quantidade));
Linha := Linha + Round(25 * IndiceVertical);
Printer.Canvas.TextOut(Coluna, Linha, ‘VALOR TOTAL: ‘ + FloatToStrF(TotalGeral, ffCurrency, 10, 2));
Printer.EndDoc;
Cursor := crDefault;
———————————————————————–
implementation
Uses Printers;
{$R *.DFM}
procedure TForm1.BtnScanPrintersClick(Sender: TObject);
begin
if Printer.PrinterIndex = -1 then
ShowMessage(‘Não há impressoras instaladas.’);
ListBox1.Items := Printer.Printers;
ListBox1.ItemIndex := Printer.PrinterIndex;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
I, Linha, HeightLine: Integer;
begin
Memo2.Lines.Clear;
// Zera a variável
Linha := 0;
// Verifica se tem alguma impressora instalada
if Printer.PrinterIndex = -1 then
Exit;
try
With Printer do
begin
if ListBox1.ItemIndex = -1 then
begin
ShowMessage(‘Lista de impressoras não disponível.’);
Exit;
end;
PrinterIndex := ListBox1.ItemIndex;
Printer.Title := ‘Impressão de Teste’;
BeginDoc;
Memo2.Lines.Add(‘Imprimindo…’);
// Calcula a altura da linha
HeightLine := Trunc(Printer.Canvas.TextHeight(‘My’)*1.1);
for I := 0 to Memo1.Lines.Count -1 do
begin
Canvas.TextOut(50, Linha, Memo1.Lines[I]);
// Calcula a altura da próxima linha
Linha := Linha + HeightLine;
// Se passou do final da página
if Linha >= Printer.PageHeight then
begin
Printer.NewPage;
Linha := 0;
end;
end;
// Termina Impressão
EndDoc;
Memo2.Lines.Add(‘Impressão finalizada com sucesso.’);
end;
except
ShowMessage(‘Erro ao tentar imprimir ou impressora não disponivel.’);
Memo2.Lines.Add(‘Impressão finalizada com erro.’);
end;
end;
————————————————————————
uses Printers;
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(iColuna, iLinha, ‘texto a ser exibido’);
Printer.EndDoc;
end;

if PrintDialog1.Execute then begin

vPrinterLinha := 0;

vFormulario := 66;

Canvas.Font.Name := ‘Courier New’;

Canvas.Font.Size := 8;

Printer.BeginDoc;

with Printer do begin

vPrinterLinha := 1;

vAltura := Canvas.TextHeight(‘A’);

cdsRel.Last;

cdsRel.First;

try

for vI := 1 to cdsRel.RecordCount do begin

vString := cdsRel.Fieldbyname(‘LinRel’).Value;

Canvas.TextOut(0, (vI – 1) * vAltura, vString);

inc(vPrinterLinha);

cdsRel.Next;

if vPrinterLinha > vFormulario – 3 then begin

Printer.NewPage;

vPrinterLinha := 1

end;

end;

finally

EndDoc;

end;

end;

end;

Read the rest of this entry »

Delphi: Funções Matemáticas

0

Postado em : 19-07-2009 | By : Paulo H Oliveira | In : Delphi

Funções Matematicas do Delphi

O artigo irá mostrar as principais funções matemáticas utilizadas tanto pelo Delphi quanto no Kylix. Para quem é amante da matemática e utiliza o recurso da informática (na programação) para calcular, não pode deixar de ler este artigo que contém várias funções para cálculo, tais como: cáculo de ângulos, médias e muito mais.

Mas, porque deste artigo, se as mesmas podem ser encontradas no Help do Delphi? Ai é que está! As definições do help estão em inglês e para uma pessoa que não entenda este idioma ficaria difícil descobrir para que servem determinadas funções. Por isso este artigo, que irá facilitar a vida de milhares de programadores que têm dificuldade com o inglês. Agora deixamos de muita convera e vamos ao que interessa. Confira as principais funções com suas respectivas definições e como declará-las.

Read the rest of this entry »

Delphi: QuickReport Marca d’agua

1

Postado em : 19-07-2009 | By : Paulo H Oliveira | In : Delphi
Esta dica nos mostra como colocar uma imagem de fundo na página, simulando o efeito marca d’água. Para tal, declaremos a procedure:
procedure ImprimeBitMap(Cnv: TCanvas; BitMap: TBitMap; R: TRect);
var
Info : PBitMapInfo;
InfoSize : DWORD;
Image : Pointer;
ImageSize : DWORD;
begin
with BitMap do
begin
GetDIBSizes(Handle, InfoSize, ImageSize);
GetMem(Info, InfoSize);
try
Getmem(Image, ImageSize);
try
GetDIB(Handle, Palette, Info^,Image^);
with Info^.bmiHeader do
StretchDIBits(Cnv.Handle, R.Left, R.Top,
R.Right – R.Left, R.Bottom – R.Top,
0, 0, biWidth, biHeight, Image,
Info^, DIB_RGB_COLORS, SRCAND);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
end;
end;
Antes de usá-la, crie/copie uma imagem de tonalidade clara para a unidade C:, e no evento AfterPrint da última banda existente no seu relatório (normalmente PageFooter), faça:
procedure TForm1.PageFooterBand1AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
const
Imagem = ‘c:\figura.bmp’;
//altere aqui o nome/caminho da sua imagem
var
BitMap : TBitMap;
R      : TRect;
X, Y   : integer;
begin
BitMap := TBitMap.Create;
try
if not FileExists(Imagem) then
begin
messagebox(handle,
‘O arquivo de imagem não existe ou foi removido !’,
‘Atenção’, MB_OK or MB_ICONWARNING);
SetActiveWindow(Application.Handle);
end
else
begin
BitMap.LoadFromFile(Imagem);
with QuickRep1.QRPrinter do
begin
Y := YPos(PaperLengthValue) div 6;
X := XPos(PaperWidthValue) div 4;
R := Rect(X, 2 * Y, 3 * X, 4 * Y);
ImprimeBitMap(Canvas, BitMap, R);
end;
end;
finally
BitMap.Free;
end;
end;
Agora é só rodar e testar! ;-)
Só lembrando que, como qualquer outro código nos eventos Befor e AfterPrint, não funciona em Design Time.

Esta dica nos mostra como colocar uma imagem de fundo na página, simulando o efeito marca d’água. Para tal, declaremos a procedure:

Read the rest of this entry »

Delphi: Incluir Zeros (0) a esquerda

0

Postado em : 23-06-2009 | By : Paulo H Oliveira | In : Delphi
Function StrZero(n:Real;t:byte):String;
var
s : String;
i : Integer;
begin
str(n:t:0,s);
for i := 1 to length(s) do
if s[i] = ‘ ‘ then
s[i] := ’0′;
StrZero := s;
End;

Delphi: Limpa os objetos dentro de um panel

0

Postado em : 23-06-2009 | By : Paulo H Oliveira | In : Delphi
Procedure LimpaPanelEdtP(p : TPanel);
var
i : Integer;
begin
with p do
for i := 0 to ControlCount – 1 do begin
if (Controls[i] is TEdit) then
TEdit(Controls[i]).Text := ”;
if (Controls[i] is TMaskEdit) then
TMaskEdit(Controls[i]).Text := ”;
if (Controls[i] is TRxSpinEdit) then
TRxSpinEdit(Controls[i]).Value := 0;
if (Controls[i] is TComboEdit) then
TComboEdit(Controls[i]).Text := ”;
if (Controls[i] is TRxLookupEdit) then
TRxLookupEdit(Controls[i]).Text := ”;
if (Controls[i] is TDateEdit) then
TDateEdit(Controls[i]).Text := ”;
if (Controls[i] is TRxCalcEdit) then
TRxCalcEdit(Controls[i]).Value := 0;
if (Controls[i] is TMemo) then
TMemo(Controls[i]).Lines.Clear;
if (Controls[i] is TCheckBox) then
TCheckBox(Controls[i]).Checked := False;
end;
end;

Delphi: Carrega os objetos dentro de um panel com os registros do TQuery

0

Postado em : 23-06-2009 | By : Paulo H Oliveira | In : Delphi
procedure LoadFields(p: TGroupBox; t: TQuery);
var
i : Integer;
begin
with p do begin
for i := 0 to ControlCount – 1 do begin
{ Edit }
if (Controls[i] is TEdit) then
TEdit(Controls[i]).Text := t.FieldByName(TEdit(Controls[i]).Name).AsString;

{ MaskEdit }
if (Controls[i] is TMaskEdit) then
TMaskEdit(Controls[i]).Text := t.FieldByName(TMaskEdit(Controls[i]).Name).AsString;

{ ComboBox }
if (Controls[i] is TComboBox) then
if TComboBox(Controls[i]).Style = csDropDown then
TComboBox(Controls[i]).Text := t.FieldByName(TComboBox(Controls[i]).Name).AsString
else if TComboBox(Controls[i]).Style = csDropDownList then
TComboBox(Controls[i]).ItemIndex := t.FieldByName(TComboBox(Controls[i]).Name).AsInteger;

{ CurrencyEdit }
if (Controls[i] is TCurrencyEdit) then
if TCurrencyEdit(Controls[i]).DecimalPlaces = 0 then
TCurrencyEdit(Controls[i]).Value := t.FieldByName(TCurrencyEdit(Controls[i]).Name).AsInteger
else
TCurrencyEdit(Controls[i]).Value := t.FieldByName(TCurrencyEdit(Controls[i]).Name).AsFloat;

end;
end;
end;

Delphi: Salva todos os objetos na base de dados de um panel

0

Postado em : 23-06-2009 | By : Paulo H Oliveira | In : Delphi
procedure SaveFields(p: TGroupBox; t: TQuery);
var
i : Integer;
begin
with p do begin
for i := 0 to ControlCount – 1 do begin
{ Edit }
if (Controls[i] is TEdit) then
t.FieldByName(TEdit(Controls[i]).Name).AsString := TEdit(Controls[i]).Text;

{ MaskEdit }
if (Controls[i] is TMaskEdit) then
t.FieldByName(TMaskEdit(Controls[i]).Name).AsString := TMaskEdit(Controls[i]).Text;

{ CurrencyEdit }
if (Controls[i] is TCurrencyEdit) then
if TCurrencyEdit(Controls[i]).DecimalPlaces = 0 then
t.FieldByName(TCurrencyEdit(Controls[i]).Name).AsInteger := Trunc(TCurrencyEdit(Controls[i]).Value)
else
t.FieldByName(TCurrencyEdit(Controls[i]).Name).AsFloat := TCurrencyEdit(Controls[i]).Value;

{ ComboBox }
if (Controls[i] is TComboBox) then
if TComboBox(Controls[i]).Style = csDropDown then
t.FieldByName(TComboBox(Controls[i]).Name).AsString := TComboBox(Controls[i]).Text
else if TComboBox(Controls[i]).Style = csDropDownList then
t.FieldByName(TComboBox(Controls[i]).Name).AsInteger := TComboBox(Controls[i]).ItemIndex;
end;
end;
end;

Delphi: Fecha todas as bases de um Form

0

Postado em : 23-06-2009 | By : Paulo H Oliveira | In : Delphi
procedure CloseBases(f: TCustomForm);
var
i : Integer;
begin
with f do begin
for i := 0 to ComponentCount – 1 do begin
{ Query’s }
if (Components[i] is TQuery) then
TQuery(Components[i]).Close;

{ Table’s }
if (Components[i] is TTable) then
TTable(Components[i]).Close;
end;
end;
end;