quinta-feira, janeiro 27, 2005

PowerBuilder - Verificar se uma aplicação está sendo executada

//Declare as seguintes external functions
FUNCTION ulong CreateMutexA (ulong lpMutexAttributes, boolean InitialOwner,ref string lpName) library "kernel32.dll"
FUNCTION ulong GetLastError () library "kernel32.dll"
FUNCTION ulong CloseHandle(ulong hMutex) library "kernel32.dll"


//NO seu códiog, faça o seguinte
string ls_aplicacao
uint rc1,rc2
boolean lb_inherit

lb_inherit=false
ls_aplicacao="sua_aplicação.exe"
rc1=CreateMutexA(0,lb_inherit,ls_aplicacao)
rc2=getlasterror()
if rc2=183 then // mutex existe
CloseHandle(rc1)
MessageBox("Atenção", "Aplicação já esta rodando")
else
Messagebox("Solicitação será Executada", "Aplicação será iniciada.")
end if

sexta-feira, janeiro 21, 2005

SQL Server – Problemas com Formato da Data

Em alguns casos, ocorrem erros de conversão de datas para o SQL Server, com a seguinte mensagem:

Server: Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

Este erro pode ocorre com apenas um Login especifico no banco de Dados SQL Server ou com todos os logins.

Isto ocorre porque o Login do SQL Server possui um idioma que ele irá utilizar. Na maioria das instalações, o SQL Server é instalado em English e os Logins assumem o idioma default da instalação do SQL Server.

Mas, está cada vez mais comum a instalação do SQL Server em idiomas específicos (português, Francês, espanhol e ect...). Neste caso, o idioma default vai ser o da instalação do SQL Server. Em outros casos, este idioma pode ser trocado, para apenas um Login ou para todos os Logins, gerando o erro acima.

Para resolver o erro citado no inicio, você tem duas soluções.

A primeira é identificar com o formato de data/hora que você está utilizando e padronizar os seus logins com o idioma que atende aquele formato de data/hora.

A segunda solução seria converter o valor para datetime, passando o formato que você está utilizando. Considero está solução melhor, pois você fica livre de problemas gerados por alteração de configuração de Logins.

Por exemplo

select convert(datetime,'2002-01-21 12:59:12.150' , 101 )

Se você trocar o 101 por 103, você vai notar que vai dar erro, pois o formato de data 103 é o seguinte formado

select convert(datetime,'21/01/2002 12:59:12.150',103)

Que é o formato de data utilizado no Brasil.

Boa Sorte

quinta-feira, janeiro 20, 2005

DotNet – Visual Studio não reconhece PocketPC Device

Em algumas situações, quando utilizamos o Visual Studio 2003 para desenvolvimento para Mobile Devices ( Pocket PC e Smart Phone), recebemos a seguinte mensagem

Error: Cannot establish a connection. Be sure the device is physically connected to the development computer.

Este erro ocorre pois o Visual Studio não conseguiu encontra o seu Device e muitas vezes é gerado pela reinstalação ou update do Active Sync no PC.
Tentei “N” soluções para resolver o problemas, inclusive os listados nos site
http://download.microsoft.com/download/c/d/b/cdbff573-73fb-4f9f-a464-c5adc890e1ae/Readme.htm#CEDeploy

Tentei reinatalar o Visual Studio 2003 duas vezes, limpei as chaves do registry, rodei o ProxyPorts.Reg e fiz N tentativas.

Depois de uma semana tentando resolver o problema, consegui achar a solução que resolveu o meu problema.

Abaixo estão os passos que segui:

1. Remover totalmente activesync.
2. Reinstalar de novo.
3. Executar C:\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\WinCE Utilities\WinCE Proxy Ports Reg\ProxyPorts.Reg
4. Verificar [HKLM\microsoft\wince services] os registros para as portas do proxy
5. Si [HKLM\microsoft\wince services] se não existe, o seu problema é outro e este roteiro não vai corrigi-lo.
6. Si [hKLM\microsoft\wince services] se existe, então executa "DelDesktopCryptKey.exe" em "C:\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\WinCE Utilities\DelDesktopCryptKey"
7. Executar um Soft Reset no Pocket pc.
8. Copiar "DelCryptoKey.exe" armv4 version para o pocket pc e executá-lo no Pocket PC
9. Antes de iniciar a compilação no Visual Studio, assegure que tenha instalado o utilities v1.1 for VS.NET 2003 add-ons .
10. No Visual Studio, selecionar tools->select windowsce device cpu
11. Selecionar armv4 e pressionar configurar
12. Teste

