Neste caso precisei verificar em apenas uma tabela que é a pessoa, vc pode adaptar conforme a necessidade, essa consulta nos ajudou muito pois realizamos uma importação de milhares de registros e estes após a importação deveriam ser corrigidos

o interessante é a consulta passando pelas tabelas

RDB$RELATIONS TABELAS,

RDB$RELATION_FIELDS CAMPOS,

RDB$FIELDS DADOSCAMPO,

RDB$TYPES TIPOS

 
CREATE PROCEDURE SP_PESSOA_INCONSISTENCIA
RETURNS (
    OPQTD INTEGER,
    OPQTDFINAL INTEGER,
    OPTABELA VARCHAR(100),
    OPCAMPO VARCHAR(100))
AS
DECLARE VARIABLE VTABELA VARCHAR(100);
DECLARE VARIABLE VCAMPO VARCHAR(100);
DECLARE VARIABLE STRINGSQL VARCHAR(1000);
begin
  OPQTD = 0;
  OPQTDFINAL = 0;
  FOR
   SELECT CAMPOS.RDB$RELATION_NAME, CAMPOS.RDB$FIELD_NAME
    FROM RDB$RELATIONS TABELAS, RDB$RELATION_FIELDS CAMPOS, RDB$FIELDS DADOSCAMPO, RDB$TYPES TIPOS
    WHERE TABELAS.RDB$RELATION_NAME = CAMPOS.RDB$RELATION_NAME AND CAMPOS.RDB$FIELD_SOURCE = DADOSCAMPO.RDB$FIELD_NAME AND
         DADOSCAMPO.RDB$FIELD_TYPE = TIPOS.RDB$TYPE AND TIPOS.RDB$FIELD_NAME = ‘RDB$FIELD_TYPE’ AND
         TIPOS.RDB$TYPE_NAME = ‘VARYING’ AND TABELAS.RDB$SYSTEM_FLAG = 0
         AND CAMPOS.RDB$RELATION_NAME = ‘PESSOA’
    ORDER BY CAMPOS.RDB$RELATION_NAME, CAMPOS.RDB$FIELD_NAME
    INTO :VTABELA, :VCAMPO
  DO
  BEGIN
    STRINGSQL = ”;
    STRINGSQL = ‘ SELECT COUNT(*) FROM ‘ || lTRIM(rtrim(VTABELA));
    STRINGSQL = STRINGSQL || ‘ WHERE ( ‘ || lTRIM(rtrim(VCAMPO)) || ‘ LIKE ”” OR ‘ || lTRIM(rtrim(VCAMPO)) ||  ‘ IS NULL )’;
    EXECUTE STATEMENT STRINGSQL INTO :OPQTD;
    OPQTDFINAL =  OPQTDFINAL + OPQTD;
    OPTABELA = LTRIM(RTRIM(VTABELA));
    OPCAMPO = LTRIM(RTRIM(VCAMPO));
    SUSPEND;
  END
end

Publicado por: Gustavo Henrique | Julho 1, 2009

Firebird, Procedure para Alterar tudo para Maiusculo ….

neste caso resolvi ter como parametro de entrada a tabela e o nome do campo, mas se vc quiser é só tirar estes parametros.

CREATE PROCEDURE SP_ALTERA_PARA_MAISCULO
AS
DECLARE VARIABLE STRINGSQL VARCHAR(1000);
DECLARE VARIABLE VCAMPO VARCHAR(100);
DECLARE VARIABLE VTABELA VARCHAR(100);
begin
  FOR
    SELECT CAMPOS.RDB$RELATION_NAME, CAMPOS.RDB$FIELD_NAME
    FROM RDB$RELATIONS TABELAS, RDB$RELATION_FIELDS CAMPOS, RDB$FIELDS DADOSCAMPO, RDB$TYPES TIPOS
    WHERE TABELAS.RDB$RELATION_NAME = CAMPOS.RDB$RELATION_NAME AND CAMPOS.RDB$FIELD_SOURCE = DADOSCAMPO.RDB$FIELD_NAME AND
         DADOSCAMPO.RDB$FIELD_TYPE = TIPOS.RDB$TYPE AND TIPOS.RDB$FIELD_NAME = ‘RDB$FIELD_TYPE’ AND         TIPOS.RDB$TYPE_NAME = ‘VARYING’ AND TABELAS.RDB$SYSTEM_FLAG = 0
         INTO :VTABELA, :VCAMPO
  DO
  BEGIN
    STRINGSQL = ”;
    STRINGSQL = ‘ UPDATE ‘ || VTABELA;
    STRINGSQL = STRINGSQL || ‘ SET ‘ || VCAMPO || ‘ = UPPER(’ || VCAMPO || ‘)’;
    EXECUTE STATEMENT STRINGSQL;
  END

  /* Procedure Text */
  suspend;
