Evitar que o mysql converta o nome das tabelas e o nome do banco de dados para minúsculo.

Oi, mais uma dica interessante do mysql

algumas pessoas, assim como eu, não gostam de um comportamento do mysql no windows,  onde ele converte o nome do banco e o nome de todas as tabelas para minusculo,

lendo o manual encontrei a seguinte linha para ser adicionada ao my.ini

lower_case_table_names = 2

fonte

http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

CategoriasSem categoria

Traduzir as Mensagens do MySQL para o Português

Bom dia, para facilitar a interpretação dos erros gerados pelo mysql é possível configurar o SGBD do mysql para retornar as  mensagem de erro apra  para o portugues

basta modificar o my.ini do mysql e adiconar a linha

#Traduzir as mensagens de erro para o portugues
language=portuguese

Agora basta reiniciar o serviço e as mensagens de erro vão ser exibidas em portugues.

CategoriasMysql Tags:, ,

Como calcular corretamente a divisão de parcelas ou comissao em um sistema.

Ola!

Diariamente vejo pessoas tentando fazer o calculo de divisão de parcelas de vendas para gerar cobranças ou pagamentos de notas e tendo problemas com

divisão com resultados obtidos por dízimas

abaixo vou incluir um procedimento de como calcular a dizima e achar a diferença da dizima para ser incluído na ultima ou na primeira parcela do seu sistema;

procedure Calcular(Sender: TObject);
var
    Total,
    NumeroParcelas,
    PercentualComissaoDentista,
    ValorDivisao,
    ValorComissao,
    ComissaoPeloTotal,
    Diferenca,
    ComissaoPelaParcela:Currency;

    i:Integer;
begin
    Total                           := StrToCurr(EdtValorTotal.text);
    NumeroParcelas                  := StrToCurr(EdtNumeroParcelas.Text);
    PercentualComissaoDentista      := StrToCurr(EdtPercentualComissao.Text);
    //valor da comissao considerando o valor total
    ComissaoPeloTotal:= (Total * PercentualComissaoDentista)/100;
    ValorDivisao:= total / NumeroParcelas;
    ValorComissao:= (ValorDivisao  * PercentualComissaoDentista) / 100;
    //aqui vamos transformar o valor no formato de moeda nacional com apenas 2 casas
    ValorComissao:= (ValorComissao * 100);
    ValorComissao:= Trunc(ValorComissao)/100;

    ComissaoPelaParcela:= (ValorComissao *  NumeroParcelas);
    Diferenca:=  ComissaoPeloTotal - ComissaoPelaParcela;
    ValorComissao:= ValorComissao + Diferenca;
end;

veja aqui um exemplo aplicando essa lógica (Clique aqui para baixar)

qualquer duvidas entre em contato.

abraços a todos os leitores

Como criar arquivos com extensão .ini

Os arquivos INI são um modelo estruturado de escrita, foi  un dos padrões mais usados pela Microsoft em seu sistema operacional windows.

ainda hoje usa-se arquivos ini para criar arquivos de configuração para programas em geral.

E o Delphi possui uma Classe especializada na manipulação desse tipo de arquivo, a TINI.

exemplo do conteudo do arquivo ini:

[seção1]
chave1=valor
chave2=valor
[seção2]
chave1=valor
chave2=valor
chave3=valor

seu uso é muito simples.

para iniciarmos vamos criar um pequeno exemplo onde vamos gravar o o nome do ultimo usuario que fez login em nosso sistema

para isso vamos usar o exemplo de sistema de login que foi criado em aulas anteriores.

no na unit UntLogin adicione a clausula Uses do delphi a palavra “IniFiles ”

no evento OnCreate do Form adicione as informações

procedure TForm1.onCreate(Sender: TObject);
var
   Ini : TIniFile;
begin
   try
        Ini    := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'configuracao.ini');
        EdtNomeCaixaSenha.text := Ini.ReadString('strNomeSessao', 'strNomeChave', 'Informe');
        FreeAndNil(Ini);
    except
        on E: Exception do
        begin
            ShowMessage('ocorreu um erro ao ler o arquivo config.ini, ' + #13 + 'A classe ' + E.ClassName + ' gerou a seguinte mensagem de erro: ' +
                E.Message);
        end;
    end;
end;

//e no botão salvar adicione o seguinte código

procedure TForm1.BtnValidarUsuario(Sender: tobject);
var
    Ini: TIniFile;
