quarta-feira, janeiro 30, 2008

Habilitando e desabilitando Triggers no SQL Server via T-SQL

Essa é uma "diquinha" bem simples, de um recurso que nem todos que lidam com o SQL Server conhecem. Através do Transact SQL (T-SQL) é possível habilitar e desabilitar triggers, sem a necessidade de excluí-las ou comentá-las (como a maiores do pessoal faz). A sintaxe é bem simples:

alter table nome_tabela
[disable, enable] trigger nome_trigger


Exemplo

Suponha que se tenha a tabela tab_venda, e nela uma trigger chamada trg_atualiza_limite_cliente. Para desabilitar essa trigger, a linha SQL ficaria como a seguir:


alter tabl
e
tab_venda

disable trigger trg_atualiza_limite_cliente


Para habiltá-la novamente, substitua disable por enable. Simples não?

Até +

sábado, janeiro 26, 2008

Exportando tabelas do MS Access para Excel ou HTML usando ADO

Salve pessoal,

Um recurso bem interessante porém pouco conhecido sobre o ADO, é que ele permite através do JET (mecanismo usado para acessar bancos de dados Access) a possibilidade de exportação direta para planilhas do Excel (XLS) e arquivos HTML. Pensando nisso, revolvi postar um exemplo de como se fazer isso em Delphi, vamos lá!

Primeiramente, criamos um formulário com os elementos mostrados abaixo:

Temos aí:
  • 3 Tbitbtn: btnAbrir, btnExportaXLS e btnExportaHTM;
  • 1 TListbox: listTabelas, que seá usado para exibir as tabelas presentes no database;
  • 1 TADOConnection: conAccess, responsável por estabelecer a conexão com o database;
  • 1 TOpenDialog: openDialog, que será usado para selecionar o banco de dados a ser usado;

Codificação

Declare uma função na sessão private da unit, com o seguinte header:

function TabelasADO(ADOConnection: TADOConnection):TStringList;

Seu corpo deve ficar como abaixo:

function TfrmExemplo.TabelasADO(ADOConnection: TADOConnection): TStringList;
var ADODataSet: TADODataSet; Tabelas: TStringList;
begin
Tabelas := TStringList.Create;
ADODataSet := TADODataSet.Create(nil);
ADODataSet.Connection := ADOConnection;
ADOConnection.OpenSchema(siTables, EmptyParam, EmptyParam, ADODataSet);

//Filtra somente as tabelas
ADODataSet.Filter := adicionaFiltro(ADODataSet.Filter, '(TABLE_TYPE = ''TABLE'')');
ADODataSet.Filtered := True;

with ADODataSet do
begin
First;
while not EOF do
begin
Tabelas.Add(FieldByName('TABLE_NAME').AsString);
Next;
end;
end;

ADODataSet.Free;
Result := Tabelas;
end;

Precisaremos também de outra função:
function adicionaFiltro(string1, string2: string): string;
Com o código listado abaixo:
function TfrmExemplo.adicionaFiltro(string1, string2: string): string;
begin
if string1 <> '' then
Result := string1 + ' or ' + string2
else
Result := string2;
end;

O evento onClick do botão btnAbrir fica como a seguir:

procedure TfrmExemplo.btnAbrirClick(Sender: TObject);
var stringConexao: string;
begin
stringConexao := EmptyStr;

if openDialog.Execute then
begin
stringConexao := Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False',[openDialog.FileName]);
conAccess.ConnectionString := stringConexao;
conAccess.Connected := True;
listTabelas.Items := TabelasADO(conAccess);
end;
end
;

Por fim, o evento onClick do botão btnExportaXLS, que também é compartilhado com o botão btnExportaHTM, reaproveitando código:

procedure TfrmExemplo.btnExportaXLSClick(Sender: TObject);
var nomeTabela, instrucaoSQL: string;
begin

nomeTabela := listTabelas.Items[listTabelas.ItemIndex];

if Sender = btnExportaXLS then
instrucaoSQL := 'select * into ' + nomeTabela + ' in "c:\doctemp\' + nomeTabela + 'FromAccess.xls" "Excel 8.0;" from ' + nomeTabela
else
instrucaoSQL := 'select * into [' + nomeTabela + '.htm] in "c:\doctemp" "HTML Export;" from ' + nomeTabela;

try
conAccess.Execute(instrucaoSQL);
MessageDlg('A tabela ' + nomeTabela + 'foi exportada com sucesso para o formato selecionado!', mtInformation, [mbOk], 0);
except
MessageDlg('Não foi possível exportar a tabela "' + nomeTabela + '"', mtError, [mbOK], 0);
end;

