Arquivos | Delphi RSS for this section

Trabalhando em modo desconectado com UniDAC

Modo desconectado é uma forma de se tralhar com banco de dados sem manter a conexão  FULL TIME aberta ou seja, a conexão é aberta somente no momento em quem uma transação é requerida e fechada imediatamente apos a transação ser concluída.

Em sistemas onde a aplicação é divida em 3 ou mais camadas, esse tipo de transação é muito utilizado, como em php, onde a conexão é aberta somente no momento da execução do script logo apos é encerrada e o servidor web é desconectado do banco de dados.

Quando trabalhamos com Delphi não temos esse conceito, pois a aplicação se mantem conectada durante toda o tempo em que o sistema persiste em memória, mantendo um conexão aberta para cada instancia da aplicação,

Quando se tem o numero necessário de licenças de banco de dados, isso não é problema, mas quando esse numero de licenças é limitado, e teremos mais clientes conectadas ao bando do que licenças adquiridas, trabalhar em modo desconectado se torna uma boa opção.

para usarmos esse processo com unidac devemos setar:

TCustomDAConnection.Close ou TCustomDAConnection.Disconnect
TCustomDAConnection.Options.DisconnectedMode para True.

pronto, agora as conexões são abertas e fechadas automaticamente, o que permite que o próximo usuário concorrente posa usar a mesma licença de banco de dados.

mas lembre-se que caso o sistema abra a conexão explicitamente com TCustomDAConnection.Open ou TCustomDAConnection.Connect

a conexão ficara aberta;
Mais informações podem ser lidas em:  http://www.devart.com/sdac/docs/index.html?work_disconnectmode.htm

Exportar um TcxDBPivotGrid para Excel

esse é curtinho:

add a Uses cxExportPivotGridLink, Winapi.ShellAPI;

crie a procedure:

procedure ExportarParaExcel()
begin
try
if dlgSalvar.Execute() then
begin

cxExportPivotGridToExcel(dlgSalvar.FileName, pivFluxo);

if Application(‘Deseja visualizar o arquivo’, ‘Exportação’, mbYesNo) = mryes then
begin
ShellExecute(Handle, ‘open’, pchar(dlgSalvar.FileName), nil, nil, SW_SHOW);
end;
end;
except
on E: Exception do
ShowMessage(‘Ocorreram erros na exportação: ‘ + sLineBreak + E.Message);
end;

End;

Exportar um TcxDBTreeList para Excel

Olá

Nesse post vou demonstrar como exportar registro de um grid para um arquivo do tipo .XLS

add a uses

cxTLExportLink, Winapi.ShellAPI;

crie a procedure:

procedure ExportarParaExcel()
begin
cxExportTLToExcel(‘grid.xls’, dbeBalancete, True, True, True);
ShellExecute(Handle, ‘open’, pchar(‘grid.xls’), nil, nil, SW_SHOW);
End;

dica rápida: Exportar tcxGrid para excel

Olá

Nesse post vou demonstrar como exportar registro de um grid para um arquivo do tipo .XLS

add a uses

cxGridExportLink, Winapi.ShellAPI;

crie a procedure:

procedure ExportarParaExcel()
begin
ExportGridToXLS(‘grid.xls’,Grade, False);
ShellExecute(Handle, ‘open’, pchar(‘grid.xls’), nil, nil, SW_SHOW);
End;

tente também:

  ExportGridToHTML();
      ExportGridToFile();
      ExportGridToXML();
      ExportGridToText();
      ExportGridToXLSX();

Como chamar o arquivo de ajuda no Delphi XE2

Olá, mais uma dica para ajudar ao meus queridos alunos.

No Delphi XE2 temos uma classe para chamar arquivos de ajuda tipo chm

para isso addicione Vcl.HtmlHelpViewer a Uses do programa.
e no evento keypress do form chame o helpcontext da applicação

veja o exemplo

——————————————————————————

unit UntHelp;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Vcl.HtmlHelpViewer;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.HelpFile := ‘help.chm'; // o arquivo de ajuda deve estar no mesmo diretório do executável
   KeyPreview:= True;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key = VK_F1 then
  begin
    Application.HelpContext(50);
  end;
end;

end.

Chamar um HTMLHelp (.chm)

Tem coisas que a Borland, Codegear ou  Embarcadeiro abandonam, e as funções de integração de novos help são uma telas
para ajudar a chamar o help vou postar um exemplo tirado do arquivo de dicas de help de como chamar um help com extensão chm.

procure no seu computador a OCX hhctrl.ocx, caso não a encontre baixeo arquivo aqui e salve no diretório c:\windows\System32 ou na pasta do seu executável.

No formulário principal, logo após o primeiro uses da seção Interface, defina :