Esta configuração funcionou perfeitamente no me caso. A minha configuração é a seguinte:
Pocket PC
Dell Axim X30
Windows Móbile 2003
Active Sync 3.7.1
PC
Windows XP Sp 2
Visual Sudio 2003

segunda-feira, janeiro 17, 2005

Ferramentas Case

Ferramentas Case, ErWin, CaseStudio, Dr. Case, Visio e Together. Qual é a melhor opção para se trabalhar com o SQL Server 2000? Tire suas dúvidas e veja qual atende melhor as suas necessidades

Comparando o SQL Server com Outros Bancos de Dados

Você está comprando um novo Sistema Gerenciador de Bancos de Dados Relacional? Quer comparar seu sistema atual com o SQL Server? Veja o que analistas independentes estão dizendo sobre o SQL Server, como ele difere do Oracle, IBM, e Sybase, e encontre recursos que o ajudarão a migrar ou integrar seu sistema de bancos de dados atual.

SQL Server 2000 - Alta Disponibilidade

Maximize a disponibilidade de suas aplicações comerciais com log shipping, backups on-line e clusters failover. Leia este artigo e conheça melhor as soluções de alta disponibilidade oferecidas pelo SQL Server 2000.O Microsoft SQL Server 2000 ajuda a maximizar a disponibilidade através de backups online, log shipping completamente integrados e clusteringfailover potencializado. Destes métodos, o backups online está disponível tanto no SQL Server 2000 Standard Edition quanto no SQL Server 2000 Enterprise Edition. Log shipping e clustering failover estão disponíveis somente na Enterprise Edition

sexta-feira, janeiro 14, 2005

PowerBuilder - Inserindo objeto via metodo post

By Celso S. Côrtes

//Inserindo objeto via metodo post
Blob lblb_args
String ls_headers
String ls_url
String ls_args
long ll_tam
integer li_ret
li_ret= GetContextService( "Internet", iinet_base )
IF li_ret = 1 THEN
ir = CREATE n_ir
ls_url = "http://sua_url/xxxx/parametros?"
ls_args = "id=nome&pwd=senha"
lblb_args = Blob( ls_args )
ll_tam = Len( lblb_args )
ls_header = "Content-Type: " + &
"application/x-www-form-urlencoded~n" + &
"Content-Length: " + String( ll_tam ) + "~n~n"
li_rc = iinet_base.PostURL( ls_url, lblb_args, &
ls_header, ir )

Banco de Dados - Funções do SQL Server X Oracle

Neste Site você tem uma lista das funções do SQL Server e quais são as funções compativeis no Oracle.

quinta-feira, janeiro 06, 2005

SQL Server 2000 - Identificando Versões

Versões do SQL Server
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

* 2000
- 2000.80.194 = RTM (Primeira Versão)
- 2000.80.384 = SP1
- 2000.80.534 = SP2
- 2000.80.760 = SP3 ou SP3a

SQLServer 2000 - Replicação

- Informacoes
1. Snapshot Agent : Replicacao Inicial, sincronismo ( Este processo é pessado e bloqueia o banco por um certo tempo)
2. Log Reader Agent : Replica as transacoes do Publisher para o Distribution
3. Distribution Agent : Replica as transacoes do Distribution para o subscriber
4. Merge Agent : processo de replicacao para os dois lados, responsavel por resolver conflitos

- Passos para configurar a Replicaçao
1. Definir o cenario : Central Publisher
2. Definir o metodo : Transaction replication
3. Criar Usuario Utilizado : o usuario deve ter acesso de Administrators, system
4. Associar o usuario com os servicos MSSQL e AGENT
5. Habilitar o servidor de Publicacao (configurar o distribution e o publisher). Chamar o wizard e lembrar de informar um diretorio que possua espaco para o distribuition(de preferencia coloque o diretorio em um disco diferente para ganho de performance)
6. Se houver triggers, marcar a opçao de NOT FOR REPLICATION para que os dados nao sejam alterados 2 vezes
7. Em todas as Constraints, marcar a opçao de NOT FOR REPLICATION para que os dados nao sejam validados 2 vezes
8. Criar as publicacoes : utilizar o wizard, selecionar transactional publication, ir no botao de DEFAULT ARTICLES e marcar triggers e DRI, selecionar as tabelas (se existir alguma tabela com coluna identity, a propriedade identity nao sera levada)
9. Verificar se os bancos no subscribers estao vazios.
10. Criar Subscribers : Definir se vai ser Pull (configurado em cada subscriber) ou Push (configurado no servidor de publicacao, mais simples), marcar para realizar o Snapshot
11. Monitorar :
12. Backup : Publisher(Published DB, msdb, master), Distributor (distributor DB,msdb,master), subscriber(subscriber db), o published e distribution db devem ser backupiados juntos
13. Resolvendo erro : Se ocorrer erro na replication, retire o subscriber, reinsira o mesmo e faca um sincronismo. Entre nas opcoes da publicacao e mande reinicializar o subscriber, depois rode o servico de snapshot, quando acabar, rode o servico do subscriber.