end;

Algumas consideração a fazer: meu formulário se chama frmExemplo; eu possuo uma pasta chamada "doctemp" em minha máquina, que é para onde eu exporto meus arquivos, uso isso no código e é provável que precisem modificar isso.

Bem, quem estiver precisando, pode fazer o teste e, em caso de dúvidas sobre algum trecho do código, é só comentar.

Abraços e até a próxima.

quarta-feira, janeiro 23, 2008

Comentários

Quando iniciei este blog nunca tive a pretenção de torná-lo um "hit" na blogosfera, e por isso mesmo estou surpreso com o número de acessos que ele tem tido nos últimos meses. Uma de minhas preocupações sempre foi a de publicar tópicos para os quais eu não encontrava nada relacionado na net, afinal, tem alguns assuntos que já são "arroz de festa", ou seja, e vê em tudo o que é site, e ficar falando sobre eles é no mínimo redundante. Parece que a receita deu certo, já que os tópicos aqui publicados estão sendo bastante acessados.

Para se ter uma idéia mais precisa sobre o público que visita o blog, gostaria de pedir um favor a todos que se utilizarem dos tópicos aqui relacionados: comentários! Isso mesmo, comentários!

Sempre que fizerem uma visita, deixem um comentário, com o nome, o que faz e o que achou do tópico, assim posso direcionar, aumentar e melhorar o nível das postagens.

Desde já um abraço a todos e obrigado pela visita, voltem sempre!

sábado, dezembro 29, 2007

Mobilidade

Salvem,

Depois de uma longa ausência, eis-me aqui novamente; o que não é grande coisa. Não sei se isso interessa a alguém, mas agora entrei na era da mobilidade, adquiri meu primeiro notebook!

Ele não é "aquele" notebook, mas é uma maquininha de respeito: Dell Vostro 1000, processador AMD Turion 64 x2, 1 GB de RAM, HD de 120 GB, Wireless, gravador de DVD; dá pra brincar sem passar raiva.

Aqui vai uma fotinha dele tirada com o celular, ainda com os plásticos de fábrica, que por sinal, me conhecendo como conheço, sei que vão ficar alí por um bom tempo!


Até mais!

domingo, novembro 25, 2007

Update usando Case

Dias atrás um colega meu de trabalho precisava realizar um UPDATE condicional, ou seja, atualizar o campo em função de outro campo. Ele logo disparou: "Dá pra usar CASE em UPDATE?".

Ficamos naquela, dá, não dá? Procuramos na net, fizemos um teste e vimos que era mesmo possível fazer isso. Confesso que nunca tinha usado isso, mas a instrução funciona que é uma beleza.

Pra mostrar como ficou a solução, vamos fazer um exemplo. Imagine que temos uma tabela de preços e precisamos ajustá-la da conforme abaixo

  1. Produtos com preço até R$ 100 sofrem reajuste de 5%;
  2. Produtos com preço de R$ 101 a R$ 500 sofrem reajuste de 3%;
  3. Produtos com preço acima de R$ 500 sofrem reajusto de 1,5%;
A intrução ficaria parecida como abaixo:

update tab_preco
set preco =
case
when preco <= 100
preco * 1.05
when preco > 100 and preco <= 500 then preco * 1.03 when preco > 500 then preco * 1.015
end


Como se vê, é muito simples e extremamente funcional. Poderia ter sido usado o valor de outro campo para a condição. Exemplo:

update tab_preco
set preco =
case grupo
when 'LIMPEZA' then preco * 1.05
when 'ALIMENTACAO' then preco * 1.1
when 'VESTUARIO' then preco * 1.05
else preco * 1.02
end


Até +

quinta-feira, novembro 22, 2007

Máscara em Campos Agregados - Alternativa

Salve,

Não me lembro de ter feito isso antes, e hoje precisei colocar máscara (DisplayFormat) em um campo Agregado (TAggregate) de um ClientDataSet, e não sei por que cargas d'água não consegui. O negócio simplesmente não funciona de jeito nenhum! Tentei várias máscaras, mudei propriedades, mas nada.

Como estava com pressa, não "googlei" muito, e acabei resolvendo o problema de forma caseira. A solução foi implementar o evento OnGetText do campo agregado e depois compartilhar o evento entre os agregados. Ficou assim:

procedure TfrmMeuFormulario.cdsExemplototal_pesoGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
//Outras mascaras podem ser usadas
Text := FormatFloat('#,##0', Sender.Value);
end;

