Olá Pessoal, este é o meu primeiro post Tutorial aqui no Script Brasil, vou tentar passar para vocês, um jeito de ler um arquivo texto que foi baixado de um FTP, e Preencher um DBGrid com ele...
Primeiramente... Abra o Delphi ( :lol: ) EHEH! > Clique em File>New>Application
Adicione um Componente DBGrid, que fica na paleta DataControls, (é o primeiro icone da paleta), depois disso, adicione um componente ListBox emcima dele, (O ListBox para quem não sabe, fica na paleta Standar), e em seguida adicione um Memo, que fica na mesmo Paleta!
Acrescente um BitBtn em Baixo do DBGrid, e no Caption pode Colocar como Baixar, ou qualquer coisa.....
Adicione um ClientDataSet, e um DataSource (Paleta Data Acess.)
E por ultimo, adicione um IdFTP, na paleta Indy Clients!
Vai ficar mais ou menos assim!
Salve o Projeto!
Clique em File>New>Other, e selecione uma Thread Object, e em ClassName coloque TDownloadThread
Vamos ao código da Thread!
unit unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls, Gauges, ShellApi, WinSock, registry,
Grids, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdFTP, WinInet,
ComCtrls, IdFTPList, DB, DBClient, DBGrids;
type
TDownloadThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure EnumFiles(szPath, szAllowedExt: String; iAttributes: Integer;
Buffer: TStrings; bClear, bIncludePath: Boolean); StdCall;
procedure DownloadFTP(Host, Username, Password, RemoteDir, LocalDir: string);
procedure ApagaPasta(pasta: string);
procedure ClearMemos;
procedure Principal;
end;
implementation
uses ftp;
{ TDownloadThread }
procedure TDownloadThread.ApagaPasta(pasta: string);
var
Arquivo: TSearchRec;
begin
if FindFirst(pasta+'*.*', 0, Arquivo) = 0 then
begin
repeat
DeleteFile(pasta+Arquivo.Name);
until FindNext(Arquivo) <> 0;
FindClose(Arquivo);
end;
end;
procedure TDownloadThread.EnumFiles(szPath, szAllowedExt: String; iAttributes: Integer;
Buffer: TStrings; bClear, bIncludePath: Boolean); StdCall;
var
res: TSearchRec;
szBuff: String;
begin
if (bClear) then Buffer.Clear;
szPath := IncludeTrailingBackslash(szPath);
if (FindFirst(szPath + szAllowedExt, iAttributes, res) = 0) then
begin
repeat
szBuff := res.Name;
if ((szBuff <> '.') and (szBuff <> '..')) then
if (bIncludePath) then
Buffer.Add(szPath + szBuff) else
Buffer.Add(szBuff);
until FindNext(res) <> 0;
FindClose(res);
end;
end;
procedure TDownloadThread.DownloadFTP(Host, Username, Password, RemoteDir, LocalDir: string);
procedure DownloadDirectory(idFTP: TidFTP; Directory: string = '');
var i: integer;
DirListing: TStringList;
IdFTPListItems: TIdFTPListItems;
begin
// update the GUI
Application.ProcessMessages();
// avoid trying to move to and copy current or parent dir
if (Directory = '.') or (Directory = '..') then
exit;
if Directory <> '' then
try
// change to directory remotely
idFTP.ChangeDir(Directory);
// create and change to directory locally
CreateDir(Directory);
SetCurrentDir(Directory);
Directory := IncludeTrailingPathDelimiter(Directory);
except
exit;
end;
DirListing := TStringList.Create();
IdFTPListItems := TIdFTPListItems.Create();
try
idFTP.List(DirListing);
IdFTPListItems.LoadList(DirListing);
for i := 0 to IdFTPListItems.Count - 1 do
begin
case IdFTPListItems[i].ItemType of
ditDirectory:
begin
Form1.Memo1.Lines.Add('Processando Diretório ' + IdFTPListItems[i].FileName);
DownloadDirectory(idFTP, IdFTPListItems[i].FileName);
end;
ditFile:
begin
Form1.Memo1.Lines.Add('Baixando Arquivo ' + IdFTPListItems[i].FileName);
idFTP.Get(IdFTPListItems[i].FileName, IdFTPListItems[i].FileName, true);
end;
end;
end;
if Directory <> '' then
begin
idFTP.ChangeDirUp();
SetCurrentDir('..');
end;
finally
DirListing.Free();
IdFTPListItems.Free();
end;
end;
var idFTP: TIdFTP;
begin
Form1.Memo1.Clear();
idFTP := TIdFTP.Create(nil);
try
idFTP.Host := Host;
idFTP.Username := Username;
idFTP.Password := Password;
idFTP.Connect();
idFTP.ChangeDir(RemoteDir);
ForceDirectories(LocalDir);
SetCurrentDir(LocalDir);
DownloadDirectory(idFTP);
Form1.Memo1.Lines.Add('Concluido');
idFTP.Quit();
finally
idFTP.Free();
end;
end;
procedure TDownloadThread.ClearMemos;
begin
Form1.Memo1.Clear;
Form1.ListBox1.Clear;
end;
procedure TDownloadThread.Principal;
var
pastalocal : string;
f:TextFile;
linha:String;
ii:integer;
nomedolog : string;
begin
pastalocal := ExtractFilePath(Application.ExeName) + '\logs\';
if Form1.cdsIgrejas.Active then
while not Form1.cdsIgrejas.Eof do
Form1.cdsIgrejas.Delete
else
Form1.cdsIgrejas.CreateDataSet;
Form1.cdsIgrejas.Open;
if not DirectoryExists(pastalocal) then
ForceDirectories(pastalocal);
DownloadFTP('ftp.seusite.com.br', 'usuario', 'senha', 'pastaremota', pastalocal); //Pasta Remota é pasta q estão os arquivos TXT, por exemplo, se seu servidor quando é conectado no ftp, ele vem na pasta www, ai você cria uma pasta lá chamada LOGS, e então logs é o nome da sua pasta remota!
EnumFiles(pastalocal, '*.log', faanyfile - faDirectory, Form1.Listbox1.Items, False, False);
Form1.ListBox1.ItemHeight := 0;
for ii:=0 to Form1.ListBox1.Items.Count-1 do
begin
try
nomedolog := Form1.ListBox1.Items.Strings[ii];
AssignFile(f,pastalocal + nomedolog);
Reset(f);
Readln(f,linha);
Form1.cdsIgrejas.Append;
Form1.cdsIgrejas.FieldByName('CODIGO').Value := StrToInt(linha);
Readln(f,linha);
Form1.cdsIgrejas.FieldByName('IGREJA').Text := linha;
Readln(f,linha);
Form1.cdsIgrejas.FieldByName('CIDADE').Text := linha;
Readln(f,linha);
Form1.cdsIgrejas.FieldByName('ESTADO').Text := linha;
Readln(f,linha);
Form1.cdsIgrejas.FieldByName('HORA').Text := linha;
Readln(f,linha);
Form1.cdsIgrejas.FieldByName('VERSAO').Text := linha;
Readln(f,linha);
Form1.cdsIgrejas.FieldByName('SISTEMA').Text := linha;
Form1.cdsIgrejas.Post;
finally
Closefile(f);
end;
end;
Form1.Label21.Caption := 'No Momento Existem ' + IntToStr(Form1.ListBox1.Items.Count) + ' Igrejas Utilizando nossos Sistemas';
if Form1.cdsIgrejas.IsEmpty then
ShowMessage('No Momento ninguém está Utilizando Nossos Sistemas!');
end;
procedure TDownloadThread.Execute;
var
pastalocal : string;
begin
pastalocal := ExtractFilePath(Application.ExeName) + 'logs\';
ApagaPasta(pastalocal);
Synchronize(ClearMemos);
Synchronize(PRINCIPAL);
end;
end.
Agora, Votando ao Form1
Pego o ClientDataSet e o DataSource, e alterei o nome para, cdsIgrejas, e dtsIgrejas, respectivamente, va no DataSource e na propriedade DataSet, coloque o seu ClientDataSet.
Agora, clique no seu ClientDataSet no objeto Fields, com o botão direito clique em New Field...
Adicione um field chamado CODIGO do tipo INTEGER, agora adicione + 6 Fields do tipo String, na seguinte Ordem, IGREJA, tamanho 50, CIDADE, tamanho 30, ESTADO, tamanho 2, (HORA, tamanho 10, e tipo TIME), Versão, Tamanho 10, Sistema, tamanho 15.
Campos Criados, vamos prosseguir!
Salve todo o Projeto. Vá até a pasta do seu projeto, Copie o Arquivo ThreadDownload.pas, e coloque o na seguinte pasta: C:\Arquivos de Programas\Borland\Delphi7\Lib\
Depois de ter feito isso, abra o seu Form1 novamente, e e nas Uses Globais, declare DownloadThread, ou o nome da Thread que você colocou na pasta LIB.
Após ter feito isso você terá que declarar isso em Private:
private
download : TDownloadThread;
public
{ Public declarations }
end;
e no botão baixar coloque esse codigo no OnClick
download:=TDownloadThread.Create(false);
download.Priority:=tpNormal;
download.FreeOnTerminate:=true;
Falta uma coisa importante..
Vá até o DBGrid, na propriedade DataSource, selecione seu DataSource, logo após de 2 cliques no DBGrid, irá aparecer o editor de colunas, clique no botãozinho amarelo, escrito Add New, e adicione 7 Colunas!, vá na primeira coluna, e em FieldName, coloque Código, e nas outras colunas Siga esta Ordem...
IGREJA, CIDADE, ESTADO, HORA, VERSAO, SISTEMA.
Adicione um Label1, e renomeie ele para Label21.
e escreva no caption dele: No Momento ninguém está Utilizando Nossos Sistemas!
Agora vá no bloco de notas, e cole este texto
247
IGREJA DO SCRIPT BRASIL
SÃO PAULO
SP
12:28:58
6.5.1.6
FTP CLIENT
em seguida salve como 247.log
Carregue em seu Site! na pasta www, la você cria uma pasta chamada "logs", e em seguida coloque este arquivo la!
feito isso, vá ate a TDownloadThread, e altere essa linha conforme seus dados
DownloadFTP('ftp.seusite.com.br', 'usuario', 'senha', 'pastaremota', pastalocal); //Pasta remota altere para "logs", lembra que criou pasta logs la no seu ftp?! e em pasta local você decide o caminho local do seu computador!!!!
Aproveitem!!!
Vejam como Ficou!
Este foi meu Primeiro Tutorial, não está muito bom!!!, Duvidas, é só Perguntar!!!!!
Vlw Galera!!!
Editado por Jonathan Queiroz Adicionar tag's (Jonathan)
Pergunta
Douglas Soares
Olá Pessoal, este é o meu primeiro post Tutorial aqui no Script Brasil, vou tentar passar para vocês, um jeito de ler um arquivo texto que foi baixado de um FTP, e Preencher um DBGrid com ele...
Primeiramente... Abra o Delphi ( :lol: ) EHEH! > Clique em File>New>Application
Adicione um Componente DBGrid, que fica na paleta DataControls, (é o primeiro icone da paleta), depois disso, adicione um componente ListBox emcima dele, (O ListBox para quem não sabe, fica na paleta Standar), e em seguida adicione um Memo, que fica na mesmo Paleta!
Acrescente um BitBtn em Baixo do DBGrid, e no Caption pode Colocar como Baixar, ou qualquer coisa.....
Adicione um ClientDataSet, e um DataSource (Paleta Data Acess.)
E por ultimo, adicione um IdFTP, na paleta Indy Clients!
Vai ficar mais ou menos assim!
Salve o Projeto!
Clique em File>New>Other, e selecione uma Thread Object, e em ClassName coloque TDownloadThread
Vamos ao código da Thread!
Agora, Votando ao Form1 Pego o ClientDataSet e o DataSource, e alterei o nome para, cdsIgrejas, e dtsIgrejas, respectivamente, va no DataSource e na propriedade DataSet, coloque o seu ClientDataSet. Agora, clique no seu ClientDataSet no objeto Fields, com o botão direito clique em New Field... Adicione um field chamado CODIGO do tipo INTEGER, agora adicione + 6 Fields do tipo String, na seguinte Ordem, IGREJA, tamanho 50, CIDADE, tamanho 30, ESTADO, tamanho 2, (HORA, tamanho 10, e tipo TIME), Versão, Tamanho 10, Sistema, tamanho 15. Campos Criados, vamos prosseguir! Salve todo o Projeto. Vá até a pasta do seu projeto, Copie o Arquivo ThreadDownload.pas, e coloque o na seguinte pasta: C:\Arquivos de Programas\Borland\Delphi7\Lib\ Depois de ter feito isso, abra o seu Form1 novamente, e e nas Uses Globais, declare DownloadThread, ou o nome da Thread que você colocou na pasta LIB. Após ter feito isso você terá que declarar isso em Private:e no botão baixar coloque esse codigo no OnClick
download:=TDownloadThread.Create(false);
download.Priority:=tpNormal;
download.FreeOnTerminate:=true;
Falta uma coisa importante..
Vá até o DBGrid, na propriedade DataSource, selecione seu DataSource, logo após de 2 cliques no DBGrid, irá aparecer o editor de colunas, clique no botãozinho amarelo, escrito Add New, e adicione 7 Colunas!, vá na primeira coluna, e em FieldName, coloque Código, e nas outras colunas Siga esta Ordem...
IGREJA, CIDADE, ESTADO, HORA, VERSAO, SISTEMA.
Adicione um Label1, e renomeie ele para Label21.
e escreva no caption dele: No Momento ninguém está Utilizando Nossos Sistemas!
Agora vá no bloco de notas, e cole este texto
em seguida salve como 247.log
Carregue em seu Site! na pasta www, la você cria uma pasta chamada "logs", e em seguida coloque este arquivo la!
feito isso, vá ate a TDownloadThread, e altere essa linha conforme seus dados
DownloadFTP('ftp.seusite.com.br', 'usuario', 'senha', 'pastaremota', pastalocal); //Pasta remota altere para "logs", lembra que criou pasta logs la no seu ftp?! e em pasta local você decide o caminho local do seu computador!!!!
Aproveitem!!!
Vejam como Ficou!
Este foi meu Primeiro Tutorial, não está muito bom!!!, Duvidas, é só Perguntar!!!!!
Vlw Galera!!!
Editado por Jonathan QueirozAdicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.