end

Publicado por: Gustavo Henrique | Julho 1, 2009

Linux, Postfix, Domínios Virtuais …

no main.cf

relay_domains = $mydestination, sp.renovias.com.br

relay_recipient_maps = hash:/etc/postfix/

relay_recipients virtual_maps = hash:/etc/postfix/virtual

Criando Contas nos Domínios Virtuais

editar o arquivo /etc/postfix/virtual

adicione o email segundo o padrão que já está no final do arquivo

email@dominiovirtual emaildestino@dominio

dar o comando: postmap /etc/postfix/virtual

editar o arquivo /etc/postfix/relay_recipients

adicione o email segundo o padrão que já está no final do arquivo

email@dominiovirtual emaildestino@dominio

dar o comando: postmap /etc/postfix/relay_recipients

Publicado por: Gustavo Henrique | Julho 1, 2009

Verificando quantas sessões do Firebird estão abertas no Linux …

Segue o comando para verificarmos quantas sessões estão abertas no Linux, utilizei a porta 3050 que é padrão do Firebird.

[root@srv-hp ~]# netstat -n | grep -v 139 | grep 3050
tcp        0      0 172.18.1.205:3050           172.18.1.137:3411           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.128:1728          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.249:3967           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.249:3960           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.176:1435          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.137:3110           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.138:1177          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.120:1642          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.249:4422           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.78:1102           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.137:3121           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.137:3120           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.203:1929           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.124:1926          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.203:1923           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.138:1118          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.116:1206          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.136:1594          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.131:1702           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.156:1538          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.137:3492           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.136:1546           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.82:3777            ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.26:1968            ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.155:1122          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.155:1120          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.155:1121          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.108:1339           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.119:1196          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.133:1104          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.133:1107          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.133:1103          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.155:1116          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.119:1204          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.222:1750           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           192.168.0.161:2101          ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.136:1699           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.136:1214           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.136:1209           ESTABELECIDA
tcp        0      0 172.18.1.205:3050           172.18.1.108:4948           ESTABELECIDA

Publicado por: Gustavo Henrique | Julho 1, 2009

Firebird 2.01, correção de Tabelas, Indíces, Backup´s e Outros.

Realize uma Cópia da base para outro local

Verifique os Erros
C:\Arquivos de programas\Firebird\Firebird_2_0\bin>gfix -v -f c:\telefonista.gdb -user SYSDBA -pass masterkey
Summary of validation errors

        Number of record level errors   : 3
        Number of index page errors     : 256
        Number of database page errors  : 1
Corrija os Erros
C:\Arquivos de programas\Firebird\Firebird_2_0\bin>gfix -m -i c:\telefonista.gdb  -user SYSDBA -pass masterkey

Realize Backup da Base
C:\Arquivos de programas\Firebird\Firebird_2_0\bin>gbak -g -b -z -l -v c:\telefonista.gdb c:\telbackup.fbk -user SYSDBA -pass masterkey

Exemplo do Final do Backup 
gbak:writing referential constraints
gbak:writing check constraints
gbak:writing SQL roles
gbak:closing file, committing, and finishing. 255005184 bytes written

Restaure o Backup, a opção -c faz com que seja criado um banco zerado
C:\Arquivos de programas\Firebird\Firebird_2_0\bin>gbak -g -c -z -v c:\telbackup.fbk c:\TELEFONISTATEL.gdb -user SYSDBA -pass masterkey
Se no Restore der o seguinte Erro
gbak: ERROR: warning — record could not be restored
gbak:Exiting before completion due to errors
Vá no IBexpert abra o Banco Cópia em Extract Metadata
Vá em Data Tables e Selecione tudo e exporte tudo
Se der algum erro vá eliminando-os, se vc usar Tabelas Externas (Create Table … External), concerteza vai dar erro Neste passo, vc terá que eliminar está tabela e outros problemas que houverem até dar 100% correto.
Crie uma base de dados nova
Importe todo o Metadados
e restaure o backup novamente

Publicado por: Gustavo Henrique | Julho 1, 2009

Firebird, utilizando a Cláusula Having …

Neste exemplo necessito selecionar o que é 021 só que não os que são 02119

 

SELECT CODIGOLIGACOESCOBRADAS, TRONCO, CODIGORAMAL,HORA,DURACAO,DATA,NUMERO,TIPO,TEMPO,SENHAPABX,TIPOLIGACAO

FROM LIGACOES

WHERE DATA >= ‘12/01/2008′ and DATA <= ‘05/31/2009′ and numero like ‘021%’ AND TIPO = ‘SAÍDA’

GROUP BY CODIGOLIGACOESCOBRADAS, TRONCO, CODIGORAMAL,HORA,DURACAO,DATA,NUMERO,TIPO,TEMPO,SENHAPABX,TIPOLIGACAO