Aliás, quem tiver a solução definitiva para esse problema podem apresentar à vontade, pois eu também gostaria de saber.

quarta-feira, setembro 26, 2007

Versões mais usadas de Delphi

Salve Pessoal,

Há alguns dias estava no ar no meu blog uma enquete sobre a versão mais utilizada do Delphi, que foi submetida à votação de desenvolvedores de todo o país, que participam de comunidades e foruns relacionados ao Delphi. O resultado está a seguir, e confesso que não fiquei surpreso.
Abraços.

Versão Utilização
Delphi 7 57,35%
Delphi 2006 16,18%
Delphi 5/6 8,82%
Delphi 2007 7,35%
Outra versão 5,88%
Delphi 2005 4,41%

sábado, setembro 08, 2007

Criptografia sem frescura

Hoje precisei criptografar uma string, nada muito sofisticado, apenas não deixar que ela ficasse totalmente exposta na tabela do banco de dados. Dei uma procurada na WEB e encontrei várias soluções, mas a que usei foi uma que encontrei no site Planeta Delphi, enviada pelo colega Roberto Oliveira, que me atraiu pela simplicidade de uso, sem frescura, mas com total funcionalidade. Abraço a todos e segue abaixo a função.

function Criptografar(wStri: String): String;
var Simbolos: array [0..4] of String;
x : Integer;
begin

Simbolos[1]:= 'ABCDEFGHIJLMNOPQRSTUVXZYWK ~!@#$%^&*()\';

Simbolos[2]:= 'ÂÀ©Øû׃çêùÿ5Üø£úñѪº¿®¬¼ëèïÙýÄÅÉæÆôöò»Á';
Simbolos[3]:='abcdefghijlmnopqrstuvxzywk1234567890';
Simbolos[4]:='áâäàåíóÇüé¾¶§÷ÎÏ-+ÌÓ߸°¨·¹³²Õµþîì¡«½';

for x := 1 to Length(Trim(wStri)) do
begin

if pos(Copy(wStri,x,1),Simbolos[1]) > 0 then
Result := Result + Copy(Simbolos[2],Pos(copy(wStri,x,1),Simbolos[1]),1)
else if Pos(Copy(wStri,x,1),Simbolos[2]) > 0 then

Result := Result + Copy(Simbolos[1],Pos(copy(wStri,x,1),Simbolos[2]),1)
else if Pos(Copy(wStri,x,1),Simbolos[3]) > 0 then

Result := Result + Copy(Simbolos[4],Pos(copy(wStri,x,1),Simbolos[3]),1)
else if Pos(Copy(wStri,x,1),Simbolos[4]) > 0 then

Result := Result + Copy(Simbolos[3],Pos(copy(wStri,x,1),Simbolos[4]),1);
end;
end;

Abraços

quinta-feira, setembro 06, 2007

Tim WEB

Como já comentei, recentemente contratei um pacote do plano TIM WEB, que permite acesso móvel à internet em qualquer área coberta pela Tim.
Já fazia um tempo que buscava um opção viável, principalmente no aspecto econômico, de poder acessar a WEB da minha propriedade rural, que fica a no interior paulista, mais precisamente em Barretos, a 30 Km da cidade, onde não há telefonia cabeada e que fica fora de alcance de Internet via rádio.
Minha propriedade não fica em um local muito alto, e ainda possui muitas árvores em torno, o que causa uma forte atenuação de sinais de radiofrequência, mas que não impede que sinais de telefonia celular cheguem até lá, e foi justamente isso que me deixou "na pilha" quando eu soube desse plano, me fazendo adquirí-lo as cegas e as pressas, já que segundo informação da loja credenciada Tim, apenas 2 modens vieram no primeiro "lote", o que fez com que eu fosse a cobaia desse serviço em minha cidade.
A Tim oferece 3 pacotes no plano WEB: um de 40MB de tráfego, com mensalidade de R$ 9,90 e modem por R$ 399, um de 250MB, com mensalidade de R$ 19,90 e modem por R$ 199 (o que optei), e o último, que permite até 1GB de tráfego, com mensalidade nos 6 primeiros meses de R$ 49,90 e modem grátis.
Por falar em modem, há 2 opções, mas sem escolha para o usuário, dependendo da região e do lote; um da brasileira Telsec e outro da chinesa Huawei. No meu caso fui "sorteado" com o da empresa chinesa, e como não tinha escolha, nem levei isso em consideração, mesmo não tendo encontrado boas indicações de seus usuários, mas confesso que ou tive sorte mesmo ou o aparelhinho é bom, pois até agora não tive problemas. A instalação foi tranquila, e já fiz isso em 3 máquinas, eu navego e faço downloads a boas taxas, na casa de 4-6 KB/s, mesmo com um sinal fraquinho, taxa que até supera a do acesso discado.