Sql Anywhere - Informações sobre este sgbd

Este link traz todas as informações necessárias sobre o SGBD SQL Anywhere.

quarta-feira, janeiro 05, 2005

Dicas Gerais - Aumentar a conta do Hotmail para 250 MB

Galera,
fiz o teste e funcionou. Se você quiser aumentar a sua caixa posta do Hotmail de 2 MB para 250 MB, siga os passos abaixo.

Hotmail 250mb de espaço Aumente sua conta do hotmail de 2mb para 250mb.
Explicações: Não é necessario pagar nada para aumentar o espaço da sua conta.
Como podem ver na Ajuda do hotmail, no Brasil ainda "em breve" as contas passarão ter mais espaço de armazenamento. Abaixo iremos mostrar como alterar o país configurado e assim aumentar o tamanho da conta:
Somente em contas @hotmail.com.
1. Acesse www.hotmail.com.br e entre com seu usuário e senha normalmente.
2. Clique em opções, no canto superior direito da tela:
3. Na página opções, clique em Meu Perfil:
4. Trocar campos:País/Região: Estados UnidosEstado: FloridaCEP: 33332
Você pode usar outros estados, caso o cep esteja correto.
5. Atualize, e na página seguinte irá mostrar uma mensagem: Seu Perfil foi atualizado com sucesso.
6. Acesse o link http://www.hotmail.msn.com/cgi-bin/accountclose e clique no botão encerrar minha conta, no final da página:
Obs: Você não perderá seus e-mails, contatos do MSN Messenger, etc.
7. Irá para uma página de confirmação de encerramento:

8. Acesse novamente www.hotmail.com.br e entre com o mesmo e-mail e senha... Pedirá para você ativar a conta, aceitar o termo de uso, promoções e etc..
9. Pronto sua conta já terá 25mb:

Após 30 dias sua conta aumentará para 250mb automaticamente, neste período não deixe de acessar seu e-mail.

PowerBuilder - enviar e-mail via SMTP