HAVING numero NOT like ‘02119%’

Publicado por: Gustavo Henrique | Junho 23, 2009

Rave Reports, OnBeforePrint, Conversões, Comparações.

Brincando no Rave, pego dois campos textos, realiza comparaçoes, converto para inteiro, faço cálculos, troco a cor de um text, converto para Float, converto para String e somo com texto;

TextDiferencaTotal.Color := 0;
   ValorTotal := StrToInt(CalcTextTotalPABX.Text) – StrToInt(CalcTextTotalOperadora.Text);
   If ValorTotal < 0 Then
       TextDiferencaTotal.Color := 200;
   End;
   TextDiferencaTotal.Text := ‘Diferença Total : ‘ + IntToStr(ValorTotal);
   Porcentagem := StrToInt(CalcTextTotalPABX.Text) / StrToInt(CalcTextTotalOperadora.Text);
   If 100 – (Porcentagem * 100) < 0 Then
     TextPorcentagem.Text := ‘ Porcentagem de Diferença : ‘ + FloatToStr(100 – (Porcentagem * 100)) + ‘% - Possíveis Erros.’;
   Else
     TextPorcentagem.Text := ‘ Porcentagem de Diferença : ‘ + FloatToStr(100 – (Porcentagem * 100)) + ‘% -  Possíveis Acertos.’;
   End;

Erro: Unable to gain Control of RAVE Data communication System
Mensagem de Erro: Unable to gain control of Rave data Communication System.
 
Detalhe tem que abrir o DPR
program Project1;
 
uses
  Forms,
  RPDefine,
  SysUtils,
  DMCadastrar in ‘DMCadastrar.pas’ {DMCadastro: TDataModule},
  Principal in ‘Principal.pas’ {FormPrincipal},
 
{$R *.RES}
 
begin
  RPDefine.DataID := IntToStr(Application.Handle);
  Application.Initialize;
  Application.Title := ‘Sistema de Teste’;
  Application.CreateForm(TDMCadastro, DMCadastro);
  Application.CreateForm(TDMCadastroRH, DMCadastroRH);
  Application.CreateForm(TFormPrincipal, FormPrincipal);
  Application.Run;
end.

Publicado por: Gustavo Henrique | Março 16, 2009

Jogo …

Após a Febre do LaBrute, temos um novo joguinho bem interessante, teste suas habilidades, Super Stacker 2.

Publicado por: Gustavo Henrique | Março 12, 2009

Trabalhando/Usando palavras reservadas no Firebord …

Me deparei com a seguinte situação, preciso criar um campo para uma certa data base, criaei a tabela, depois notei que DATABASE é uma palavra reservada do FB, no primeiro select já me emperrei usando a tal DATABASE

SET * FROM TIPOPAGAMENTO WHERE DATABASE = 1

para isto basta vc colocar a palavra reservada entre aspas duplas, como segue abaixo

SET * FROM TIPOPAGAMENTO WHERE “DATABASE” = 1

Publicado por: Gustavo Henrique | Março 7, 2009

Pegando dados do Excel …

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, Grids, DBGrids, StdCtrls, ExtCtrls, ComCtrls, ComObj;
.

.

.

Var
  w_string, Range_Planilha : String;
Range_Planilha := ‘A’ + Trim(EditLinhaInicial.Text) + ‘:Z’ + Trim(EditLinhaFinal.Text);

w_planilha := o_excel.Application.WorkBooks[1].WorkSheets[1].Range[Range_Planilha];

.

.

.

Publicado por: Gustavo Henrique | Março 7, 2009

Linux, Chattr, Lsattr

Esses dias precisei construir um procedimento onde fosse apagado os dados de um diretório exceto um subdiretório, porém este subdiretório seus dados teriam que ser atualizados, para isso usei uma combinação dos comandos rm, chattr, o uso do chattr é muito interessante

se usarmos : chattr +i diretorio

vc nem que tenha todos os diretiros conseguirá apagar o diretório

usando : chattr -i diretorio vc retira esta condição

para listar qualquer dado que esteja com o chattr vc pode usar : lsattr que o sistema irar aprensentar todos os dados.

em resumo ficou assim

criei um arquivinho em : /etc/apagapublico

no crontab coloquei
15 19 * * 1-5 /bin/rm -rf /etc/apagapublico

dentro do arquivo ficou

