procedure TForm1.Button1Click(Sender: TObject); var A,B,C,D,R1,R2:double; begin try A := strtofloat(edta.Text); B := strtofloat(edtB.Text); C := strtofloat(edtC.Text); if A <> 0 then begin D := (B*B)-(4*A*C); if D >= 0 then begin R1 := ((-1*B)+SQRT(D))/(2*A); R2 := ((-1*B)-SQRT(D))/(2*A); EDTR.Text := FloatToStr(R1); EDTR2.Text := FloatToStr(R2); { // exibir resultado em outro form final.Edit1.Text := FloatToStr(R1); final.Show; } end else begin ShowMessage('Erro na operação!! Delta menor que zero.'); end; end else begin ShowMessage('Valor de A deve ser diferente de zero (0).'); end; except on e:exception do ShowMessage(e.message); end; end;
Baskara Delphi
Programinha pra calcular Baskara no Delphi, tarefa de aula, vale compartilhar :D.
Criação de um Sistema no Delphi com Firebird
Olá, após um bom período de férias, as aulas da faculdade estão de volta e me lembrei que ficou tarefa do semestre passado pra fazer aqui no blog, mostrar como fazer um sistema utilizando Firebird no Delphi, rapidamente vou explicar como fazer uma tela de manutenção de uma tabela de Cidades, não é o mesmo BD do sistema de viagens mas o processo é o mesmo para todas as tabelas.
- Primeiramente abra o Delphi e crie um File -> New -> VCL Forms Application.
- Depois em File -> Save Project As ..., salve como "untPrincipal" e de um nome para o projeto, pode ser "Cidades", salve.
- Altere o Caption do Form para "Manutenção de Cidades" e o name para frmCidades. CTRL + S para salvar.
- Crie um Data Module em File -> New -> Other ..., selecione Data Module, OK.
- Neste Data Module, adicione o componente SQLConnection da paleta dbExpress para conectarmos ao nosso banco Firebird (como criar foi ensinado no outro post).
- Dê um duplo clique sobre o componente para abrir as opções.
- No driver name selecione Interbase.
- Na Key DataBase você coloca o caminho até o seu arquivo *.fdb, o banco de dados, se você salvar a aplicação no mesmo diretório que está o banco de dados pode colocar apenas o nome do arquivo.fdb, isto vai evitar problemas quando você for tentar usar o sistema em outro computador (terá que ter o banco no mesmo caminho).
- Na key ServerCharSet coloque "WIN1252" para que o sistema aceite acentos do português.
- Verifique se o User_Name, Password e SQLDialect estão corretos.
- Se quiser pode testar a conexão clicando no quarto botão bem em cima, vai pedir a senha (masterkey), se tudo der certo vai receber a mensagem "Successfully Connected".
- Clique em OK, altere a propriedade LoginPrompt do SQLConnection para false, isso faz com que ele deixe de perguntar a senha toda vez que você for abrir uma conexão com o banco.
- Altere a propriedade Name do DataModule para "DM".
- CTRL+ S para salvar, chame a Unit de "untDM".
Até aqui criamos um novo projeto, um formulário para a manutenção de cidades, um data module para separar a parte de conexão com o banco das telas de manutenção e criamos a conexão. Agora vamos fazer o processo que será igual para todos as "tabelas básicas" do banco que precisam apenas uma tela para inserir, alterar, excluir e consultar os dados (que eu chamo de manutenção).
- Adicione três componentes no DM (Data Module), um SQLDataSet, um DataSetProvider e um ClientDataSet, para cada tabela terá que ter estes 3 componentes.
- Selecione o SQLDataSet e altere a propriedade SQLConnection, selecione nosso componente de conexão SQLConnection1.
- Na propriedade CommandText vai aparecer "..." quando colocar o cursor do mouse dentro, clique nos pontinhos (...) para abrir o CommandText Editor, nele vão aparecer as tabelas do banco de dados e os campos de cada tabela, selecione a tabela que você está fazendo a manutenção, aqui é "CIDADE" e clique no botão "Add Table to SQL", depois em "Add Field do SQL", isso vai montar uma SQL de consulta dos dados, ex.: "select * from CIDADE", depois clique em OK.
- Selecione o DataSetProvider1 e altere a propriedade DataSet, selecione o SQLDataSet1.
- Selcione o ClientDataSet1 e altere a propriedade ProviderName, selecione o DataSetProvider1.
- Ative o ClientDataSet1 (propriedade Active = true).
- Duplo clique no ClientDataSet1 para abrir o Fields Editor, clique com o botão direito dentro do field Editor e depois em "Add all fields" ou "CTRL + F" para adicionar todos os campos da tabela.
- É interessante renomear os componentes para ficar fácil a identificação quando tiver que fazer pra todas as tabelas, de preferência antes de começar alterar as propriedades dos componentes, neste caso só vou fazer de uma então pulei esta parte.
- Deixe o Fields Editor do ClientDataSet1 aberto e volte para o frmCidades (untPrincipal).
- Selecione todos os fields e arraste eles para dentro do frmCidades, vai pedir uma confirmação para usar o form DM ou algo semelhante, clique em "Yes". Vão ser criados os Edits e Labels conforme os fields da tabela e um DataSource.
- Adicione no formulário o componente DBNavigator e altere a propriedade DataSource, selecione DataSource1.
- Adicione também o componente DBGrid e também altere sua propriedade DataSource para DataSource1. Neste momento já deve trazer os dados do banco (se tiver algo cadastrado), caso não traga nada e estes componentes fiquem "desativados", sem as funções, verifique no DM se o ClientDataSet está com a propriedade Active = true.
- Adicione também um Button, pode ser ao lado do DBNavigator, altere a propriedade Caption para "Salvar" ou "Gravar", de um duplo clique sobre o Button e então vamos digitar o código responsável por fazer com que os dados alterados ou inseridos realmente sejam salvos no banco, antes adicione nas uses o DM, para isso pressione "Alt + F11", selecione a unitDM e OK, agora sim o código para salvar:
- Pressione "F12" para voltar ao modo Design.
Pronto, a tela deve ter ficado parecida com a imagem abaixo.
- CTRL + Shift + S para salvar tudo.
- CTRL + F9 para compilar.
- F9 para compilar e executar a aplicação com Debbuger, ou
- CTRL + Shift + F9 para compilar e executar sem Debug (mais rápido)
A aplicação funcionando.
Bom pessoal, minha aula está acabando e vou ficando por aqui, no futuro escreverei um post mostrando como fazer um menu na aplicação e também telas de manutenção em tabelas que tem chaves estrangeiras (usar lookup).
Até.
- Primeiramente abra o Delphi e crie um File -> New -> VCL Forms Application.
- Depois em File -> Save Project As ..., salve como "untPrincipal" e de um nome para o projeto, pode ser "Cidades", salve.
- Altere o Caption do Form para "Manutenção de Cidades" e o name para frmCidades. CTRL + S para salvar.
- Crie um Data Module em File -> New -> Other ..., selecione Data Module, OK.
- Neste Data Module, adicione o componente SQLConnection da paleta dbExpress para conectarmos ao nosso banco Firebird (como criar foi ensinado no outro post).
- Dê um duplo clique sobre o componente para abrir as opções.
- No driver name selecione Interbase.
- Na Key DataBase você coloca o caminho até o seu arquivo *.fdb, o banco de dados, se você salvar a aplicação no mesmo diretório que está o banco de dados pode colocar apenas o nome do arquivo.fdb, isto vai evitar problemas quando você for tentar usar o sistema em outro computador (terá que ter o banco no mesmo caminho).
- Na key ServerCharSet coloque "WIN1252" para que o sistema aceite acentos do português.
- Verifique se o User_Name, Password e SQLDialect estão corretos.
- Se quiser pode testar a conexão clicando no quarto botão bem em cima, vai pedir a senha (masterkey), se tudo der certo vai receber a mensagem "Successfully Connected".
- Clique em OK, altere a propriedade LoginPrompt do SQLConnection para false, isso faz com que ele deixe de perguntar a senha toda vez que você for abrir uma conexão com o banco.
- Altere a propriedade Name do DataModule para "DM".
- CTRL+ S para salvar, chame a Unit de "untDM".
Até aqui criamos um novo projeto, um formulário para a manutenção de cidades, um data module para separar a parte de conexão com o banco das telas de manutenção e criamos a conexão. Agora vamos fazer o processo que será igual para todos as "tabelas básicas" do banco que precisam apenas uma tela para inserir, alterar, excluir e consultar os dados (que eu chamo de manutenção).
- Adicione três componentes no DM (Data Module), um SQLDataSet, um DataSetProvider e um ClientDataSet, para cada tabela terá que ter estes 3 componentes.
- Selecione o SQLDataSet e altere a propriedade SQLConnection, selecione nosso componente de conexão SQLConnection1.
- Na propriedade CommandText vai aparecer "..." quando colocar o cursor do mouse dentro, clique nos pontinhos (...) para abrir o CommandText Editor, nele vão aparecer as tabelas do banco de dados e os campos de cada tabela, selecione a tabela que você está fazendo a manutenção, aqui é "CIDADE" e clique no botão "Add Table to SQL", depois em "Add Field do SQL", isso vai montar uma SQL de consulta dos dados, ex.: "select * from CIDADE", depois clique em OK.
- Selcione o ClientDataSet1 e altere a propriedade ProviderName, selecione o DataSetProvider1.
- Ative o ClientDataSet1 (propriedade Active = true).
- Duplo clique no ClientDataSet1 para abrir o Fields Editor, clique com o botão direito dentro do field Editor e depois em "Add all fields" ou "CTRL + F" para adicionar todos os campos da tabela.
- É interessante renomear os componentes para ficar fácil a identificação quando tiver que fazer pra todas as tabelas, de preferência antes de começar alterar as propriedades dos componentes, neste caso só vou fazer de uma então pulei esta parte.
- Deixe o Fields Editor do ClientDataSet1 aberto e volte para o frmCidades (untPrincipal).
- Selecione todos os fields e arraste eles para dentro do frmCidades, vai pedir uma confirmação para usar o form DM ou algo semelhante, clique em "Yes". Vão ser criados os Edits e Labels conforme os fields da tabela e um DataSource.
- Adicione no formulário o componente DBNavigator e altere a propriedade DataSource, selecione DataSource1.
- Adicione também o componente DBGrid e também altere sua propriedade DataSource para DataSource1. Neste momento já deve trazer os dados do banco (se tiver algo cadastrado), caso não traga nada e estes componentes fiquem "desativados", sem as funções, verifique no DM se o ClientDataSet está com a propriedade Active = true.
- Adicione também um Button, pode ser ao lado do DBNavigator, altere a propriedade Caption para "Salvar" ou "Gravar", de um duplo clique sobre o Button e então vamos digitar o código responsável por fazer com que os dados alterados ou inseridos realmente sejam salvos no banco, antes adicione nas uses o DM, para isso pressione "Alt + F11", selecione a unitDM e OK, agora sim o código para salvar:
procedure TfrmCidades.Button1Click(Sender: TObject); begin DM.ClientDataSet1.ApplyUpdates(0); end;
- Pressione "F12" para voltar ao modo Design.
Pronto, a tela deve ter ficado parecida com a imagem abaixo.
- CTRL + F9 para compilar.
- F9 para compilar e executar a aplicação com Debbuger, ou
- CTRL + Shift + F9 para compilar e executar sem Debug (mais rápido)
A aplicação funcionando.
Bom pessoal, minha aula está acabando e vou ficando por aqui, no futuro escreverei um post mostrando como fazer um menu na aplicação e também telas de manutenção em tabelas que tem chaves estrangeiras (usar lookup).
Até.
Primeiros Comandos no Oracle
Primeiras aulas de BD (Oracle), achei interessante os comandos de criar usuário e dar permissão.
- Criar novo usuário: CREATE USER NOMEUSUARIO IDENTIFIED BY SENHAAQUI DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
- Dar permissões para este usuário se logar e criar tabela etc: GRANT CONNECT, RESOURCE TO NOMEUSUARIO;
- Criar tabela: CREATE TABLE TABELATESTE (CAMPONUMERO NUMBER, CAMPOTEXTO VARCHAR(50));
Ok, daqui uns dias faço algum post decente, no momento se contentem com isso e com este outro post sobre JDeveloper, agora ando meio ocupado estudando 14 horas por dia (PROVA ANCOR PELA FRENTE + FACULDADE = LOGO_DESCOBRIREMOS).
Até!
- Criar novo usuário: CREATE USER NOMEUSUARIO IDENTIFIED BY SENHAAQUI DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
- Dar permissões para este usuário se logar e criar tabela etc: GRANT CONNECT, RESOURCE TO NOMEUSUARIO;
- Criar tabela: CREATE TABLE TABELATESTE (CAMPONUMERO NUMBER, CAMPOTEXTO VARCHAR(50));
Ok, daqui uns dias faço algum post decente, no momento se contentem com isso e com este outro post sobre JDeveloper, agora ando meio ocupado estudando 14 horas por dia (PROVA ANCOR PELA FRENTE + FACULDADE = LOGO_DESCOBRIREMOS).
Até!
Usando a calculadora HP 12c
Olá pessoal, estou fazendo um curso de matemática financeira com uso da calculadora HP 12c através da XP Educação em Três de Maio - RS, durante o curso estou anotando algumas dicas que compartilho abaixo.
Tecla ON + X = testa a calculadora, exibe todas as funções menos o *, que significa que devemos trocar a bateria ou pilha.
Com a calculadora desligada pressione a tecla PONTO (.) + ON para configurar ponto ou vírgula para separar os inteiros dos decimais.
Para definir o número de casas decimais usar a tecla f + número de casas desejadas.
A calculadora trabalha com sistema de pilhas, por isso primeiro informamos os valores e depois as operações.
CLX apaga somente último valor registrado
FIN faz a limpeza de todos os registros de cálculo financeiro.
REG faz a limpeza dos outros registradores.
CHS serve para tornar um número positivo negativo ou um número negativo para positivo.
Para trabalhar com funções de data precisamos configurar 6 casa decimais, f + 6.
STO + EEX serve para exibir/ocultar o C ao lado direito da tela, quando ele está aparecendo é porque vai guardar números de períodos fracionários, senão apenas períodos inteiros.
f + ponto (.) para ativar notação científica quando vamos trabalhar com números muito grandes.
f + 2 para desativar a notação científica.
CF0 = Fluxo de Caixa Inicial
CFj = Diferentes Fluxos de Caixa no período
Nj = Fluxos de caixa iguais, repetidos em seqüência...
NPV = Determinar o valor a vista (Valor presente líquido)
Para trabalharmos com datas devemos usar 6 casas decimais, f + 6
Tecla ON + X = testa a calculadora, exibe todas as funções menos o *, que significa que devemos trocar a bateria ou pilha.
Com a calculadora desligada pressione a tecla PONTO (.) + ON para configurar ponto ou vírgula para separar os inteiros dos decimais.
Para definir o número de casas decimais usar a tecla f + número de casas desejadas.
A calculadora trabalha com sistema de pilhas, por isso primeiro informamos os valores e depois as operações.
CLX apaga somente último valor registrado
FIN faz a limpeza de todos os registros de cálculo financeiro.
REG faz a limpeza dos outros registradores.
CHS serve para tornar um número positivo negativo ou um número negativo para positivo.
Para trabalhar com funções de data precisamos configurar 6 casa decimais, f + 6.
STO + EEX serve para exibir/ocultar o C ao lado direito da tela, quando ele está aparecendo é porque vai guardar números de períodos fracionários, senão apenas períodos inteiros.
f + ponto (.) para ativar notação científica quando vamos trabalhar com números muito grandes.
f + 2 para desativar a notação científica.
CF0 = Fluxo de Caixa Inicial
CFj = Diferentes Fluxos de Caixa no período
Nj = Fluxos de caixa iguais, repetidos em seqüência...
NPV = Determinar o valor a vista (Valor presente líquido)
Para trabalharmos com datas devemos usar 6 casas decimais, f + 6
Criando/Baixando/Listando/Apagando Arquivos no Delphi ASP.NET
Olá pessoal!
Hoje vou mostrar como criar arquivos .txt ou .sql com Delphi ASP.NET em tempo de execução a partir de uma string qualquer, gravar estes arquivos no servidor e descer para o usuário, também vou mostrar como listar os arquivos gerados, apagar e ler os dados de cada arquivo, recomendo a leitura do artigo Trabalhando com Diretórios e Arquivos do Blog Geeks .NET, lá o meu colega Mateus Chies já demonstrou algumas dessas funções da classe System.IO.
Bom, neste exemplo temos uma página que executa SQL diretamente no banco e exibe os resultados em uma gridView, após isso temos uma função que pega estes dados e gera um arquivo SQL com comandos para inserir (INSERT INTO ...) e disponibiliza o arquivo .SQL pra download, vamos primeiramente fazer a procedure que gera a SQL a partir de um dataset e grava o arquivo no servidor.
Bom, no código acima ficou bem comentado o que cada parte faz, então vamos para o próximo passo, exibir os arquivos gerados em uma grid e também ter a opção de exibir o conteúdo dos arquivos em um textBox, excluir os arquivos ou fazer o download novamente.
Exibir os arquivos de um diretório é fácil como você já viu no post od Geeks .NET, mas aquele exemplo temos um problema, ele exibe o caminho completo do arquivo no servidor mas nós queremos ver apenas os nomes dos arquivos, então veja como ficou a procedure abaixo:
Ok, você pode notar que jogamos os nomes dos arquivos dos diretórios na coluna (Cells) 3 da grid, isto porque já temos as funções de ler, excluir e baixar nas três primeiras colunas da grid, veja o código da grid, tire os espaços nas tags.
Agora já sabemos criar os arquivos, exibir eles em uma grid, vamos a parte de ler e e excluir os arquvos existentes, para isso vamos implementar as funções para cada botão da grid, fazemos isto no evento RowCommand, veja código abaixo:
Bom pessoal, basicamente é isto ai, não mostrei como faz .txt né, é só trocar o final do nome do arquivo (Extensão) de .sql para .txt e pronto. Espero que seja útil, hoje também fiz um post no Geeks mostrando como exportar dados de uma grid para o Excel, pode ser muito útil em alguns casos, normalmente o usuário pede também...
Agradecimentos ao Tiago Pasieka que começou a página que me motivou fazer estas funções, valeuu!!
Até!
Hoje vou mostrar como criar arquivos .txt ou .sql com Delphi ASP.NET em tempo de execução a partir de uma string qualquer, gravar estes arquivos no servidor e descer para o usuário, também vou mostrar como listar os arquivos gerados, apagar e ler os dados de cada arquivo, recomendo a leitura do artigo Trabalhando com Diretórios e Arquivos do Blog Geeks .NET, lá o meu colega Mateus Chies já demonstrou algumas dessas funções da classe System.IO.
Bom, neste exemplo temos uma página que executa SQL diretamente no banco e exibe os resultados em uma gridView, após isso temos uma função que pega estes dados e gera um arquivo SQL com comandos para inserir (INSERT INTO ...) e disponibiliza o arquivo .SQL pra download, vamos primeiramente fazer a procedure que gera a SQL a partir de um dataset e grava o arquivo no servidor.
procedure TExemplo.GerarSQLInsert(ds:dataset); var C,R: Integer; sql: StringBuilder; caminho, arquivo:string; arq: System.IO.FileInfo; dir: System.IO.Directory; stream: System.IO.StreamWriter; begin {$REGION 'Cria SQL Insert'} sql := StringBuilder.Create; // Inicia transação na banco sql.appendLine('BEGIN TRANSACTION'); sql.appendLine('GO'); sql.AppendLine(''); // Registros Encontrados for R := 0 to ds.Tables[0].Rows.Count - 1 do begin // Inicia comando Insert com Nome da Tabela sql.AppendLine('INSERT INTO '+txbNomeTabela.Text+' ('); // Recupera Campos/Atributos for C := 0 to ds.Tables[0].Columns.Count - 1 do begin // Se não for última coluna precisa vírgula if C <> ds.Tables[0].Columns.Count -1 then sql.AppendLine(ds.Tables[0].Columns.Item[C].ColumnName+', ') else sql.AppendLine(ds.Tables[0].Columns.Item[C].ColumnName); end; // Fecha Atributos sql.AppendLine(') '); // Dado de cada Atributo sql.AppendLine('VALUES ('); for C := 0 to ds.Tables[0].Columns.Count - 1 do begin // Se não for última coluna precisa vírgula if C <> ds.Tables[0].Columns.Count -1 then begin if ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM <> '' then begin // Verifica se o tipo é double if NumeroValido(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM) then sql.AppendLine(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM+', ') else // Se não deve ser string e precisa aspas sql.AppendLine(' '''+ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM+''', '); end else sql.AppendLine('NULL, '); end else begin // Verifica se tem valor if ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM <> '' then begin // Verifica se o tipo é double if NumeroValido(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM) then sql.AppendLine(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM) else // Se não deve ser string e precisa aspas sql.AppendLine(' '''+ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM+''' '); end else sql.AppendLine('NULL'); end; end; // Fecha Dados sql.AppendLine(')'); sql.AppendLine('GO'); sql.AppendLine(''); end; sql.AppendLine(''); // Encerra transação e grava registros sql.appendLine('COMMIT'); sql.appendLine('GO'); {$ENDREGION} // Exibe // lblScript.Text := sql.ToString; {$REGION 'Cria Arquivo SQL Insert e Desce para o Usuário'} try caminho := Server.MapPath('.')+'\SQL\'; arquivo := 'SQL_INSERT_'+txbNomeTabela.Text+'.sql'; // verifica / cria diretório se não existe if dir.Exists(caminho) = False then dir.CreateDirectory(caminho); // cria arquivo arq := System.IO.FileInfo.Create(caminho+arquivo); // Insere SQL no arquivo stream := System.IO.StreamWriter.Create(caminho+arquivo); stream.WriteLine(sql.ToString); stream.Close(); // download do arquivo ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(),'window.open("/SQL/'+arquivo+'","downsql","menubar=no,scrollbars=no,WIDTH=15,HEIGHT=15");', true); except on ex:exception do response.write('Erro durante criação do arquivo. Detalhes: '+ex.message); end; {$ENDREGION} end; // Função que verifica se o número é válido (é um número ou não) function TExemplo.NumeroValido(Numero: String): Boolean; Var N: Double; begin Result := False; try N := Convert.ToDouble(Numero); Result := True; Except Result := False; end; end;
Bom, no código acima ficou bem comentado o que cada parte faz, então vamos para o próximo passo, exibir os arquivos gerados em uma grid e também ter a opção de exibir o conteúdo dos arquivos em um textBox, excluir os arquivos ou fazer o download novamente.
Exibir os arquivos de um diretório é fácil como você já viu no post od Geeks .NET, mas aquele exemplo temos um problema, ele exibe o caminho completo do arquivo no servidor mas nós queremos ver apenas os nomes dos arquivos, então veja como ficou a procedure abaixo:
procedure TExemplo.ListarArquivos; var caminho, na:string; lista: ArrayList; i: integer; begin caminho := Server.MapPath('.'); lista := ArrayList.Create; gvSQL.DataSource := System.IO.Directory.Getfiles(caminho+'\sql'); gvSQL.databind(); for I := 0 to gvSQL.rows.Count - 1 do begin na := gvSQL.Rows.item[i].cells[3].Text; // Substitui o caminho até o diretório dos arquivos por '' -> nada na := na.replace(caminho+'\sql\',''); lista.add(na); end; gvSQL.DataSource := lista; gvSQL.databind(); end;
Ok, você pode notar que jogamos os nomes dos arquivos dos diretórios na coluna (Cells) 3 da grid, isto porque já temos as funções de ler, excluir e baixar nas três primeiras colunas da grid, veja o código da grid, tire os espaços nas tags.
< asp:gridview backcolor="White" bordercolor="#999999" borderstyle="Solid" borderwidth="1px" cellpadding="3" font-size="Small" forecolor="Black" gridlines="Vertical" id="gvSQL" runat="server"> < columns> < asp:buttonfield commandname="LER" text="Carregar">< /asp:buttonfield> < asp:buttonfield commandname="DOWNLOAD" text="Download">< /asp:buttonfield> < asp:buttonfield commandname="EXCLUIR" imageurl="~/imagens/exc.gif" text="Excluir">< /asp:buttonfield> < /columns> < footerstyle backcolor="#CCCCCC">< /footerstyle> < pagerstyle backcolor="#999999" forecolor="Black" horizontalalign="Center">< /pagerstyle> < selectedrowstyle backcolor="#000099" font-bold="True" forecolor="White">< /selectedrowstyle> < headerstyle backcolor="Black" font-bold="True" forecolor="White">< /headerstyle> < alternatingrowstyle backcolor="#CCCCCC">< /alternatingrowstyle> < /asp:gridview>
Agora já sabemos criar os arquivos, exibir eles em uma grid, vamos a parte de ler e e excluir os arquvos existentes, para isso vamos implementar as funções para cada botão da grid, fazemos isto no evento RowCommand, veja código abaixo:
procedure TExemplo.gvSQL_RowCommand(sender: TObject; e: System.Web.UI.WebControls.GridViewCommandEventArgs); var caminho,arquivo:string; arq: System.IO.FileInfo; reader: System.IO.StreamReader; begin // Se o comando é EXCLUIR if e.commandname = 'EXCLUIR' then begin // Pega o caminho até o diretório caminho := Server.MapPath('.')+'\SQL\'; // o Nome do arquivo SQL arquivo := GVSQL.Rows.Item[convert.ToInt32(e.commandargument)].Cells[3].Text; // Cria arquivo arq := System.IO.FileInfo.Create(caminho+arquivo); // Se arquivo existe -> com certeza existe if arq.Exists then arq.Delete; // Deleta // Atualiza Lista dos Arquivos ListarArquivos; end; // Se o comando é para baixar o arquivo -> DOWNLOAD if e.commandname = 'DOWNLOAD' then begin // Pega nome arquivo arquivo := GVSQL.Rows.Item[convert.ToInt32(e.commandargument)].Cells[3].Text; // Redireciona usuário para endereço do arquivo, vai pedir pra baixar... Response.redirect('/SQL/'+arquivo); end; // Se for pra ler -> exibir na textbox conteúdo do arquivo if e.commandname = 'LER' then begin caminho := Server.MapPath('.')+'\SQL\'; arquivo := GVSQL.Rows.Item[convert.ToInt32(e.commandargument)].Cells[3].Text; reader := StreamReader.Create(caminho+arquivo); // Lê arquivo até o fim e joga string para textbox txbSQL.text := reader.ReadToEnd; reader.Close(); end; end;
Bom pessoal, basicamente é isto ai, não mostrei como faz .txt né, é só trocar o final do nome do arquivo (Extensão) de .sql para .txt e pronto. Espero que seja útil, hoje também fiz um post no Geeks mostrando como exportar dados de uma grid para o Excel, pode ser muito útil em alguns casos, normalmente o usuário pede também...
Agradecimentos ao Tiago Pasieka que começou a página que me motivou fazer estas funções, valeuu!!
Até!
Assinar:
Postagens (Atom)