...
var i:integer;
texto,varletras,varnumeros:string;
begin
texto := 'SUA STRING';
varletras := ´´;
varnumeros := ´´;
for i:=1 to Length(Texto) do
if (Texto[i] in [´0´..´9´]) then
varnumeros := varnumeros+Texto[i]
else
varletras := varletras + Texto[i];
end;
Ao final desse código a variável numletras terá as letras e a variável varnumeros terá os números.
OBJETIVO DO SITE : COMPARTILHAR CONHECIMENTO ENTRE OS QUE UTILIZAM LINGUAGEM DE PROGRAMAÇÃO OBJECT PASCAL E FERRAMENTA DE DESENVOLVIMENTO BORLAND/EMBARCADERO DELPHI. AQUI SERÃO POSTADAS DICAS PARA RESOLUÇÃO DE PROBLEMAS QUE SÃO COMUNS ENTRE OS QUE ESTÃO INICIANDO NO MUNDO DA PROGRAMAÇÃO. OBRIGADO PELA SUA VISITA !
Total de visualizações de página
terça-feira, 25 de dezembro de 2012
quarta-feira, 5 de dezembro de 2012
coalesce : obrigar select filtrar valores nulos para determinados campos (FIREBIRD)
Muitos iniciantes não sabem mas o comando SELECT simples muitas vezes não traz como resultado registros que possuem valor nullo num determinado campo indicado na pesquisa.
para obrigar a seleção resultar campos com valores nulos :
select * from CLIENTES
where coalesce (codigo,'') like :0 and
coalesce (nomerazao,'') like :1 and
coalesce (apelfant,'') like :2 and
coalesce (cpfcnpj,'') like :3 and
coalesce (tipopessoa,'') like :4 and
coalesce (cidade,'') like :5
order by codigo
Esse exemplo foi inserido num componente do tipo Query .
O argumento coalesce seguido da sintaxe (CAMPO,'') , onde campo é o campo sugerido na pesquisa e o espaco me branco marcado com '' substitui os valores nulos por valor em branco (somente durante a pesquisa) e retorna os resultados.
para obrigar a seleção resultar campos com valores nulos :
select * from CLIENTES
where coalesce (codigo,'') like :0 and
coalesce (nomerazao,'') like :1 and
coalesce (apelfant,'') like :2 and
coalesce (cpfcnpj,'') like :3 and
coalesce (tipopessoa,'') like :4 and
coalesce (cidade,'') like :5
order by codigo
Esse exemplo foi inserido num componente do tipo Query .
O argumento coalesce seguido da sintaxe (CAMPO,'') , onde campo é o campo sugerido na pesquisa e o espaco me branco marcado com '' substitui os valores nulos por valor em branco (somente durante a pesquisa) e retorna os resultados.
obrigar uma string receber caracter maiúsculo
objeto que vai receber o valor maiúsculo := AnsiUpperCase(elemento que vai ser transformado em maiúsculo);
sábado, 1 de dezembro de 2012
erro : O programa de instalação do SQL Server não pode instalar arquivos na pasta compactada ou criptografada
Hoje fui tentar instalar o sql server numa máquira rodando windows XP e me deparei com o seguinte erro durante a instalação :
O programa de instalação do SQL Server não pode instalar arquivos na pasta compactada ou criptografada: c:\Arquivos de programas\Microsoft SQL Server\. Para continuar, certifique-se de que os diretórios de instalação não estão compactados ou criptografados ou especifique um diretório diferente e execute o programa de instalação do SQL Server novamente
Para resolver o problema fui até a pasta de instalação do sql server : c:\Arquivos de programas\Microsoft SQL Server , clique com o botão direito do mouse nela, em seguida selecione Propriedades , em seguida clique no botão avançado. Depois é só desmarcar a opção "Compactar o conteúdo para economizar espaço em disco" e dar OK.
Pronto , resolvido o problema.
segunda-feira, 19 de novembro de 2012
verificar conexão com a internet
// declare a função :
function conexao_teste : boolean;
// implemente função :
function conexao_teste : Boolean;
var
flags : DWORD;
begin
if not InternetGetConnectedState(@flags, 0) then
result := false
else
result := true;
end;
// para a verificação :
conexao_teste;
if conexao_teste = true then showmessage ('conectado');
function conexao_teste : boolean;
// implemente função :
function conexao_teste : Boolean;
var
flags : DWORD;
begin
if not InternetGetConnectedState(@flags, 0) then
result := false
else
result := true;
end;
// para a verificação :
conexao_teste;
if conexao_teste = true then showmessage ('conectado');
terça-feira, 13 de novembro de 2012
Software Gratuíto para Backup Automático do SQL SERVER
SQLBackupAndFTP!
Muitas empresas contém informações de grande importância em seus bancos de dados, porém muitas vezes não é possível salvar backups das informações no banco por diversos motivos.
Agora com o SQLBackupAndFTP é possível salvar backups dos dados em seu banco e enviá-los por email, por FTP ou até compactá-los e salvar onde desejar.
É possível agendar o horário e a data que deseja que seja feito o backup. A possibilidade de enviar os backups via servidor FTP ajuda na otimização de espaço, pois não é necessário gravar os dados. O programa pode, caso o usuário deseje, enviar ainda um email com o status do backup para o usuário poder controlar sempre que é feito um backup e se ele foi bem sucedido.
O programa é compatível com as versões do SQL Server:
SQL Server 2005 Express
SQL Server 2005 Workgroup
SQL Server 2005 Standard
SQL Server 2008 Express
SQL Server 2008 Workgroup
SQL Server 2008 Standard
SQL Server 2008 Web
Muitas empresas contém informações de grande importância em seus bancos de dados, porém muitas vezes não é possível salvar backups das informações no banco por diversos motivos.
Agora com o SQLBackupAndFTP é possível salvar backups dos dados em seu banco e enviá-los por email, por FTP ou até compactá-los e salvar onde desejar.
É possível agendar o horário e a data que deseja que seja feito o backup. A possibilidade de enviar os backups via servidor FTP ajuda na otimização de espaço, pois não é necessário gravar os dados. O programa pode, caso o usuário deseje, enviar ainda um email com o status do backup para o usuário poder controlar sempre que é feito um backup e se ele foi bem sucedido.
O programa é compatível com as versões do SQL Server:
SQL Server 2005 Express
SQL Server 2005 Workgroup
SQL Server 2005 Standard
SQL Server 2008 Express
SQL Server 2008 Workgroup
SQL Server 2008 Standard
SQL Server 2008 Web
quinta-feira, 8 de novembro de 2012
obrigar somente letras maiúsculas ou minúsculas durante a digitação
Evento OnKeyPrees, o seguinte(s) comando(s) : key:=AnsiUpperCase(key)[1]; //para edição em maiúscula key:=AnsiLowerCase(key)[1]; //para edição em minúscula
domingo, 4 de novembro de 2012
MENSAGENS TRADUZIDAS (DELPHI 6 E 7)
Muita genta gostaria de ter aquelas mensagens do delphi (de erro entre outras) traduzidas para o português do brasil , visando a comodidade de seus clientes pois nem todos dominam o inglês.
É possível traduzir estas mensagem apenas compilando um projeto e depois substituir os arquivos .DCU criados nesse projeto na pasta LIB do delphi.
No meu caso após a substituição tive um erro nos meus projetos referente ao Data Modulo (versão diferente no indicado na nova DCU). A única coisa que precise fazer foi substituir o componente Data Module antigo (exclui o antigo e adiciona o mesmo componente novamente) , reconfigura o banco e depois compila
No meu caso foi o único problema que tive , agora as mensagens do meu projeto são 100 % em português do Brasil.
Esses arquivos podem ser facimente encontrados na internet , ou quem quiser pode se cadastrar como um Membro;Seguidor do site que eu envio por e-mail.
(NÃO ME RESPONSABILIZO POR QUALQUER DANO AO SEU PROJETO, APENAS ESTOU REPASSANDO MINHA EXPERIÊNCIA)
É possível traduzir estas mensagem apenas compilando um projeto e depois substituir os arquivos .DCU criados nesse projeto na pasta LIB do delphi.
No meu caso após a substituição tive um erro nos meus projetos referente ao Data Modulo (versão diferente no indicado na nova DCU). A única coisa que precise fazer foi substituir o componente Data Module antigo (exclui o antigo e adiciona o mesmo componente novamente) , reconfigura o banco e depois compila
No meu caso foi o único problema que tive , agora as mensagens do meu projeto são 100 % em português do Brasil.
Esses arquivos podem ser facimente encontrados na internet , ou quem quiser pode se cadastrar como um Membro;Seguidor do site que eu envio por e-mail.
(NÃO ME RESPONSABILIZO POR QUALQUER DANO AO SEU PROJETO, APENAS ESTOU REPASSANDO MINHA EXPERIÊNCIA)
quarta-feira, 17 de outubro de 2012
None of the dynamic: libraries can be found: libpq81.dll, libpq.dll
Este erro ocorre ao tentar conectar com o banco Postgre sem as devidas dll's no diretório "system" e "system32" do windows (no windows 64 bits somente na pasta system)
Você precisa fazer download somente do arquivo libpq81.dd clicando aqui
O arquivo libpq.dll pode ser encontrado na pasta "bin" do Postgre, assim como todas as outras dll's que o delphi for pedindo quando tentar se conectar ao banco de dados.
OBS : fiz esta experiência utilizando componente Zeosdb
Você precisa fazer download somente do arquivo libpq81.dd clicando aqui
O arquivo libpq.dll pode ser encontrado na pasta "bin" do Postgre, assim como todas as outras dll's que o delphi for pedindo quando tentar se conectar ao banco de dados.
OBS : fiz esta experiência utilizando componente Zeosdb
Postgre (PostgreSql) encoding LATIN1 (em ambiente Windows)
Caros amigos , bom dia !
Recentemente peguei um projeto onde "obrigatoriamente" o collation no banco deveria ser LATIN1 e o banco de dados Postgre (requisitos do cliente).
Depois de muita pesquisa (muita mesmo) na internet e nenhuma "resposta conclusiva" acabei descobrindo que a versão 8.2 do postgre é a única que aceita Encoding LATIN1 no Windows juntamente com Locale Portugues/Brazil.
No proprio instalador dessa versão já é possível configurar para LATIN1.
Da versão 8.3 em diante já não é possível essa configuração (somente em ambiente Linux)
O próprio software na versão 8.3 em diante , sugere o uso do Encoding Windows1252 , o que não é a mesma coisa.
Recentemente peguei um projeto onde "obrigatoriamente" o collation no banco deveria ser LATIN1 e o banco de dados Postgre (requisitos do cliente).
Depois de muita pesquisa (muita mesmo) na internet e nenhuma "resposta conclusiva" acabei descobrindo que a versão 8.2 do postgre é a única que aceita Encoding LATIN1 no Windows juntamente com Locale Portugues/Brazil.
No proprio instalador dessa versão já é possível configurar para LATIN1.
Da versão 8.3 em diante já não é possível essa configuração (somente em ambiente Linux)
O próprio software na versão 8.3 em diante , sugere o uso do Encoding Windows1252 , o que não é a mesma coisa.
domingo, 14 de outubro de 2012
can't format message 13:96 -- message file c:\Program Files\borland\Interbase/interbase.msg not found. unavailable database
Já vi muitas pessoas que usam o banco Firebird passarem por esse problema em algum momento : o erro com mensagem : " can't format message 13:96 -- message file c:\Program Files\borland\Interbase/interbase.msg not found. unavailable database"
Este problema ocorre quando o interbase e firebird estão rodando na mesma máquina , ou por quem opta utilizar o firebird com componentes IBEXPERT (nativo do Interbase) no Delphi.
Depois de passar pelo mesmo problema consegui resolver da seguinte forma :
Desinstalar o Firebird
Localizar e excluir os seguintes arquivos : gds32.dll e fbclient.dll
Excluir a pasta de instalação do Firebird
Reinstale o Firebird
Pronto , provavelmente você conseguirá resolver o problema
Este problema ocorre quando o interbase e firebird estão rodando na mesma máquina , ou por quem opta utilizar o firebird com componentes IBEXPERT (nativo do Interbase) no Delphi.
Depois de passar pelo mesmo problema consegui resolver da seguinte forma :
Desinstalar o Firebird
Localizar e excluir os seguintes arquivos : gds32.dll e fbclient.dll
Excluir a pasta de instalação do Firebird
Reinstale o Firebird
Pronto , provavelmente você conseguirá resolver o problema
sexta-feira, 12 de outubro de 2012
desabilitar ações de uma action list
Para anular as ações de uma 'action list' temporariamente ou permanentemente atribua o seguinte valor a propriedade 'state' :
ActionList1.State := asSuspended;
ActionList1.State := asSuspended;
terça-feira, 5 de junho de 2012
SELECINAR TEXTO DE UM "EDIT"
Para selecionar o conteúdo de um Edit , por exemplo , você deve atribuir a propriedade "SelectAll"
EXEMPLO
procedure TfrmClientes.ButtonClick(Sender: TObject);
begin
Edit1.SelectAll;
end;
OBRIGAR UM CAMPO RECEBER NULL
Quando usamos uma referencia do tipo qryClienteBLOQUEADO.ISNULL ou
qryClienteBLOQUEADO.value := NULL o delphi retorna um erro de imcompatibilidade .
Para "driblar" este problema referencie da seguinte maneira :
qryCliente.FieldbyName('BLOQUEADO').value := NULL
segunda-feira, 4 de junho de 2012
ACBR VALIDADOR : VALIDAÇÃO DE CNPJ, CPF, INSCRIÇÃO ESTUADUAL, UF, NÚMERO CARTÃO DE CRÉDITO
Existe um jeito muito simples para validar CPF, CNPJ, I.E, CPE, PIS, nº Cartão de Crédito, nº de Cheque usando o componente ACBR Validador.
É preciso baixar os fontes do ACBR no site oficial via SVN
Depois na IDE do delphi (Tools , Options , Library32 , Library Path , adicione o caminho
C:\acbr\Fontes\ACBrDiversos
C:\acbr\Fontes\ACBrDiversos
Agora pelo delphi abra o pacote C:\acbr\Pacotes\Delphi\ACBrDiversos.dpk
Compile e depois Instale
FORMA DE USAR O COMPONENTE
Adicione um componente ACBRValidador (paleta ACBR) no seu form
Na propriedade TipoDocto selecione o tipo de documento que deseja validar
Exemplo de validação :
if not ACBrValidador1.Validar then
begin
showmessage ('Inscrição Estadual Inválida');
abort;
end
VALIDAÇÃO PARA ESTADOS BRASILEIROS (UF)
// verifique se a biblioteca SysUtils está declarada na cláusula 'uses'
// Declare a função :
function ChecaUF(const aUF : string) : Boolean;
// Crie a função
function ChecaUF(const aUF : string) : Boolean;
const
Estados = 'SPMGRJRSSCPRESDFMTMSGOTOBASEALPBPEMARNCEPIPAAMAPFNACRRRO';
var
Posicao : Integer;
begin
Posicao := Pos(UpperCase(aUF), Estados);
Result := not ((Posicao = 0) or ((Posicao mod 2) = 0)
or (Trim(aUF) = ''));
end;
// Exemplos de uso:
// Teste se verdadeiro
if CheckUF('EditEstado.Text') then
ShowMessage('UF válida');
// Teste se falso
if not (CheckUF('EditEstado.Text')) then
ShowMessage('UF inválida');
sábado, 2 de junho de 2012
RODANDO EXECUTÁVEIS VIA CÓDIGO NO DELPHI
Você pode chamar um arquivo executável pelo delphi pela programação , utilizando o comando WinExec
Sintaxe :
WinExec(PChar('caminho_do_arquivo_exe'),SW_MAXIMIZE);
ALTERAR SENHA DO 'SA' NO FIREBIRD
PARA ALTERAR A SENHA DO SUPER ADMINISTRADOR DO FIREBIRD ENTRE NO NO PROMPT DE COMANDO NAVEQUE ATÉ A PASTA BIN , ONDE O FIREBIRD FOI INSTALADO E EXECUTE O COMANDO :
gsec -modify SYSDBA -pw NOVASENHA -user SYSDBA -password masterkey?
OBS : Você tembém pode fazer isso em tempo de execução usando o comando 'WinExec' (ver exemplo de uso no menu "arquivos e pastas" do blog)
CLIPBOARD NO DELPHI (COPIAR E COLAR)
DECLARE A BIBLIOTECA "ClipBrd" NA CLÁUSULA "USES"
COPIANDO O TEXTO DO COMPONENTE EDIT1 (NO BOTÃO "BtCtrlC")
procedure TForm1.BtCtrlCClick(Sender: TObject);
begin
ClipBoard.AsText := Edit1.Text;
end;
COLANDO O TEXTO COPIADO NO COMPONENTE EDIT2 (BOTÃO "BtCtrlV")
procedure TForm1.BtnCtrlVClick(Sender: TObject);
begin
Edit2.Text := Clipboard.AsText;
end;
quarta-feira, 30 de maio de 2012
INCREMENTE SUA APLICAÇÃO COM VCL SKIN
As aplicações em Dephi podem ficar muito mais atraentes quando usamos os Skins VCL em nossos formulários . O efeito também é automaticamente aplicado aos componentes do form (dbgrid , buttons , panel , etc ).
Para os interessados possuo o pacote instalador (solicitar por email)
Instalação :
Descompacte o arquivo .zip
Descompacte o arquivo .zip
Na IDE do delphi entre em Tools - Options - Library Path e adicione o caminho do diretório correspondente à sua versão do delphi (d6,d7,d2007 ...) .
Depois abra o arquivo .dpk que esta na pasta correspondente a sua versão .
Compile o pacote e depois instale.
terça-feira, 29 de maio de 2012
VERIFICAR SE UM FORM ESTA CRIADO NA MEMÓRIA OU NÃO
Em alguns casos , precisamos saber se um form está criado para podermos manipular algum componente do mesmo ou tratar algumas informações , nesse caso precisamos saber se o status do form é igual a "nil" .
Se for igual a "nil" é porque o mesmo ainda não foi criado na memória.
Exemplo (evendo onclick de um button por exemplo)
if frmCliente = nil then
begin
...
end;
OBS : para que o comando funcione em corretamente em todos os forms da sua aplicação, é preciso que ele possa ser identificado como "NÃO CRIADO" . Por isso não esqueça de colocar o form "recebendo" nil no evendo "onclose" de cada form ou simplesmente dando um "release" nesse evento.
Assim o form sera eliminado da memoria mesmo que tenha sido criado.
OBS : para que o comando funcione em corretamente em todos os forms da sua aplicação, é preciso que ele possa ser identificado como "NÃO CRIADO" . Por isso não esqueça de colocar o form "recebendo" nil no evendo "onclose" de cada form ou simplesmente dando um "release" nesse evento.
Assim o form sera eliminado da memoria mesmo que tenha sido criado.
segunda-feira, 28 de maio de 2012
REGISTRANDO AS BIBLIOTECAS CAPICOM E OPENSSL NO WINDOWS 64 BITS
Olá a todos que acompanham este blog.
A um tempo atrás me deparei com um problema na migração do componente ACBR para plataforma 64 bits e, para ser mais específico , na hora de registrar as bibliotecas.
Pois bem : Copie as dll's capicom.dll , msxml5.dll , msxml5r.dll , libeay32.dll , ssleay32.dll para a pasta
C:\Windows\SysWOW64
No menu iniciar do Windows , navegue ate o ícone do prompt de comando (do MS-DOS) , clique com o botão direito sobre ele e depois clique em "Executar como Administrador".
Execute os comandos :
regsvr32 %windir%\SysWOW64\capicom.dll
regsvr32 %windir%\SysWOW64\msxml5.dll
sábado, 26 de maio de 2012
CORES NO DBGRID DO DELPHI 2010
Na
migração para o Delphi2010 os DBGrids ficaram todos estilizados com um
tema do Delphi 2010 para corrigir isso altere a propriedade
"DrawingStyle" para "gdsClassic"
GRAVANDO DADOS EM ARQUIVOS INI
Quando trabalhamos com arquivos INI no delphi, podemos dizer que gravamos ou lemos informações num registro que contém grupos de informações.
Basicamente, este trabalho exige os seguintes passos :
* Declarar a biblioteca "IniFiles" na cláusula "uses" da unit
* No procedure em que for chamar o recurso , declare uma variável do tipo TIniFile
Ex : var teste : TIniFile;
* Faça a variável receber o caminho no qual o arquivo INI sera gravado
Ex : teste := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\CONFIGURACOES.INI');
Nesse caso vai ser criado um arquivo CONFIGURACOES.INI no mesmo diretório de do executável
do sistema
Para gravar "texto" no arquivo :
teste.WriteString ('EMPRESA','RAZAOSOCIAL' ,edRazao.Text);
teste.WriteString ('EMPRESA','NOMEFANTASIA' ,edFantasia.Text);
Nesse caso o campo RAZAO SOCIAL do grupo EMPRESA recebe o valor do edRazao.Text e
o campo NOMEFANTASIA recebe o valor do edFantasia.Text
Para gravar "número" no arquivo :
teste.WriteInteger ('CONTROLE','DIASVENCIMENTO' ,edQtdeDiasVcto.Value);
Nesse caso o campo DIASVENCIMENTO do grupo CONTROLE vai receber o valor de uma
variável ou objeto que tenha um valor inteiro.
Para gravar "valor boleano" no arquivo :
teste.WriteBool ('CONTROLE','BLOQUEAR',True);
Nesse caso o campo BLOQUEAR do grupo CONTROLE vai receber o valor 1 (verdadeiro)
Visualização O arquivo vai ficar mais ou menos com o seguinte layout :
[EMPRESA]
NOMEFANTASIA = FULANO DE TAL LTDA
NOMEFANTASIA - LOJÃO DO FULANO
[CONTROLE]
DIASVENCIMENTO = 5
BLOQUEAR = 1
Assinar:
Postagens (Atom)