#/bin/sh
clear
echo “Apagando dados do Publico”
rm -rf /dados/compartilhado/publico/*
chattr -R -i /dados/compartilhado/publico/diretorio
rm -rf /dados/compartilhado/publico/diretorio
cp -R /opt/usuario/diretorio/ /dados/compartilhado/publico/
chattr -R +i /dados/compartilhado/publico/diretorio

pronto

tentei usar a combinação de comandos abaixo porém não consegui, mas segue outras loucuras de comandos

find ! -type d -exec rm ‘{}’ \;

find ! /dados/compartilhado/publico/* | grep [^t\.diretorioanaoapagar]$ -exec rm ‘{}’ \;

find ! -type d | xargs rm

for i in `find /dados/compartilhado/publico/* | grep [^t\.diretorioanaoapagar]$`; do rm -rf $i; done

Publicado por: Gustavo Henrique | Março 7, 2009

Alterando a Data e Hora do Micro e da Bios pelo Linux …

date MMDDhhmmYYYY

ou

date -s mm/dd/yyyy

ou

date -s hh:mm

e depois

clock -w
vai pegar a hora do micro e jogar para a bios

clock -s
pega a hora da bios e joga para o micro

Publicado por: Gustavo Henrique | Março 7, 2009

Montando unidades no Linux usando o guest …

//x.x.x.x/pasta /home/root/aaa cifs noauto,username=”",password=”" 0 0
mount -t smbfs -o guest //default/email  /mnt/samba

vi /etc/fstab
//x.x.x.x/unidade /mnt/usr cifs noauto,username=”",password=”" 0 0

Publicado por: Gustavo Henrique | Março 7, 2009

Samba com Solaris 9 …

Guia rápido do samba no solaris 9

Passo 1: Criar arquivo de configuração do samba.

O arquivo de configuração do samba está em /etc/sfw.

# cd /etc/sfw

# cp smb.conf-example smb.conf

 

Passo 2: Habilitar o serviço do samba.

# /etc/init.d/samba start

 

Passo 3: Criar diretório(s) a ser(em) mapeado(s).

# mkdir <directory>

# chmod 777 <directory>

 

Passo 4: Adicionar usuários(s).

# useradd <user>

# passwd <user>

Adicionar usuários(s), criados anteriormente, no samba

# /usr/sfw/bin/smbpasswd -a <user>

Habilitar usuários(s) no samba

# /usr/sfw/bin/smbpasswd -e <user>

 

Passo 5: Configurar o arquivo smb.config.

# vi /etc/sfw/smb.conf

Mudar as linhas no arquivo:

workgroup = <YOUR_WORKGROUP>

security = SHARE

Adicionar compartilhamento(s) no fim do arquivo:

Para compartilhamentos sem autenticação:

[public]

comment = Public Directory

path = /<public_directory>

public = yes

writable = yes

printable = no

guest ok = yes

Para compartilhamentos com autenticação:

[users]

comment = Users Directory

path = /<users_directory>

public = no

writable = yes

printable = no

valid users = user1 user2 user3

 

Passo 6: Mapear diretórios em clientes Windows

Criar arquivo map_samba.bat:

@echo off

net use <letra_mapeamento>: \\<numero_ip_servidor_samba>\<public_directory> /n

net use <letra_mapeamento>: \\<numero_ip_servidor_samba>\<users_directory> /USER:<user> <senha> /n

Execute o arquivo map_samba.bat no Windows

Publicado por: Gustavo Henrique | Fevereiro 10, 2009

Tornar um arquivo como “executável” no Linux …

crie o arquivo : touch espaco

edit com o vi : vi espaco

coloque a linha : ls -la *

feche o arquivo

para vc “executar” o arquivo vc tem que digitar : sh espaco
para tornar o arquivo executável digite : chmod +x espaco
agora vc pode chamar o arquivo : ./espaco

Publicado por: Gustavo Henrique | Fevereiro 10, 2009

Tar com exclude no Linux, principalmente no Suse …

Em algumas distribuições do Linux o danado do exclude tem que vir antes do que realmente vc quer que o tar capture, segue exemplo, neste caso o primeiro exclude é para diretórios e o segundo para arquivo

tar -Mcvf  teste.tar –exclude=/etc/postfix –exclude=/etc/aliases /etc

Publicado por: Gustavo Henrique | Fevereiro 10, 2009

Exemplo no Linux, como Verificar Versão, Download e Atualiza …

Pessoal bom dia segue um resuminho de como verificar a versão de um determinado comando, depois disso faremos um download de uma versão mais atual e depois atualizaremos …

Verificando a versão

rpm -qi tar

download

wget ftp://rpmfind.net/linux/SuSE-Linux/i386/update/10.0/rpm/i586/tar-1.15.1-9.7.i586.rpm

atualizando

rpm -U tar-1.15.1-9.7.i586.rpm

 

pronto …

Publicado por: Gustavo Henrique | Fevereiro 7, 2009

Planilha para Controle de Orçamento.

Publicado por: Gustavo Henrique | Fevereiro 3, 2009

Diferença entre Datas no Delphi …

Diferença de datas no Delphi, use a função DaysBetween do próprio Delphi,

DaysBetween(Date(),DateTimePicker1.DateTime);

Postagens Antigas »

Categorias