function HtmlHelp(hwndCaller: THandle; pszFile: PChar; uCommand:  cardinal;
                  dwData: longint): THandle; stdcall; external 'hhctrl.ocx' name 'HtmlHelpA' ;

No OnCreate do formulário principal faça o seguinte :

Application.OnMessage := ChamaHelp ;

Agora é só usar essa procedure

procedure TfrmPrincipal.ChamaHelp(var Msg: TMsg; var Handled: Boolean);
begin
   if  (Screen.ActiveForm.ClassName = 'TMessageForm') = false then
      if  Msg.message = WM_KEYDOWN then
         if  Msg.wParam = VK_F1 then
             HtmlHelp(Screen.ActiveForm.Handle,  PChar(Arquivo_de_Help.chm), 
                      $F, Screen.ActiveForm.HelpContext ) ;
end;

Pronto. Ao apertar a tecla F1 em qualquer parte do projeto o help será chamado, desde que o no formulário ativo, onde for pressionada o F1 a propriedade HelpContext esteja preenchida.

Importante:

Não coloque o nome do arquivo de help no Project>Options>HelpFile, nem no Application.HelpFile, pois ao pressionar F1 a aplicação tentará carregar o Htmlhelp (.CHM) que estiver lá , gerando uma exception pois o formato CHM não é suportado pelo Delphi .

Backup no Mysql com Delphi – Segunda Parte

O Mysql é uma ótima ferramenta para gerenciamento de banco de dados e funciona muito bem com Delphi, mas sinto falta de um componente simples para execução do backup.

Seria muito fácil fazer um backup apenas copiando os  arquivos da pasta “Data” do banco mysql, como se faz com programas e pastas do computador, porem nos temos um problema quando tentamos copiar a pasta de dados, pois os arquivos estão em uso pelo servido do banco, para copiar os arquivos, poderíamos usar os comandos net use, parar o serviço, copiar o banco e iniciar  o serviço novamente.

Esse tipo de backup tem que ser feito em horários em que o sistema não esteja em funcionamento, pois o banco fica  indisponível.

Mas nossos sistema também devem ter rotinas que permitam que o backup seja feito a qualquer momento. para isso recomendo a leitura de um post anterior de como usar o utilitário MyDump.exe  antes de prosseguir.

http://soprogramando.wordpress.com/2008/08/01/backup-no-mysql/

lembrando que o MyDump.exe está nos binários da instalação do Mysql e deve ser copiado onde o executável está instalado, e deve ser executado por parâmetros via comando.

veja um exemplo de uma função do backup.

private 
 { Private declarations }
 procedure ExecutaBackupBD();
  function ExecutarProcesso(cmd: string): Boolean;
implementation
procedure TFrmManBackup.ExecutaBackupBD;
var
   strBanco, strHost, strUsuario, strSenha, strComando, strCaminho, strArquivo: string;
begin
   try 
      strCaminho := ExtractFilePath(Application.ExeName) + 'backup\';
      if not DirectoryExists(strCaminho) then
      begin
         CreateDir(strCaminho);
      end;
      if FileExists(ExtractFilePath(Application.ExeName) + 'mysqldump.exe') then
      begin
          strArquivo := strCaminho + 'BD_' + FormatDateTime('YYYY-mm-dd_hhnnss', Now) + '.sql';
         strHost := 'Servidor';
         strUsuario :='Usuario';
         strSenha := 'Senha';
         strBanco := 'Banco';
        strComando := 'cmd.exe /c ""' + 
                       ExtractFilePath(Application.ExeName) +
                       '\mysqldump.exe" ' + strBanco +
                       ' -h' + strHost +
                       ' -u' + strUsuario +
                       ' -p' + strSenha + 
                       ' --databases --opt -c -e ' + 
                       '>' + '"' +
                       strArquivo + '""';
        ExecutarProcesso(strComando);
      end
      else
      begin
         ShowMessage('Atenção o aplicativo auxiliar mysqldump não se encontra no diretório, ' +
                     'solicite o mesmo ao suporte do sistema ');
      end;
   finally
      FreeAndNil(Ini);
   end;
end;
function TFrmManBackup.ExecutarProcesso(cmd: string): Boolean;
var
 SUInfo : TStartupInfo;
 ProcInfo: TProcessInformation;
begin
 FillChar(SUInfo, SizeOf(SUInfo), #0);
 SUInfo.cb := SizeOf(SUInfo);
 SUInfo.dwFlags := STARTF_USESHOWWINDOW;
 SUInfo.wShowWindow := SW_HIDE;
 Result := CreateProcess(nil, PChar(cmd), nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
if (Result) then
 begin
 WaitForSingleObject(ProcInfo.hProcess, INFINITE);
 CloseHandle(ProcInfo.hProcess);
 CloseHandle(ProcInfo.hThread);
 end;
end;
Colaboração Andre Langner
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 553 outros seguidores