Estatísticas e velocidade da conexão do plano TIM WEB

Portanto, pra encerrar vamos a uma resumo:
  • Plano/Valor: 250MB / R$19,90 mensais;
  • Modem: Huawei e220;
  • Velocidade: 4-6 KB/s;
  • Intensidade do sinal: fraca;
  • Local: difícil acesso;
  • Grau de satisfação (nessas condições): muito satisfeito!

Até a próxima!

sexta-feira, agosto 31, 2007

Enquete

Essa semana me perguntaram: "qual é a versão mais usada do Delphi? " Honestamente, não tive resposta, já que o que possuía eram apenas respostas aleatórias de um e outro colega. Pensando nisso e aproveitando esse novo recurso do Blogger, decidi montar uma enquete para que a comunidade possa responder a essa pergunta, e assim também servir de amostra para o que acontece no mercado. Um abraço e obrigado a todos que responderem.

quinta-feira, agosto 30, 2007

Internet Móvel

Já fazia um tempão que eu não postava nada aqui no blog, e não era por falta de motivação ou de assunto, mas sim, por falta de oportunidade. É que desde março que sou um "sem teto", pois estou reformando minha casa e estou ficando na sítio do meu pai, e lá, internet nem pensar. Do trabalho não achava legal postar, por vários motivos: tempo, privacidade e até mesmo ética, afinal não sou pago pra escrever blogar.

Pra minha sorte a TIM lançou um novo serviço chamado TIM WEB, que permite se conectar à internet em qualquer local onde haja cobertura dessa operadora. A conexão se dá através de um modem USB, e pode ser conectado em desktops e notebooks de maneira muito simples.

No meu próximo post comentarei sobre o serviço, os preços, a velocidade e como estou usando essa tecnologia. Até lá!

sexta-feira, julho 27, 2007

Brasil só ganha da Colômbia em uso da internet na América Latina

O Brasil lidera na América Latina em número de usuários da Internet, mas só supera a Colômbia em penetração, ou seja, na relação entre a quantidade de pessoas que freqüentam a web e a população total do país.

Alguns números de junho de 2007:

  • 15,8 milhões de brasileiros visitaram pelo menos uma página da Internet neste período;
  • Isso representam 11% da população do Brasil. Enquanto no Chile esse número foi de 45%, na Argentina, 24%, no México, 14%, e, na Colômbia (a pior colocada), 9%;
  • 32 horas por mês, esse é o tempo médio que o brasileiro navega, acima da média mundial que é de 25 horas/mês;
  • O brasileiros visitam em média 3371 páginas/mês, 44% a mais que a média da América Latina e 33 acima da média mundial;
  • O Brasil aprensentou 18 mi de usuários ativos de Internet, ou seja, que acessaram regularmente nos últimos 30 dias;
A expansão no Brasil deve ser impulsionada pelo aumento na venda de computadores, estimulada pela redução do preço após corte de impostos.

Os dados foram levantados pela empresa comScore, uma das mais respeitadas no setor de pesquisas do mundo digital, sendo que essa é a primeira vez em que ela faz um levantamento sobre o uso de internet na América Latina.


Fonte Folha de S.Paulo

terça-feira, julho 17, 2007

Velório Virtual

Muitas vezes ouvimos dizer que a Internet está na infância em se tratando de aplicações disponíveis, o que significa que ainda há muito que a se explorar de suas possibilidades de uso. Dias atrás tive certeza disso, pois, em São José dos Campos a empresa organizadora municipal Urbam está transmitindo velórios em tempo real, via Internet.
Num primeiro momento pode até parecer mórbido, mas de fato não é. Pode acontecer de perdermos subitamente pessoas queridas e não termos condições de ir pessoalmente até o velório, por causa de uma viagem, por exemplo. Neste caso, o "Velório Virtual" pode ser uma alternativa para uma último adeus.

sexta-feira, junho 29, 2007

No mínimo, triste....

Hoje de manhã, na consulta matinal a minha Caixa de Entrada, para minha surpresa recebi a notícia que o site jornalístico No Minimo estava sendo descontinuado. Corri para acessar o site para ver se era verdade e, de fato, o site estava sendo fechado, e o motivo: falta de interesse de patrocinadores.
É uma pena, uma pena mesmo, não só porque o conteúdo do site era ótimo, com excelentes colunistas, que usavam de criatividade e bom humor para tratar dos mais diversos assuntos, mas também, por ver que em nosso belo país, conteúdo não desperta interesse, enquanto banalidades e assuntos sem valor arrastam centenas de anunciantes para sites que nada acrescentam.
Fica aqui nosso agradecimento a equipe do site No Minimo e o desejo de que tenham sucesso em suas novas empreitadas.