begin
    If UsuariValido then
    begin
      try
         Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'configuracao.ini');
         Ini.WriteString('strNomeSessao', 'strNomeChave', EdtNomeUsuario.Text);
         FreeAndNil(Ini);
     except
         on E: Exception do
         begin
             ShowMessage('Ocorreu um erro ao escrever no arquivo config.ini, ' + #13                 ' mensagem de erro: ' + E.Message);
         end;
     end; 
end;
CategoriasSem categoria

Delphi uma linguagem fortemente tipada – Definição de variáveis

hoje vamos aprender a fazer a utilização de variáveis com Delphi.

Primeiramente temos que entender o que é uma variável.

Segundo a Wiki:

Na programação, uma variável é um objeto (uma posição, freqüentemente localizada na memória) capaz de reter e representar um valor ou expressão. Enquanto as variáveis só “existem” em tempo de execução, elas são associadas a “nomes”, chamados identificadores, durante o tempo de desenvolvimento.

Quando nos referimos à variável, do ponto de vista da programação de computadores, estamos tratando de uma “região de memória (do computador) previamente identificada cuja finalidade é armazenar os dados ou informações de um programa por um determinado espaço de tempo”. A memória do computador se organiza tal qual um armário com várias divisões. Sendo cada divisão identificada por um endereço diferente em uma linguagem que o computador entende.

O computador armazena os dados nessas divisões, sendo que em cada divisão só é possível armazenar um dado e toda vez que o computador armazenar um dado em uma dessas divisões, o dado que antes estava armazenado é eliminado. O conteúdo pode ser alterado, mas somente um dado por vez pode ser armazenado naquela divisão.

O computador identifica cada divisão por intermédio de um endereço no formato hexadecimal, e as linguagens de programação permitem nomear cada endereço ou posição de memória, facilitando a referência a um endereço de memória. Uma variável é composta por dois elementos básicos: o conteúdo,o valor da variável e identificador, um nome dado à variável para possibilitar sua utilização.

agora que ja sabemos um pouco sobre o que é uma variáveis, irei demonstrar os lugares que podemos definir variáveis em um programa Delphi

//*****************************************

unit UnitExemplo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Btn1: TButton;
    procedure Btn1Click(Sender: TObject);
    //aqui podemos definir uma variável
  private
    { Private declarations }
    var VariávelPrivada:Integer;
    //aqui podemos definir uma variável
  public
    { Public declarations }
    var VariávelPublica:Integer;
  end;

//aqui podemos definir uma variável
var
  Form2: TForm2;
  var VariávelBoba:Integer;

implementation

{$R *.dfm}

procedure TForm2.Btn1Click(Sender: TObject);
//aqui podemos definir uma variável
var VariavelLocal:Integer;
begin

end;

end.

O Delphi é uma linguagem fortemente tipada.

isso significa que, cada variável, ao ser definida somente aceitará um tipo de dado
e caso tentemos colocar um tipo diferente o Delphi levantará uma exception informando ao usuário o erro:

clique em Definição de Variáveis Delphi para baixar a lista de tipos aceitos pelo Delphi.

após baixar
Faça um form e coloque um botão para cada tipo documentado no pdf

CategoriasDelphi Básico

Dicas de Delphi

Baixe aqui um arquivo com mais de 1000 Dicas de  Delphi

 

CategoriasDownloads Tags:

Download Apostila Delphi

baixe a apostila de Delphi aqui

CategoriasDownloads Tags:

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 .

CategoriasDelphi, Help Tags:,

Backup no Mysql com Delphi – Segunda Parte

novembro 9, 2010 1 comentário

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
CategoriasDelphi, Mysql Tags:, , ,

Gerando um Instalador para aplicativos Delphi com INNO SETUP

Gerando Instalador delphi com Inno Setup

Muitos alunos nesse fim de ano estão fazendo seus projetos de conclusão de curso e necessitam fazer instaladores para seus aplicativos.

Hoje vou mostrar como fazer um instalar usando o utilitário INNO SETUP, que é Free!

Primeiro baixe o INNO SETUP no site http://www.jrsoftware.org/, procure sempre baixar a Release mais atual.

Instalando o programa

Após fazer o download instale o programa com a instalação NNF(Next, Next e Finnish)






Criando a Instalação

Feito a instalação abra o INNO SETUP

Au abrir deve ser exibido uma tela para criação do script, se não aparecer, crie um novo como mostrado abaixo e gere o  script utilizando o WIZARD

O com o Wizard é  muito fácil criar o instalador.

Clique em Next

O sistema irá pedir as informações do sistema e  da empresa que desenvolve o produto.

Nessa tela será exibido a pasta de destino de instalação do aplicativo, se desmarcar  “Allow user to change the application folder” o sistema não permitira que o usuário altere a pasta padrão de instalação. Caso seja necessário o desenvolvedor poderá escolher uma pasta Customizada, escolhendo o nome Custon.

Nessa tela o usuário ira colocar o aplicativo que deseja distribuir e se o usuário quiser que o aplicativo seja executado logo em seguida, deverá marcas “Allow user to start the applicaton after Setup hás finished”.
A Lista “Other application files” será a lista de todos os arquivos que são necessários serem instalados juntamente com o aplicativo, são por exemplo: DLL, OCX, Arquivos Auxiliares ou qualquer outra opção que deseja-se levar junto com o instalador.

Na Tela seguinte o usuário ira configurar as opções de criação de atalhos para acesso ao sistema

Nesta tela é possível definir os arquivos de licença , informações iniciar e de e pós instalação

A linguagem da instalação também pode ser personalizada.

Aqui será informado o diretório onde o instalador será compilado, o nome do instalador ícone do instalador e se senha de instalação.

Pronto script de instalação foi concluído, finalize o Wizard.

Lembrando que todo esse processo foi para a construção do script, e o processo deve ser compliado para que o instalador seja criado

Após finalizar o sistema perguntará se você já quer gerar o executável.

Se você estiver gerando um novo script ele ira pedir para salvar o projeto do instalador,  se para compilar o instalador.

Após o processo será exibido o log da compilação e o instalador iniciará e você já poderá testar seu novo setup.

Até a Próxima

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.