Qual falamos em enviar e-mail via SMTP, queremo dizer, sem utilizar software de e-mail (outlook, Netscape, Eudora e etc...)
O PowerBuilder não tem suporte a este recurso, tendo que utilizar aplicações externas para isso. Existe N aplicações que fazem o que queremos. Encontrei uma livre na Internet que funciona muito bem. O nome da aplicação é BLAT (http://www.blat.net/).
Ela funciona da seguinte forma.
* Você tem que possuir uma servidor SMTP funcionando na sua rede. O Exchange Server possui este recurso, só é necessário abilita-lo e configura-lo.
* Você pode chamar um aplicativo (BLAT.EXE) passando os parâmetros necessários ou uma função de uma dll (BLAT.DLL) que envia o e-mail para você.

PowerBuilder – Migração de versão

Nas migrações para PowerBuilder 5,6 e 7, ocorreram vários problemas e por isso, toda vez que temos uma versão nova do PowerBuilder, sempre aparece a pergunta “Vamos ter problemas na migração?”.

Já realizei todo o tipo de migração e notei que as migrações para PowerBuilder 8,9 e 10 são bem tranqüilas, bastando compilar os objetos no novo PowerBuilder. Na migração para PowerBuilder8, ainda ocorreram alguns problemas, como o desaparecimento de scripts (em alguns eventos, o código simplesmente desaparecia), mas na migração para PowerBuilder 9 e 10, não tive nenhum problema e nem parece que você está fazendo uma migração, mas apenas executando um Full Rebuild na aplicação
Ponto positivo para o PowerBuilder

PowerBuilder VERSUS Windows 9x

Até a versão 8 do PowerBuilder, um executável gerado podia ser executado em qualquer sistema operacional Windows 95 ou superior.
A partir do PowerBuilder 9, o executável não mais funcionará em Windows 95, sendo necessário o Windows 98 ou superior de acordo com a documentação da Sybase. Já ouvi relatos de pessoas que tiveram problemas com Windows 98, mas não conseguimos identificar se era limitação do PowerBuilder ou da aplicação.
A partir do PowerBuilder 10 as restrições ficam maiores ainda. O próprio PowerBuilder 10 só pode ser instalado no Windows 2000 ou XP. A aplicação compilada ( executável ) do PowerBuilder 10 funcionará apenas no Windows 2000, 2003 e XP. Assim, ficam excluídos os sistemas operacionais Windows 95, 98, Me (Millennium) e NT.Essa informação é muito importante para quem pretende migrar os seus sistemas para PowerBuilder 9 ou 10.

quinta-feira, dezembro 30, 2004

PowerBuilder - Trabalhando com o Visual Source Safe

Anexando um sistema ao Source Safe – PowerBuilder 8
a) SS – Criar projeto no SS (Source Safe)
b) SS – Criar estrutura de diretórios do projeto no SS
c) SS – Dar permissão de acesso aos integrantes da equipe. Sugere-se:
i. Para toda a equipe
i. $\powerBuilder – R (ler e copiar arquivos)
ii. $\powerBuilder\Dese\ - R, C, A (acesso full)
iii. $\powerbuilder\prod\ - R (ler e copiar arquivos)
ii. Para os coordenadores:
i. $\powerbuilder\ - R (ler e copiar arquivos)
ii. $\powerBuilder\Dese\ - R, C, A, D (acesso full e destruição de objetos)
iii. $\powerbuilder\prod\ - R, C, A, D (acesso full e destruição de objetos)
d) Instalar SS e configurar PB. No library Painter, ir para as propriedades do WorkSpace e na pasta Source Control, configurar o Controle de Versão da seguinte forma:
i. Source Control System : Selecionar Microsoft Visual SourceSafe;
ii. UserId : Informar o seu usuário de rede (Caso não possua acesso ao SourceSafe, solicitar permissões para o Suporte ao Desenvolvimento);
iii. Project : Selecionar o nível inicial do projeto no Source Safe
iv. Local Root Projeto : Aqui deve ser informado o diretório de trabalho local em cada máquina. Recomendamos que seja colocado um padrão entre as equipes (Por exemplo, C:\att\Fontes) e nesse diretório seja gravado o arquivo do WorkSpace. Abaixo desde diretório deve estar todos os fontes que serão colocados no SourceSafe;
v. Require Comments on ChekIn : Essa opção obriga ao desenvolvedor sempre informar um comentário quando for feito o ChekIn, mantendo-se a documentação de alterações atualizada. No padrão da att, foi definida que essa opção é obrigatória e deve estar marcada;
vi. Delete PowerBuilder Generated Object File : Informa ao PowerBuilder se você quer manter uma cópia local dos arquivos que são utilizados pelo SourceSafe (*.SR*). Se você marcar essa opção, pode notar que um perda de performance, pois o PowerBuilder tem que gerar e excluir estes arquivos a cada solicitação ao SourceSafe.
vii. Perform Diff On Status Update : Verifica e exibe quais objetos estão diferentes do Servidor, permitindo você saber se existe algum objeto que você está trabalhando e que foi alterado no Servidor. É aconselhável manter está opção selecionada. Essa opção pode gerar uma perda de performance.
viii. Status Refresh Rate : Tempo utilizado pelo PowerBuilder para verificar se os objetos no SourceSafe estão diferentes dos objetos locais. Quanto menor o tempo, mais acessos são feitos ao SourceSafe, por isso recomendamos deixar o valor default de 5 minutos.
e) Registrar objetos
i. Clique no Target com o botão direito e seleciona a opção Add to Source Control;
ii. Selecione a opção Select Multiple Files contained in this target e clique em OK;
iii. Na janela Add to SourceControl, desmarque os arquivos da Dr.Object e da Dr.Lock e clique em OK;
iv. Em alguns casos, foi observado que alguns objetos não foram inseridos no SourceSafe, se isso acontecer, insira os objetos restantes manualmente, selecionando-os, clicando com o botão direito e selecionando a opção Add to Source Control.
f) Objetos Utilizados em Várias aplicações
i. É aconselhável que se faça crie um novo projeto no SourceSafe para os objetos compartilhados
ii. Faça o registro destes objetos quando você for registrar a primeira aplicação que utiliza estes objetos
g) Instalando os Fontes em uma nova máquina
i. Copie os fontes de uma máquina existente, montando a estrutura igual a existente no SourceSafe
ii. Configure o WorkSpace para utilizar o VSS
iii. Execute um GetLastedVersion em todas as Target, de forma a atualizar os seus fontes locais com a versão do servidor;
Liberando versão/release/hotfix para produção
a) No Source Safe, estando com o projeto selecionado, acionar a opção label. Informar como label a palavra FIM + número da versão/release ou hotfix que está sendo liberado.
b) Através do Get, pegar a versão para compilar.
c) Sempre que uma versão/release ou hotfix for liberada é necessário avaliar as necessidades de propagação de código. O código deve ser propagado para todas as versões de numeração superior a que está sendo liberada.
d) Estando no projeto da versão que está sendo liberada, pedir um view history do projeto.
e) Anotar os objetos que sofreram modificação ou imprimir.
f) Em cada versão subseqüente a que está sendo liberada, marcar cada arquivo a ser mergeado (propagada as alterações) e acionar a opção merge branch files.