sexta-feira, junho 22, 2007

De mãozinhas dadas

Salve,

Acharam que eu tinha abandonado esse blog né? Estavam enganados! Pra alegria geral (acho que só minha) estou de volta.

Quero retomar meus posts comentando, para quem ainda não sabe, a parceria firmada no dia 1 de maio entre o projeto Ubuntu Linux, mantido pelo Canonical, e a Dell computadores. Como devem saber, a Dell é uma gigante mundial em venda direta de computadores, e o projeto Ubuntu é uma ousada iniciativa de distribuição gratuíta, em nível mundial, do sistema operacional do pinguim, que envia CD's diretamente a quem solicitar.

Em minha humilde opinião, a Microsoft deveria olhar atentamente para essa parceria, pois o Ubuntu Linux é uma distribuição fantástica. Leve, bonita, intuitiva, que pode até mesmo ser executada sem instalação, e que agora, com essa parceria, certamente vai ganhar visibilidade e muitos usuários. Você pode estar perguntando: quem ganha com isso? A Dell? Que poderá vender seus computadores com preço mais acessível ainda? O Ubuntu Linux? Que agora pode ganhar mercado e deixar de ser um projeto "filantrópico"?

Certamente que as duas ganharão com a parceria, no entanto, mais alguém pode sair ganhando: o usuário de computador, que poderá agora experimentar um SO alternativo veloz, eficiente, seguro e que, o melhor de tudo, não custa nada

sábado, abril 21, 2007

Férias

No período de 23 de abril a 13 de maio estarei de férias, por isso escreverei menos (isso é possível?) :)
Vai ser um período de descanso e reciclagem. Espero voltar com novidades.
Té+

Semana de Informática da ETE Cel Raphael Brandão

Acontece de 23 a 26 de abril a Semana de Informática da ETE Cel Raphael Brandão, onde serão realizadas palestras dos mais diversos temas relacionados a informática, desde de o seu uso na educação, até as modernas linguagens de desenvolvimento. Quem tiver oportunidade, visite. Maiores informações: www.etebarretos.com.br

sexta-feira, abril 13, 2007

IV Barretos Motorcycles


Para quem, como eu, passa grande parte do tempo sobre duas rodas, seja a trabalho, seja a lazer, acontece em Barretos de 27 a 29 de abril o IV Barretos Motorcyles. Atualmente já é considerado o segundo maior encontro de motociclistas do país. Sintam-se convidados.

terça-feira, abril 10, 2007

Será que já não vi esse filme?

Hoje, em uma lista de discussão sobre Delphi onde participam alguns funcionários da CodeGear, perguntei sobre o futuro dos Turbos, a sua linha de ferramentas populares e, como já imaginava, a resposta que tive não foi das mais animadoras, pois fiquei sabendo de que eles só serão atualizados depois do lançamento do BDS 2007 (codinome Highlander).
No fundo compreendo que a CodeGear tenha um interesse maior em seu "top de linha", pois, pra se ter uma idéia, o BDS 2006 Professional (D2006, C++Builder 2006 + C# Builder 2006) para novos usuários (a versão mais barata) custa hoje, em promoção, R$ 2.452,50, enquanto que qualquer um dos Turbos sai por R$ 1.200,00, ou seja, metade do preço. Será que já não vimos esse filme com o Kylix (alguém se lembra dele)?
Honestamente, acho que a CodeGear deveria focar mais nessa linha, afinal, quantos de nós desenvolvemos comercialmente em mais de uma linguagem? Eu pessoalmente, uso o Delphi e comecei agora a "brincar" com o C#, então pra quê eu quero Delphi, C++ e C# no mesmo pacote?
Tudo bem, se o preço fosse acessível como o do Visual Studio, que custa entre R$ 1.200,00 e R$ 1.700,00 e vem com IDE para C# e VB.NET. E com todo respeito a CodeGear, o VS dá um banho em termos de produtividade.

segunda-feira, abril 02, 2007

Cursos OnLine Gratuítos

O Next Generation é um site de atualização on-line, que oferece cursos gratuitos pela Internet. Os cursos são modulares e com certificado de conclusão, muito bom para você se manter atualizado .

Vale a pena conferir