Gerando uma nova versão/release
a) Clicar na pasta base (bcco), onde será criada a nova versão.
b) SS / Share. Escolher versão original a ser copiada. Marcar checkbox Branch after share. Indicar nome da versão. Marcar checkbox recursive. Escolher close.
c) No Explorer: (i) criar diretório da nova versão (ii) copiar conteúdo e subdiretórios.
d) No PowerBuilder: (i) abrir aplicação da nova versão (ii) Configurar link (iii) mudar project name através da seleção do diretório; evitar informar o caminho.

quarta-feira, dezembro 29, 2004

PowerBuilder - Atualização de executável sem precisar do usuário sair

Olá a todos,
estava participando de um NewsGroup e apareceu a velha questão de como manter o executável na rede e não ter problema na hora de atualizar o mesmo. Existe uma solução, abaixo estou enviado a descrição:

Primeiro, em vez dos usuários executarem diretamente a aplicação, eles uma "pseudo" aplicação, que tem o mesmo nome do EXE da aplicação principal.
Essa pseudo-aplicação (tb escrita em PB) simplesmente lê o conteúdo de um arquivo texto no diretório corrente, e executa com run() o programa presente no conteúdo desse arquivo.
A aplicação real fica num subasta. O conteúdo desse arquivo texto seria por exemplo:
20030320\app.exe
Se eu precisar atualizar a aplicação, basta duplicar essa pasta com outro nome (ex 20030320_1), atualizar as PBDs necessárias e alterar o arquivo texto para:
20030320_1\app.exe
Os próximos usuários que entrarem no sistema já vão utilizar a nova versão.
Comentários e sugestões são bem vindos.

PowerBuilder - Sempre devo gerar executável ou posso distribuir apenas PBD´s

O PowerBuilder foi desenvolvido para que o desenvolvedor possa distribuir apenas PBD´s, como os aplicativos Microsoft permitem distribuir apenas DLL´s. Mas, o que vemos é que para trabalharmos dessa forma, devemos ter um ambiente de desenvolvimento muito organizado. Em uma conversa na Internet, chegamos a conclusão que apenas 10% das empresas que trabalhavam com PowerBuilder conseguiam distribuir apenas PBD´s com poucos erros.
Levantando informações sobre essas empresas, descobrimos que eles conseguem pelos seguintes fatores:
* Possuíam um grande controle dos fontes, sabendo todos as PBL´s que foram alteradas desde a última versão;
* Existe uma pessoa responsável apenas por gerar executável e envia-los para o cliente;
* Possuíam uma biblioteca que não sofria nenhuma Manutenção;
* Possuíam um ambiente de geração de executável ( Uma máquina que é apenas utilizada para a geração de executável. O desenvolvedor gera o executável na primeira vez e nas outras vezes ele apenas substitui as PBL´s alteradas e gera as PBD´s apenas dessas PBL´s)
* Nas raras vezes que é alterada alguma coisa na biblioteca, são apagados todos os executáveis e PBD´s da máquina, forçando todas as aplicações a gerar um novo executável completo.

O que é melhor gerar, PBD ou DLL?

É melhor gerar PBD, pois a DLL foi criada para manter compatibilidade com os aplicativos Windows e para ser utilizada na criação e distribuição de componentes. O Código PBD no PowerBuilder é muito mais rápido que a DLL.