Blog criado para documentar e disseminar o conhecimento tecnológico adquirido por Thiago Campos Pereira e colaboradores.
segunda-feira, dezembro 19, 2005
Diversos - Dica sobre gravadora de CD / DVD
tive um problema recente e talvez possa ajudar a alguns. Toda gravadora de CD / DVD, possui um software que roda dentro do drive. Este software recebe o nome de FirmWare.
Estava com problema com a minha gravadora de CD, onde a cada cd que eu gravava, eu perdia dois outros. Fui procurar a solução na Internet e descobri que quase todas as gravadoras de Cd / DVD (LG, Sony, TEAC, etc...) necessitam de atualização no FirmWare.
No meu caso a minha gravadora é LG e vi um artigo dizendo que todas as gravadoras da LG necessitam de atualização do FirmWare. Caso você não atualize, pode ter problemas com interrupção de gravação (perda do CD), baixa velocidade (no meu caso, só gravava CD em 16X. Após a atualização, comecei a gravar em 52X), não reconhecimento de alguns CDs, travamento da gravadora e etc...
Só uma observação, não sei se é verdade, mas vi um alerta dizendo que se ocorrer um problema no meio da atualização do FirmWare a sua gravadora pode parar de funcionar, necessitando ser enviada para uma autorizada. A atualização demora em média 10 segundos.
Abaixo via o Link da Lg para você pesquisar informações sobre o firmware da sua gravadora http://www.lge.com/support/software_gcsc.jsp
sexta-feira, dezembro 09, 2005
Diversos - Sua empresa não permite o Messenger
quarta-feira, dezembro 07, 2005
PowerBuilder – Problemas com Redimensionamento de janelas
Nos builds superiores ao 8004, se a janela estiver marcada com a opção de CENTER (Posicionar centralmente) o redimensionamento não funciona.
segunda-feira, novembro 28, 2005
Microsoft Visual SourceSafe - Boas Praticas
sexta-feira, novembro 25, 2005
Diversos - Foco na Solução
DIFERENÇA ENTRE "FOCO NO PROBLEMA" E "FOCO NA SOLUÇÃO"
Quando a NASA iniciou o lançamento de astronautas, descobriu-se que as canetas não funcionariam com gravidade zero. Para resolver este enorme problema, contrataram a Andersen Consulting, hoje Accenture. Empregaram uma década e 12 milhões de dólares. Conseguiram desenvolver uma caneta que escrevesse com gravidade zero, de ponta-cabeça, debaixo d'água, em praticamente qualquer superfície incluindo cristal e em variações de temperatura desde abaixo de zero até mais de 300 graus Celsius.
Os russos usaram um lápis...
Pensem nisso.
terça-feira, novembro 15, 2005
Windows XP - Dicas de Segurança
There are a few critical things you should do to insure the safety of your machine and, most importantly, your data.
- Back up your data. If something happens to your machine, you will still have your data.
- Keep your operating system and software up to date. Frequent security patches come out for Windows XP. These patches help protect your computer and data.
- Install and use anti-virus software.
- Do not create unnecessary accounts on your machine.
- Disable accounts you are not using, including the built-in system accounts.
- Password all accounts that you use. Choose passwords that are tricky to figure out. When you give an account a password you must remember it. If you forget the password for your account with administrator privileges you will NO longer be able to log into the machine, use it, or even access your files!!
- Do not share files or folders across the network, unless you absolutely must. If you must share files, do so cautiously and turn on the least amount of access possible. Use simple file sharing and make sure network users are NOT allowed to change your files.
- If you are not sharing files or folders make sure you explicitly turn off file and print sharing for each network connection
segunda-feira, novembro 07, 2005
PowerBuilder - Recuperando PBL corrompida
http://ecrane.com/pblrescue1.htm
quinta-feira, novembro 03, 2005
Desenvolvimento - Comparação entre ferramentas de Controle de Versão
To view the full article, please visithttp://www.BetterVssRemoting.com
Better VSS Remote Access Tool
This article makes a detailed comparison among SourceAnyWhere,SourceOffSite, VSS Remoting and possible others.
Keywords: VSS Remote Access, VSS Web Access, VSS Internet Access,SourceSafe Remote Access, SourceSafe Web Access, SourceSafe
Internet Access, SourceOffSite, SourceAnyWhere, VSS Remoting
1. Overview
What does the article do?
It makes a comparison among:· SourceAnyWhere 4.0· SourceOffSite 4.1· VSS Connect 1.5· SourceXT 2.1· VSS Remoting 2.5· VSS.NET 1.67
Our initiative is to make an unbiased, objective, repeatable andverifiable comparison:
a. Real project is used. The project I use is eMule, which is athttp://sourceforge.net/projects/emule/
b. Detailed steps are presented. You can follow the detailed stepseasily.
c. If you want to make a comment, I can be reached at[Email]bettervssremoting@yahoo.com.[/Email]
If you need more info, please visit their official websites:
· SourceAnyWhere (SAW) from DynamSoft http://www.dynamsoft.com
· SourceOffSite (SOS) from SourceGear http://www.sourcegear.com
· VSS Connect from VoxCode http://www.vssconnect.com
· SourceXT from ACORDEN http://www.acorden.com
· VSS Remoting from Source Remoting http://www.sourceremoting.com
· VSS.NET from DMB Consulting http://www.dmbcllc.com
· Want to add a product? Write to me: bettervssremoting@yahoo.com
The real result may vary if you do the test in different environment or
different files are used. However, the basic concept of thiscomparison,such as which one is the fastest, which one has more VSS features,should be applicable everywhere.
To view the full article, please go tohttp://www.bettervssremoting.com
2. Comparison Summary (5 star ***** is the best)
Speed Comparison
SAW *****
SOS **
VSS Connect **
SourceXT **
VSS Remoting **
VSS.NET *
Stability Comparison
SAW *****
SOS **
VSS Connect ***
SourceXT **
VSS Remoting **
VSS.NET *
Security
SAW ****
SOS ***
VSS Connect ***
SourceXT **
VSS Remoting ***
VSS.NET **
VSS Feature Support
SAW ****
SOS ****
VSS Connect **
SourceXT **
VSS Remoting **
VSS.NET *
Usability
SAW ****
SOS **
VSS Connect **
SourceXT **
VSS Remoting **
VSS.NET *
Diff/Merge
SAW ****
SOS ****
VSS Connect
SourceXT
VSS Remoting **
VSS.NET
IDE Integration
SAW *****
SOS ***
VSS Connect **
SourceXT **
VSS Remoting **
VSS.NET
Cross Platform
SAW *****
SOS *****
VSS Connect *
SourceXT *
VSS Remoting ***
VSS.NET *
Speed:
I am totally surprised and excited by the speed of SourceAnyWhere. Forsome operations, SourceAnyWhere can be up to 40+ times faster thanother five products.
Stability:
SourceAnyWhere never has any problem in the whole test.
SourceOffSite has several problems when it comes to stability. The bigproblem of SourceOffSite is cancel. There is no cancel support in IDEintegration. After a cancel operation in Add, Checkin, Checkout or Getin SourceOffSite Explorer, the CPU usage of SourceOffSite server goesup to almost 100% and can not come down, unless the server isrestarted.VSS Connect and SourceXT also have problems in stability. On big fileoperations, they are very possible to crash. But both two have a goodhandling of Cancel. And, VSS crashes every time when I try adding aspecial directory such as "c:\" and "My Computer".
VSS Remoting has difficulty to add file and it fails to operate on bigfiles.
VSS.NET has problems in big file operation during the whole test. Andit cannot handle the Cancel operations.
Security:
What makes SourceAnyWhere unique is the password policy.
SourceAnyWhere, SourceOffSite and VSS Connect use 128-bit cryptography.
SourceOffSite and SourceAnyWhere use BlowFish..VSS Remoting uses HTTPS.
VSS Feature Support:
Most of the six products support ordinary VSS features such as Add,Get, Checkin, Checkout and so on. However, only SourceAnyWhere has adetailed and full support for almost all of VSS features.Except SourceAnyWhere, all the products does not have supports for EOL(end-of-line). Different OS use different end-of-line characters intext files. Without EOL support, text files got to local may not beread correctly. For example, in Rational the EOL character is "/n"but in Windows it is "/r/n". When getting a text file from Rational toWindows without a support for EOL, the text will not be displayednormally.
SourceXT, VSS Remoting and VSS.Net have no support for Pin. Assuming afile is pinned in VSS Server, then what if Pin is not supported? First,the pinned file can still be checked out by Client, which is a greatdanger to the pinned file. Second, when performing a get, the mostrecent version will be got, not the pinned version. This can probablycause version confusion.
SourceAnyWhere has a "Server-base time zone offset" option, othersdon't. In my opinion, it is very important to synchronize Server timeand Client time. Imagine this, the Server time is 10 hours ahead ofClient time. When you edit a file and check it in at 2/23 9:00PM(Client time), but on the Server side, time of this version reads 2/247:00AM. So in the future when you need to get version of 2/23 9:00PMactually, you may mistakenly get another version.
Usability:
SAW is the best. All the Windows of SAW is in Win32 style. It candetect if a file is changed automatically.
Diff/MergeIn File Diff (2-way)/File Merge (3-way), SourceAnyWhere andSourceOffSite run neck and neck; VSS Remoting has a lowperformance
IDE Integration:SourceAnyWhere, SourceOffSite and VSS Remoting all support MSSCCIIntegration.VSS Remoting supports DreamWeaver integration
I have not tested the IDE integration intensively. I give this ratejust according to manual of the three products.
Cross Platform:
Besides its Windows client, SAW has a Java client built on JDK 1.4.2,so that it can cross any platform where JDK can run such as Linux, Mac,Solaris, AIX, HP-UX, SCO Unix and FreeBSD.SourceOffSite can cross Linux and Mac OS X.
VSS Remoting has a web interface which can login server through web.
3. Test Environment
Test Data
Real project is used for testAll eMule0.44c and eMule0.44d files are downloaded from SourceforgeDownload eMule0.44c (3.1M) and eMule0.44d (3.1M) used in the testBig Files are simulated files created by us
Server Configuration
· P4, 2.8G, 256M RAM, Windows XP Professional
· SourceAnyWhere profession 4.0 DEMO Server
· SourceOffSite4.1 with Cryptography DEMO Server
· VSS Connect Server 1.5· SourceXT Server 2.1
· VSS Remoting Server 2.5
· VSS.NET Server 1.67
· Visual SourceSafe6.0 + Sp6
Client Configuration
· P4 Celeron 2.0G, 256M RAM, Windows 2003
· ADSL connection
· SourceAnyWhere profession 4.0
· SourceOffSite 4.1 with Cryptography
· VSS Connect Client 1.5
· SourceXT Client 2.1
· VSS Remoting Client 2.5
· VSS.NET Client 1.67
4. Test Methodology
All the three products are tested on the same computers and internetconnection
All the three products are tested on the same data set
All the three products are tested with the same process
For speed test, every action is carried out 5 times
The initial state of the VSS database is empty (newly created)
PowerBuilder - Execução de Scripts dinamicamente
No site http://www.mycgiserver.com/~unoksoftgroup/powerbuilder_pborca/powerbuilder_pborca.html#dynamicscript existe um demo de aplicação que permite este tipo de tarefa.
Obs: A resposta acima foi fornecida por Carlos Klein
sexta-feira, outubro 28, 2005
PowerBuilder - Recuperando a Data de Compilação do Executável
Faça o seguinte, declare duas constantes globais e atribua today() e now() para elas, assim:
constant date gd_compiled = Today()
constant time gt_compiled = now()
No momento que você compila o executável, o PowerBuilder preenche e armazena a data e hora de geração. Isso ocorre porque a constante é fixa e preenchida no momento de geração do executável.
Só mais uma informação, não é possível fazer o procedimento acima utilizando uma variável datetime, pois é considerado um tipo de dado complexo e o PowerBuilder não permite declarar uma constante deste tipo de dados.
quinta-feira, outubro 27, 2005
SQL Server 2005 - Native Client
PowerBuilder - Pesquisa de Utilização
Os primeiro resultados estão em http://www.visual-expert.com/us/info/survey_pb_2005_first_results.htm
quarta-feira, outubro 19, 2005
PowerBuilder - DataWindow Crosstab Editavel
http://www.wideopenwest.com/~rsizer/powerbuilder/source/editcrosstab.htm
PowerBuilder - Sites sobre a ferramenta
- http://www.sybase.com/products/developmentintegration/powerbuilder (Site Oficial)
- www.celso.cortes.nom.br
- http://www.sabsoft.com.br/DicasPB/Default.asp
- http://www.techno-kitten.com/
- http://teamsybase.net/blogs/
- http://reedshilts.pbdjmagazine.com/
- http://ianthain.pbdjmagazine.com/
- http://chrispollach.pbdjmagazine.com/
- http://pbdj.sys-con.com/
- forums.sybase.com
- http://www.wideopenwest.com/~rsizer/powerbuilder/index.htm
Quem possuir outros sites, favor postar um comentario neste artigo com o nome do site.
segunda-feira, outubro 17, 2005
Visual SourceSafe – Movendo projetos entre base de dados
Abaixo está o trecho em inglês:
“You can use the archive/restore functionality in VSS to move projects between databases and preservethe history. You can either use command line utilities like ssarc.exe/ssrestor.exe, or you can use the Archive menu items in VSS Administrator program.”
By Alin Constantin
PowerBuilder – Converter PBD para PBL
Conversando com a equipe de desenvolvimento do PowerBuilder da Sybase (USA), me informaram que este procedimento não é possível e nem será. A justificativa é porque se perderia a confiabilidade da ferramenta, ou seja, qualquer um poderia fazer a engenharia reversa do seu aplicativo e consequentemente descobrir as regras de negócio, o que é considerado roubo de propriedade intelectual.
A única coisa que pode ser feito é chamar as funções existentes na PBD, ou seja, você pode colocar uma PBD na sua Library List e utilizar os objetos existentes dentro da mesma, não sendo permitido ver e depurar o código dentro da PBD.
Se mesmo assim, você não quiser que outra pessoa utilize os objetos da sua PBD, você tem a opção de não gerar PBD.
SQL SERVER SP4 - Problemas de Performance
O problema parece que surgiu com uma mudança de interpretação de valores numéricos do otimizador do SQL Server.
Tecnicamente explicando, no SP 3 se você tivesse um índice em uma coluna numérica (5,0), ou seja, sem casa decimal e passasse 1.0 para ela, a pesquisa seria feita por índice utilizando a técnica INDEX SEEQ, que é a melhor forma de pesquisa utilizada.
Já a partir do SP 4, a mesma situação acima iria gerar um INDEX SCAN ou até mesmo parar de usar aquele índice, pois o custo do SQL poderia aumentar muito e o SQL Server definir outro algoritmo para buscar os dados.
Oracle - Migração da Versão 8 e 9 para a Versão 10
Perda de performance
1 – Pode ser causada por incompatibilidade entre a versão do Oracle e a sua aplicação. Já se sabe que a versão do Oracle 10.2 tem problemas de performance com aplicações PowerBuilder.
Erro em comandos SQL
1 – A partir da versão 10 do Oracle, não é mais suportado o uso de conversão implícita. Ou seja, se por um erro de desenvolvimento o usuário definiu uma clausura WHERE com um campo numérico, mas passou o valor string, o Oracle irá gerar um erro. Nas versões anteriores o Oracle faria a conversão implícita dos dados, não retornando erro.
2 – Na versão 8.0.5, o Oracle convertia um VARCHAR com o formado ‘yyyymm’ para data. Este mesmo procedimento gera erro no Oracle 10.
Erro na Compilação de PACKAGES
1 – Anteriormente não era necessário declarar o parâmetro DEFAULT na SPECIFICATION, apenas sendo obrigatório defini-lo no BODY. Mas a partir da versão 10, ocorrerá um erro se você não declarar.
Oracle 10 - Problema de Performance
Ainda não conseguimos descobrir a origem do problema, mas assim que tiver mais notícias, irei publicar no Blog.
segunda-feira, outubro 10, 2005
PowerBuilder - Exibindo ToolTip / PowerTip
segunda-feira, outubro 03, 2005
Diversos - Extensão de arquivos
Diversos - Manual do Profissional deTI
MANUAL BÁSICO DE COMO "UTILIZAR" UM PROFISSIONAL DE TI...COISAS QUE O CLIENTE PRECISA SABER: (e o chefe também...!!!)
1) PROFISSIONAL DE TI dorme.Pode parecer mentira, mas PROFISSIONAL DE TI precisa dormir como qualqueroutra pessoa. Esqueça que ele tem celular e telefone em casa, ligue só parao escritório.
2) PROFISSIONAL DE TI come.Parece inacreditável, mas é verdade.PROFISSIONAL DE TI, também, precisa se alimentar e tem hora para isso.
3) PROFISSIONAL DE TI pode ter família.Essa é a mais incrível de todas: mesmo sendo um PROFISSIONAL DE TI, a pessoaprecisa descansar no final de semana para poder dar atenção à família, aosamigos e a si próprio, sem pensar ou falar de redes, sistemas,computadores...
4) PROFISSIONAL DE TI, como qualquer cidadão, precisa de dinheiro.Por essa você não esperava, né? É surpreendente, mas PROFISSIONAL DE TItambém paga impostos, compra comida, precisa de combustível, roupas esapatos, e ainda consome Lexotan para conseguir relaxar...
5) Ler, estudar também é trabalho.E trabalho sério. Pode parar de rir. Não é piada.
6) De uma vez por todas, vale reforçar: PROFISSIONAL DE TI não évidente, não joga tarô e nem tem bola de cristal.Ele precisa planejar, consultar fornecedores, fazer visita técnica...para poder maturar as propostas e superar as expectativas.Se você quer um milagre, tente uma macumba e deixe o pobre do PROFISSIONALDE TI em paz.
7) Em reuniões de amigos ou festas de família, o PROFISSIONAL DE TIdeixa de ser PROFISSIONAL DE TI e reassume seu posto de amigo ouparente, exatamente como era antes dele ingressar nesta profissão.Não peça conselhos, dicas ... ele tem direito de se divertir.
8) Não existe, apenas, um upgradezinho - qualquer upgrade é umprojeto, requer atenção, dedicação, precisa ser pensado, estudado,analisado e, é claro, cobrado. Esses tópicos podem parecer inconcebíveis auma boa parte da população mas servem para tornar a vida do PROFISSIONAL DETI mais suportável.
9) Quanto ao uso do celular: celular é ferramenta de trabalho. Por favor,ligue, apenas, quando necessário. Fora do horário de expediente, mesmoque você, ainda, duvide, o PROFISSIONAL DE TI pode estar fazendoalgumas coisas que você nem pensou que ele fazia, como dormir ou namorar,por exemplo
10) Pedir o mesmo orçamento 15 vezes não vai mudar a resposta. Por favor,peça no máximo três.
11) Quando o horário de trabalho do período da manhã vai até 12h, nãosignifica que você pode ligar às 11h55. Se vc pretendia cometer essagafe, vá e ligue após o horário do almoço. O mesmo vale para a parte datarde: ligue no dia seguinte.
12) Quando PROFISSIONAL DE TI estiver apresentando um projeto, porfavor, não fique bombardeando com milhares de perguntas durante oatendimento. Isso tira a concentração, além de torrar a paciência.ATENÇÃO: Evite perguntas que não tenham relação com o projeto.
13) O PROFISSIONAL DE TI não inventa os preços e nem ganha comissãosobre os equipamentos comprados . Por isso, não pechinche!Lembrete: cara feia na hora de assinar cheque não diminui o que você tem quepagar. Se queria pagar menos, deveria ter feito você mesmo.
14) Os PROFISSIONAL DE TI não são os criadores do ditado "O barato saicaro"!!!
15) E, finalmente, PROFISSIONAL DE TI , também, é filho de DEUS e nãofilho disso que você pensou...
Artigo enviado por João Carlos de Souza Ribeiroquarta-feira, setembro 21, 2005
PowerBuilder - Visão da Versão 11
* Early Alpha will start in September.
* Based entirely on .NET 2.0.
* Support Winforms and WebForms.
* Compiles PB code to C#
* Use refactored code from 10.5.
* Import PocketBuilder code line.
* proved Tablet PC support.
* ta Q1 – GA Q3 2006
É interessante chamar a atenção que o PowerBuilder 11 será totalmente DotNet. Quem quiser ver a PPT completa, acesse o site http://files.blog-city.com/files/M05/128508/b/techwave.pps
PowerBuilder - Recuperando a Data e versão de um arquivo
Entre no site e faça uma pesquisa pela palavra data ou versão.
http://www.celso.cortes.nom.br/
Por : Celso Côrtes
sexta-feira, setembro 16, 2005
DotNet - DataWindow
Ela se compõe de dois módulos:
1) Designer
Este modulo é basicamente o PowerBuilder contendo apenas o Painter de DataWindow. Nele, você pode criar qualquer tipo de DataWindow e gravar em uma PBL ou utilizar qualquer datawindow que você possua nos seus sistemas (O impressionante, que funciona com qualquer DataWindow)
2) Viewer
Este modulo é utilizado pelo VisualStudio para exibir a DataWindow. Quando você instala o Software, ele cria uma pasta na barra de ferramentas do VisualStudio. Então, você deve arrastar o objeto para um formulário e utilizá-lo. Muito Fácil.
Bom, deixa-me contar o que achei de mais interessante:
· Utilização de DataWindow na Web : Você pode utilizar qualquer tipo de DataWindow em formulários Windows e Web, para cadastro e consulta. O interessante é que da DataWindow DotNet gera o código em JavaScript, não necessitando utilizar Plugin.
· Programação no DotNet: A Sybase fez um trabalho espetacular, utilizando os nomes das funções já existente no PowerBuilder para se trabalhar em DotNet. Por exemplo, para configurar o objeto transação de uma datawindow, você utiliza a função SetTrans, para buscar valor você utiliza GetItem, para enviar valor você utiliza SetItem. Dessa forma, eles conseguiram que o programador PowerBuilder utilize o VisualStudio sem precisar aprender como programar. Muito Bom.
· Um único fonte: Você pode continuar desenvolvendo a suas DataWindow junto a sua aplicação PowerBuilder e apenas atualizá-las no servidor Web, necessitando de apenas um fonte e manutenção em um ponto único.
O que achei mais interessante, que essa foi a melhor ferramenta que vi para gerar relatórios em Web, mesmo para quem nunca viu PowerBuilder, além de não ter problemas de licenciamento, como ocorre no CrystalReports.
Parabéns a Sybase por essa ferramenta.
PowerBuilder – Soluções que rodam 24 X 7
Recentemente, eu passei por duas situações (Transferência de arquivos entre sites e Call Center).
Vou pegar como exemplo a primeira aplicação. Deveríamos criar uma aplicação responsável por atualizar os aplicativos que são executados em todas as agências de uma empresa de Energia Elétrica, utilizando a arquitetura cliente/servidor (mais de 70 locais de transferência).
A partir da necessidade e de outras variáveis envolvidas (disponibilidade de Link, distância geográfica entre agencias, disponibilidade de servidores, horário de picos, atualizações urgentes de sistemas, etc...) resolvemos desenvolver um servidor de aplicação que ficariam rodando 24 horas e processando as requisições de cópias feitas pelo usuário.
O sistema foi desenvolvido em PowerBuilder e ficou da forma que desejávamos. Mas, após 24 horas em produção, começamos a deparar com um problema que colocou todo o trabalho de desenvolvimento em questionamento. A aplicação PowerBuilder alocava memória e não liberava a mesma.
Fazendo o monitoramento, percebi que quando instanciávamos os objetos e utilizava DataWindows, os mesmos não liberavam toda a memória alocada. Após 24 horas de processamento, a aplicação travava o servidor por falta de memória.
Após pensarmos em várias soluções e já pensando em outros projetos que teriam o mesmo problema, resolvemos criar um “Gerenciador de Serviços”.
Essa aplicação fica responsável por colocar a aplicação no ar. Após a aplicação no ar, ela faz o processamento necessário e fecha o sistema. Após X tempo que a aplicação fechou (no nosso caso, foi 1 minuto) o gerenciador coloca a aplicação no ar novamente.
Como o gerenciador não utiliza objetos e possui um código muito simples, ele não aloca memória desnecessária e não causa o problema que a aplicação teria.
Essa é uma solução simples, que foi essencial para o sucesso do nosso projeto.
segunda-feira, setembro 12, 2005
sexta-feira, setembro 09, 2005
Observação sobre o método FIND da DataWindow
O método FIND da DataWindow serve para localizarmos uma linha especifica a partir dos valores informados. A sintaxe do comando é
long dwcontrol.Find ( string expression, long start, long end )
Gostaria de chamar a atenção para a posição inicial da pesquisa. Se a posição inicial for maior que a posição final, o PowerBuilder ignora a posição inicial e faz a pesquisa a partir do inicio da datawindow (row = 1). Esta situação pode causar um loop infinito, se o você estiver procurando todas as ocorrências de um valor e existir uma ocorrência no último registro da datawindow.
Por exemplo:
Tenho a seguinte situação que procura a ocorrência de um string em todas as linhas da datawindow:
Do While VLLROW > 0
VLLROW = DW_1.FIND(VLSFIND,VLLROW + 1,DW_1.ROWCOUNT()
LOOP
Se a última linha da datawindow tiver o valor procurado, na próxima volta do LOOP, VLLROW +1 será maior que ROWCOUNT(). Nesta situação, o PowerBuilder irá ignorar VLLROW +1 e começar a pesquisa a partir da Linha 1, entrando em um LOOP infinito.
Para evitarmos essa situação, devemos alterar o código acima para que fique da seguinte forma:
Do While VLLROW > 0
VLLROW = DW_1.FIND(VLSFIND,VLLROW + 1,DW_1.ROWCOUNT()
IF VLLROW = DW_1.ROWCOUNT() THEN EXIT
LOOP
Estas características estão documentadas no HELP do PowerBuilder. Abaixo se encontra um trecho do Help com a informação sobre o procedimento acima
…When the start value becomes greater than end, the search reverses direction and Find would always succeed, resulting in an endless loop….
quinta-feira, setembro 08, 2005
PowerBuilder – Layout Corrompido
Para resolver este problema, o usuário tem que voltar ao layout original do objeto. Como essa configuração é armazenada no registro, o usuário deve apagar a chave do registro que armazena essa configuração, voltando a configuração original.
A chave do registro que armazena a configuração encontra-se em HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\
PowerBuilder - Dicas de intergração com o PowerDesigner
Fiz algumas experiências com o objetivo de ganhar produtividade no design de datawindows para sistemas modelados no PowerDesigner e encaminho minhas conclusões para os que se interessarem:
Ao projetar as colunas no PowerDesigner procurem seguir as seguintes orientações:
preencher o campo "Name" com o título que se deseja que apareça na datawindow;
preencher o campo "Code" com o nome da coluna no banco de dados (óbvio);
preencher o campo "Label" com o conteúdo que se deseja que seja a Tag na datawindow;
Após a execução do Script de criação das tabelas no banco de dados executem no menu do PowerDesigner: Client > Generate PowerBuilder Attributes...
Com isso serão populadas as tabelas do PowerBuilder PBCATCOL,PBCATEDT, PBCATFMT, PBCATTBL e PBCATVLD, que assessoram a criação de datawindows com os dados de colunas, edições, formatos de exibição, tabelas e validações, respectivamente.
A coluna PBC_CMNT da PBCATCOL recebe o conteúdo do campo LABEL' do PD e será usada para "Tag" da coluna para qualquer DW´
A coluna PBC_LABL da PBCATCOL recebe o conteúdo do campo 'NAME' do PD acrescido de ":" e será usada para "Título" da coluna para DW´s FreeForma;
A coluna PBC_HDR da PBCATCOL recebe o conteúdo campo 'NAME' e é usada para "Título" da coluna para DW´s Tabulares
Para que os itens 2 e 3 funcionem é preciso garantir que nos Extenderd Attributes da tela de configuração de colunas do PowerDesigner o campo "Label " seja igual a "%ColumnName%:" e Header seja "%ColumnName%".
O objetivo do meu estudo se restringiu a ganhar produtividade na obtenção automática dos Títulos e Tag´s das colunas nas DW, que utilizam colunas da tabela PBCATCOL. Explorando-se um pouco mais podemos ganhar também nas máscaras, edições e validações.
Por Ricardo Couto de Souza
PowerBuilder - Versão 10.5
Informática - O que é UNICODE?
sexta-feira, julho 15, 2005
DIversos - Informações sobre o Google
quinta-feira, julho 14, 2005
PowerBuilder - Empresas que utilizam PowerBuilder no Brasil
2 - AMIL planos de saúde.
3 - ArtInfo - Sistema de Gestão de Recursos Humanos
4 - Attps informática
5 - Banco ABN-AMRO
6 - Banco BBA
7 - Banco BBM
8 - Banco do Nordeste
9 - Banco Finaustria
10 - Banco SAFRA.
11 - Banco Mercantil
12 - Banco Santander
13 - Banco Tokio-Mitsubishi S.A.
14 - Banco Votorantim
15 - Bank Boston
16 - Basf S.A
17 - BCP
18 - BNP - Banque Nationale de Paris
19 - Bovespa - Bolsa de Valores do Estado de São Paulo
20 - Bozano
21 - Caixa Econômica Federal
22 - Carioca Engenharia ( Christiane Nielsen )
23 - Carrefour
24 - Caterpillar do Brasil
25 - CFLCL - Cia de Força e Luz de Cataguases Leopoldina( Primeira empresa a utilizar o PowerBuilder no Brasil)
26 - Cia de Processamento de dados do RS RGE
27 - CITROSUCO PAULISTA S/A ( Maior exportadora de Suco de Laranja do País )
28 - CODIUB - Companhia de Processamento de dados de Uberaba
29 - Companhia Vale do Rio Doce
30 - Confederação Nacional da Indústria
31 - Consorcio RodoBens
32 - Construtora Norberto Odebrecht
33 - Coperguaçu ( Maior Cooperativa de criação de frangos do país )
34 - Credicard S/A
35 - CST - Companhia Ciderurgica de Tubarão
36 - DBMS COMPSIS
37 - DBMS Tecnologia da Informação
38 - Deten Química
39 - DLC CISS - Automação Comercial
40 - ECAD MasterSaf
41 - EDS - Electronic Data Systems do Brasil ( Banco GM )
42 - EDS - Electronic Data Systems do Brasil ( Cartão de Crédito )
43 - EDS - Electronic Data Systems do Brasil ( GM )
44 - EDS - Electronic Data Systems do Brasil ( Visanet )
45 - Energ Power Ltda - Belo horizonte - MG
46 - Ericsson
47 - Firestone
48 - Fornecedora de internet dedicada Unisinos
49 - Fundação Baiana de Cardiologia
50 - Fundação José Silveira
51 - Golden Cross
52 - GoodLife Belo Horizonte
53 - Grupo Luizeni(Corretora) - Patrocinio/MG
54 - Grupo Martins Atacadista - Uberlandia/MG
55 - HSBC
56 - IBGE - Instituto Brasileiro de Geografia e Estatística - RJ
57 - IBM do Brasil
58 - Laboratório Clínico Delboni Auriemo
59 - Line system - Uberlandia
60 - LOGOCENTER
61 - Nutris Tecnologia E Sistemas De Nutrição Ltda
62 - OAB Minas Gerais
63 - Peixoto Atacadista - Uberlandia
64 - Pirelli Cabos S.A.
65 - Pirelli Pneus S.A.
66 - Porto Seguro – Seguros
67 - PowerLogic
68 - Prefeitura Municipal de Uberaba
69 - Procenge - Companhia de Informática de Pernambuco
70 - Prodaub - Processament de dados de Uberlandia
71 - Prodemge - Cia de Processamento de Dado de Minas Gerais
72 - Racional Engenharia
73 - RBS - Afiliada à rede globo - região sul
74 - Redecard S/A
75 - RK Hotéis e Turismo S/A
76 - Seguros de Saúde
77 - Shell do Brasil
78 - Shop Tour
79 - SICS – HELP Informática
80 - softwarehouse Cumerlato & Schuster
81 - softwarehouse InfoSaude
82 - softwarehouse Van Communications
83 - TecBan
84 - Tecnovia Informática
85 - Telefonica ( GuiaMais )
86 - Telematic - Engenharia e Teleinformática Ltda ( Salvador/BA )
87 - Telepar - Telecomunicações Do Paraná S.A. ( Brasil Telecom )
88 - TotalBanco
89 - TQI - Uberlandia
90 - Trans Cearense - Uberlandia / MG
91 - Transportadora Itapemirim S.A
92 - Trends Advance
93 - Tribanco de Uberlandia
94 - UFMG - Universidade Federal de Minas Gerais
95 - UFRGS - Universidade Federal do Rio Grande do Sul
96 - Uma Das Cias Elétricas Do RS Cigna Seguradora
97 - UNESC - Universidade do Extremo Sul Catarinense
98 - União Atacado ( Uberlandia)
99 - Unibanco
100 - Unitech Tecnologia de Informação
101 - Uniub - Universidade de Uberaba
102 - Universidade do Rio dos Sinos Procergs
103 - Unnisa S/A
104 - Visanet Companhia de Meios de Pagamento S/A
105 - Volkswagen do Brasil S/A
106 - Votorantim Mineração e Metais
107 - Xerox do Brasil
108 - Staff Informática
109 - Banco do Estado do Espírito Santo - BANESTES
110 - Compania Docas do ES - CODESA (Porto de Vitória)
111 - MasterSaf
112 - Viação Águia Branca - Transporte de Passageiros
113 - Pif Paf Alimentos
114 - Petrobras
115 - Matera System
116 - Banco BMG
117 - Ápia Consultoria e Sistemas Ltda
PowerBuilder - Problemas no envio de e-mail com o BLAT
O problema ocorre porque o blat utiliza o serviço SMTP (porta 25) para enviar e-mail e a versão do VirusScam 8.0 bloqueia essa porta.
Quem estiver utilizando essa versão do antivírus, vai ter que seguir os seguintes passos para resolver o problema:
1 - Vá ao Console do VirusScam
2 - Clique com o botão direito em Proteção de Acesso e selecione Propriedades
3 - Desmarque a opção Impedir que worms de envio em massa de e-mail.....
4 - Clique em Ok e feche todas as janelas
Em algumas empresas, essa configuração pode ser feita centralmente, no servidor do antivírus.
sexta-feira, julho 01, 2005
Cursor X DataStore
Para explicar as vantagens, primeiro temos que entender como os dois objetos funcionam.
A maioria dos cursores são composto de 4 comandos:
* Declare : Declara a variável e atribui o comando SQL que será executado, não fazendo acesso ao banco de dados.
* Open : Abre o cursor. Neste momento, é enviando um comando ao SGBD que executa a Query e carrega o resultado na memória do SGBD. Existem vários tipos de cursor e cada um funciona de uma forma, mas geralmente, é criada uma imagem do resultado na memória do SGBD.
* Fetch : Recupera o registro. Neste momento, é feito um acesso ao banco de dados, buscando o próximo registro na tabela temporária.
* Close : Fecha o cursor. Neste momento é feito um acesso ao SGBD para fechar e libera a memória que estava sendo utilizada pela tabela temporária.
Como vocês podem perceber, apenas o comando Declare não faz um acesso ao banco de dados. Como cada acesso ao banco de dados gera 2 tráfegos na rede (O envio do pacote com a solicitação e o recebimento do resultado), além de aumentar muita a utilização do processador do cliente, pois todos os pacotes de rede devem ser tratados (empacotados e desempacotados) pelo processador. A quantidade de acesso ao banco de dados degrada a performance do aplicativo, além de aumentar o trafego da rede, prejudicando a performance de outros aplicativos.
Outro ponto negativo do Cursor é que existem comando que fecham o cursor, por exemplo, na maioria dos SGBDs, se os comandos COMMIT e ROLLBACK forem executados com o cursor aberto, eles automaticamente fecham o curso, podendo gerar erro no aplicativo.
Já a DataStore funciona da seguinte forma:
* Quando você executa RETRIEVE na DataStore, o comando SQL é enviado ao banco de dados, processado e todos os dados são recuperados para a DataStore.
Essa solução possui uma perda de performance no primeiro momento, porque todos os dados são transferidos de uma única vez para o cliente, mas possui uma melhor performance se observarmos o processamento total, pois é feito apenas um acesso a base de dados (dois tráfegos de rede).
Outro problema da DataStore é que todos os dados são retornados para a memória da aplicação cliente, por isso, se a quantidade de dados recuperados for muito grande ou a memória do cliente for pouca, pode forçar a máquina a utilizar memória virtual (Paginação), gerando uma perda de performance no aplicativo e até mesmo cancelamento do processando por falta de memória.
Resumindo, os seguintes fatores influenciam a utilização de Cursor ou DataStore:
- Quantidade de usuários conectados ao SGBD (Quanto maior a quantidade de usuários conectados ao SGBD, maior a tendência de utilizar DataStore)
- Memória disponível no cliente (Quanto maior a quantidade memória, maior a tendência de utilizar datastore)
- Quantidade de Dados Recuperados (Quanto menor o número de colunas recuperado por registro, maior a tendência a utilizar a datastore)
- Qualidade da Rede (Quanto mais rápida a rede, maior a tendência a utilizar Cursor)
- Recursos disponíveis no servidor (Memória e processador) (Quanto maior os recurso disponíveis no servidor, maior a tendência a utilizar Cursor)
Sendo, que os recursos que mais degradam a performance são os seguintes, na ordem listados:
- Quantidade de usuários.
- Utilização de espaço alem do disponível na memória física + memória virtual
- Quantidade de dados trafegados pela rede
- Velocidade do Processador no servidor
- Velocidade do Processador no cliente
- Utilização de memória virtual
Na regra geral, devemos adotar que se o cliente tem memória disponível para executar a datastore, devemos utilizar datastore, ao contrário, utilizamos o Cursor. Mas, podemos analisar outros fatores antes de determinar qual objeto utilizar, podendo adotar até uma solução mista, por exemplo, recuperar blocos de registros utilizando datastore.
quarta-feira, junho 15, 2005
Oracle – Criando usuário com acesso Limitado
Como as tabelas foram criadas por outro usuário, você se vê obrigado a utilizar o owner do usuário nos comandos SQL, por Exemplo:
USER_DBO : Usuário com permissão de criar tabela e owner dos seus objetso
USER : Usuário com acesso de consulta e alteração de dados
CREATE TABLE USER_DBO.TB_TESTE
…….
Quando o usuário USER vai tentar fazer o select ele tem utilizar o commando
SELECT * FROM USER_DBO.TB_TESTE
Necessitando incluir o Owner da tabela antes do nome da tabela.
Para resolver o problema na necessidade do owner, existe duas opção:
1) Criar um sinônimo
Você criar um sinônimo com o usuário USER apontando para a tabela USER_DBO.TB_TESTE.
2) Comando Alter Session
Após conectar com o banco de dados, você executa o comando ALTER SESSION SET CURRENT_SCHEMA = USER_DBO;
BOA SORTE
DotNet Error : Visual Studio .NET cannot create or open the application
Eu reinstalei o meu ISS, lembrando de fazer todos os passos necessários para registrar o Framework, mas quando tento criar ou abrir um projeto AspNet, o VisualStudio me exibe a seguinte mensagem:
Visual Studio .NET cannot create or open the application. The likeliestproblem is that required components are not installed on the local webserver. run visual studio.net setup and add the web development componet.
Este problema ocorre pois o compartilhamento do wwwroot foi perdido. Abaixo está a solução para este problema :
From: Harvey Meeker ”Try to check the sharing of the folder that you are hosting the application in. If it is in the WWWROOT folder then that folder needs to be shared as wwwroot$, at least this is what I've experienced on my own machine. This is basically a problem of the share not being properly configured”
sexta-feira, junho 10, 2005
Dotnet error : 'HTTP/1.1 500 Internal Server Error.'
Estou utilizando o VisualStudio 2003 e Windows XP. Estava tudo funcionando e de uma hora para outra começou a aparecer o erro:
"the Web server reported the following error when attempting to create or open the Web project located at the following URL: 'http://localhost/WebApplicaton1'.'HTTP/1.1 500 Internal Server Error.'"
Este erro já me aconteceu N vezes dentro no meu ambiente de trabalho e depois de muito tempo tentando descobrir o que aconteceu, encontrei que na maioria das vezes ocorre devido a uma atualização do windows (Windows Update) que causou a mudança no Framework/IIS ou mudança da senha do usuário ASPNET e o bloqueio do usuário.
Na maioria das vezes, a solução que se encontra no site http://codebetter.com/blogs/peter.van.ooijen/archive/2004/09/08/24756.aspx resolve o problema. Mas se o problema persiste, outra solução possível encontra-se no link http://weblogs.asp.net/jambrose/archive/2004/09/01/224226.aspx
Boa Sorte.
sexta-feira, maio 27, 2005
Oracle - Exemplos de Scripts
Caso você não encontre o script desejado, existem ainda links para outros sites com mais opções de scripts.
Vale a pena navegar.
Oracle – Replicação Avançada
Primeiro vamos analisar quais são as vantagens dessa replicação:
1) Permite alteração nos dois sites;
2) Se o link ou um dos servidores estiver fora do ar, o trabalho continua, e os servidores serão sincronizados no momento que a conexão for restabelecida.
3) Permite configurar a resolução de conflito, ou seja, se um mesmo dado for alterado nos dois sites ao mesmo tempo, você pode definir uma regra para tratar este caso. Por exemplo, vale o registro que foi alterando por último.
4) A replicação é rápida e leve (não causa grande trafego na rede), pois são replicadas apenas as alterações na base de dados e não a tabela inteira, como outras soluções.
5) O processo não é on-line, evitando travamentos devido a lock. Os dados são alterados em um site e só depois da operação concluída, são replicados para o outro site.
6) O tempo de replicação pode ser configurado com o intervalo desejado, ou seja, a replicação pode ocorrer a cada 1 segundo ou de 4 em 4 horas.
7) Você pode definir quais objetos serão replicados e o intervalo de replicação para cada um.
No link que se encontra no título deste artigo, você pode obter todos os scripts necessários para você trabalhar com a replicação avançada.
Para você que vai trabalhar com a replicação avançada pela primeira vez, sugiro que siga os seguintes passos para os primeiros testes:
1) Instale dois servidores Oracle do zero, lembrando de marcar a opção de Replicação Avançada no momento da criação do banco de dados;
2) A configuração GLOBAL_NAMES deve estar marcada ( Arquivo init
3) Os DBLinks devem ter o mesmo nome da configuração da instancia do Oracle (DBlink tem de ser igual ao Global Names da instancia de destino - execute select global_name from global_name no banco de dados de destino do DBLink )
4) Siga o script corretamente (Já montei duas replicações utilizando o Oracle 8.1.7 e funcionam perfeitamente).
Caso você já possua um servidor e deseje habilitar a replicação avançada, você deve seguir os passos do seguinte link http://www-rohan.sdsu.edu/doc/oracle/server803/A53722_01/ch6.htm#1021276 .
Boa Sorte.
Oracle – Problemas com o DBLink
O meu problema foi que o meu DBLink nunca funcionava. Eu possuía a seguinte configuração
Servidor Origem : DB01
Servidor Destino : DB02
Nome do DBLink : TESTE
O Oracle possui uma configuração GLOBAL_NAMES (Arquivo de INIT
A configuração GLOBAL_NAMES = TRUE é necessária em casos que você precisa utilizar alguns recursos avançados do Oracle, entre eles a Replicação, que é o meu caso.
Caso você não utilize estes recursos, pode configurar o GLOBAL_NAMES = FALSE e utilizar o nome que quiser para o DBLink.
quarta-feira, maio 25, 2005
PowerBuilder - Conectando ao Oracle 10
Veja o Link no Título deste Post para mais informações.
terça-feira, maio 24, 2005
SQL Server - Performance 2005 X 2000
Oracle 8 – Perder a Senha do usuário internal ou sys
1 – Vá ao command, na pasta $ORACLE_HOME/bin
2 – Digite o comando orapwd80 file=
Neste ponto será gerado um arquivo que você utilizará para substituir o arquivo do Oracle que armazena este senha criptografado,
3 – vá ao diretório $ORACLE_HOME/database e mud o nome do arquivo PWD
4 – Mude o nome do arquivo que você gerou no passo 2 para PWD
5 – Utilize o novo senha
Boa Sorte.
sexta-feira, maio 20, 2005
Microsoft Visual Source Safe - Melhorando a Performance
Ao instalar o VSS 6, não é feito upgrade da base de dados, o que pode gerar uma perda de performance na utilização do VSS. Para obter uma melhor performance, siga os passos abaixo:
1) Verifique se a sua base já está atualizada. Para isso, verifique se existe a pasta ...\VSS\data\labels . Caso exista, não é necessário seguir este procedimento, pois a sua base já se encontra atualizada
2) Certifique-se que nenhum usuário está utilizando o VSS
3) Faça um backup do VSS
4) Execute o comando “DDUPD \\server\share\vss\data”
Boa sorte.
quinta-feira, maio 19, 2005
Oracle - Respostas para as dúvidas sobre Replicação
PowerBuilder – Implementando Single-Threaded Apartments
Primeiro deixa-me explicar o que é isso? Single-threaded Apartments é o processo de simular MultiThread, ou seja, N processos executarem ao mesmo tempo dentro da mesma aplicação, por exemplo, hoje quando você executa um comando SQL ou uma Procedure a aplicação fica travada até o momento em que a aplicação retorna o resultado do comando SQL. Com MultiThread, a aplicação não fica travada, permitindo você executar N consultas\procedures ao mesmo tempo, trabalhando em paralelo.
A diferença o MultiThread verdadeiro para o Single-threaded apartments é que o primeiro permite utilizar N processadores (Varias threads), pois utiliza área de memória diferente e o segundo utiliza apenas um processador (Uma thread), pois compartilha área de memória.
O processo de implementação do Single-threaded apartments é simples é funciona bem. Na verdade você tem que ter um objeto que é Thread, um para gerenciar o processo e outro para fazer a comunicação entre os dois.Para os interessados no código para essa implementação, me envie um comentário com o e-mail que eu repasso um pequeno exemplo dessa implementação.
SQL Server - Problemas na replicação com troca de nome do servidor.
SQL Server Enterprise Manager could not configure '
Geralmente, este erro ocorre porque o servidor SQL Server foi Renomeado ou foi montado a partir da imagem de outro servidor.Para resolver o problema, clique no Link deste artigo que irá direcioná-lo para a página da Microsoft com a solução para o mesmo.
quarta-feira, maio 18, 2005
PowerBuilder - Pesquisa 2005
http://www.visual-expert.net/survey/survey.php?TEMPL=survey_pb_2005_us.htm
Esta pesquisa é anual, se quiser ver o resultado da pesquisa no ano passado, verifique o link abaixo.
http://www.visual-expert.com/us/info/survey_pb_2004_results.htm.
terça-feira, maio 10, 2005
PowerBuilder – Trace de Banco de Dados
Com o resultado do trace gerado, você pode descobrir um erro que está ocorrendo na base de dados ou melhorar a performance de uma rotina, através dos tempos retornados pelo Trace.
Para habilitar o Trace, você deve incluir a palavra TRACE antes do DBMS na conexão com o banco de dados, por exemplo:
// Profile DBTeste
SQLCA.DBMS = "TRACE O84 Oracle8/8i (8.x.4+)"
SQLCA.LogPass = <*********>
SQLCA.ServerName = "DB_DES"
SQLCA.LogId = "teste"
SQLCA.AutoCommit = False
SQLCA.DBParm = "CommitOnDisconnect='No',DelimitIdentifier='No',PBCatalogOwner='teste'"
Uma dica é adaptar a aplicação de forma que o trace possa ser habilitado através de uma chave do registry, assim você pode habilitar o Trace em qualquer momento, diretamente no executável.
Para analise de performance, desenvolvi um aplicativo que lê o trace e retorna os comandos que gastaram mais tempo. Quem tiver interesse neste aplicativo, envie um e-mail para tpereira@rtconsult.com.br, para que eu possa enviar o aplicativo.
sexta-feira, abril 29, 2005
PowerBuilder - Criação de DataWindow/DataStore Dynamica
string VLSerror_syntaxfromSQL, VLSerror_create, VLSnew_syntax, VLSMsgErr, VLSDescricao, VLSLinha Long VLLRow, VLLCodigo, VLLRet, vltotitens
// botão p/ seleção de ocorrências if dwo.name = 'b_ocorr' then lb_ocorr.Visible = True // sql p exibição das ocorrências no listbox VISnew_sql = 'select distinct mi.num_seq_ocorr_prioritaria codigo, oc.dsc_res_ocorr descricao ' + & 'from movto_inspecao mi, ocorrencia oc ' + & 'where mi.num_seq_ocorr_prioritaria = oc.num_seq_ocorr ' + & 'and mi.num_seq_ocorr_prioritaria is not null ' + & 'and mi.cod_proj = ' + String(VILProjOrig) end if
// botão p/ seleção de impedimentosif dwo.name = 'b_imped' then lb_imped.Visible = True // sql p exibição das impedimentos no listbox VISnew_sql = 'select distinct mi.cod_imp_insp codigo, im.dsc_imp_insp descricao ' + & 'from movto_inspecao mi, impedimento_inspecao im ' + & 'where mi.cod_imp_insp = im.cod_imp_insp ' + & 'and mi.cod_imp_insp is not null ' + & 'and mi.cod_proj = ' + String(VILProjOrig)
end if
// Monta dinamicamente o objeto datastore contendo as ocorrências ou impedimentos p/ seleçãoVLSnew_syntax = wtr_trans.SyntaxFromSQL(VISnew_sql, "", VLSerror_syntaxfromSQL)if Len(VLSerror_syntaxfromSQL) > 0 then VLSMsgErr = 'Erro: '+ VLSerror_syntaxfromSQL f_msg(VLSMsgErr, stopsign!) return 1else VLLRet = VIDSSelecao.Create(VLSnew_syntax, VLSerror_create) if Len(VLSerror_create) > 0 or VLLRet <> 1 THEN VLSMsgErr = 'Erro: '+ VLSerror_create f_msg(VLSMsgErr, stopsign!) return 1 end ifend if
VIDSSelecao.SetTransObject(wtr_trans)VIDSSelecao.Retrieve()
Site do Celso Cortes
quarta-feira, abril 27, 2005
PowerBuilder - Mudança de automática da Resolução do Monitor
Para isso, usamos o sequinte código abaixo.
$PBExportHeader$w_res.srw$PBExportComments$change resolutionforwardglobal type w_res from windowend typetype cb_2 from commandbutton within w_resend typetype cb_1 from commandbutton within w_resend typetype devmode from structure within w_resend typeend forward
type devmode from structure character dmdevicename[32] integer dmspecversion integer dmdriverversion integer dmsize integer dmdriverextra long dmfields integer dmorientation integer dmpapersize integer dmpaperlength integer dmpaperwidth integer dmscale integer dmcopies integer dmdefaultsource integer dmprintquality integer dmcolor integer dmduplex integer dmyresolution integer dmttoption integer dmcollate character dmformname[32] integer dmlogpixels long dmbitsperpel long dmpelswidth long dmpelsheight long dmdisplayflags long dmdisplayfrequency long dmicmmethod long dmicmintent long dmmediatype long dmdithertype long dmreserved1 long dmreserved2 long dmPanningWidth long dmPanningHeightend type
global type w_res from windowinteger x = 837integer y = 388integer width = 795integer height = 496boolean titlebar = truestring title = "Untitled"boolean controlmenu = trueboolean minbox = trueboolean maxbox = trueboolean resizable = truecb_2 cb_2cb_1 cb_1end typeglobal w_res w_res
type prototypesFUNCTION long ChangeDisplaySettingsA (ref devmode lpst, ulong Flags) & LIBRARY "USER32.DLL"FUNCTION long EnumDisplaySettingsA (string lpszDeviceName,long iModeNum,ref devmode lpst) & LIBRARY "USER32.DLL" end prototypes
type variables
end variableson w_res.createthis.cb_2=create cb_2this.cb_1=create cb_1this.Control[]={this.cb_2,&this.cb_1}end on
on w_res.destroydestroy(this.cb_2)destroy(this.cb_1)end on
type cb_2 from commandbutton within w_resinteger x = 224integer y = 220integer width = 297integer height = 88integer taborder = 2integer textsize = -10integer weight = 400fontpitch fontpitch = variable!fontfamily fontfamily = swiss!string facename = "Arial"string text = "1024x768"end type
event clicked;devmode dmlong astring ls_nulosetnull(ls_nulo)
//get current configurationa = EnumDisplaySettingsA(ls_nulo,-1,dm)
if a = 0 then messagebox('EnumDisplaySettingsA',"error") returnend if
//set configurationdm.dmPelsWidth = 1024dm.dmPelsHeight = 768
//Change current configurationa = ChangeDisplaySettingsA(dm, 0)if a < 0 then messagebox('ChangeDisplaySettingsA',"error") returnend if end event
type cb_1 from commandbutton within w_resinteger x = 224integer y = 124integer width = 297integer height = 88integer taborder = 1integer textsize = -10integer weight = 400fontpitch fontpitch = variable!fontfamily fontfamily = swiss!string facename = "Arial"string text = "800x600"end type
event clicked;devmode dmlong astring ls_nulosetnull(ls_nulo)
//get current configurationa = EnumDisplaySettingsA(ls_nulo,-1,dm)
if a = 0 then messagebox('EnumDisplaySettingsA',"error") returnend if
//set configurationdm.dmPelsWidth = 800dm.dmPelsHeight = 600
//Change current configurationa = ChangeDisplaySettingsA(dm, 0)if a < 0 then messagebox('ChangeDisplaySettingsA',"error") returnend if
end event
quarta-feira, março 30, 2005
Windows XP – Habilitando Remote Desktop Connection
Para mim, a desvantagem do Remote Desktop em comparação com outros softwares ( VNC, Netmetting, PcAnyWhere e etc...) é que no momento que você conecta na máquina remota, a mesma é bloqueada, não permitindo que ninguém veja o que está ocorrendo. Por um lado e ruim, mas por outro é bom se levarmos em consideração a segurança.
Para habilitar essa funcionalidade em uma máquina em uma Rede Local, siga os seguintes passos (Em português):
1) Na maquina que será o Host ( Máquina na qual você irá conectar), siga os seguintes passos
a. Clique com o botão direito em Meu Computador e selecione propriedades
b. Vá a pasta Remoto e Habilite os dois CheckBoxes que existem. ( Se exibir uma mensagem, confirme)
c. Se o usuário que vai utilizar o Remote Desktop não for administrador da máquina local, clique no botão Selecionar usuários remotos e insira o usuário desejado.
2) Na máquina Guest ( Máquina que você irá utilizar para conectar a outra máquina ou Terminal Burro), siga os seguintes passos
a. Vá a Todos os Programas à Acessórios à Comunicação à Conexão a área de trabalho Remota ( No Windows Xp, está opção já existe por default. Em outros sistemas operacionais, o software deve ser baixado da Web e instalado http://www.microsoft.com/windowsxp/downloads/tools/rdclientdl.mspx )
Boa Sorte!!
PowerBuilder – Erro no Layout
Este problema ocorre porque o Layout do PowerBuilder corrompeu. O Layout é responsável por posicionar os frames de uma janela e armazena a última configuração que foi salva. Além disso, o Layout é especifico de máquina e usuário, por isso, muitas vezes ocorre apenas para um usuário especifico.
Para resolver este problema, você deve resetar o Layout do PowerBuilder. Existem duas formas de fazer isso:
1) Menu View à Layouts à Default
2) Apagar a chave do registry responsável pelo layout (HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\9.0\Layout )
Mas, se mesmo assim o problema continuar ocorrendo, recomendo executar um Full Build e um Optimize nas PBls.
quarta-feira, março 23, 2005
PowerBuilder – Recuperando informações de um Arquivo
Abaixo está o código necessário para recuperar as informações ou matadados de um arquivo.
//*****************Declare as seguintes external functions
FUNCTION ulong GetFileVersionInfoSizeA( REF string lpFilename, REF ulong lpdwHandle ) LIBRARY "version.dll"
FUNCTION integer GetFileVersionInfoA( REF string lpFilename, REF ulong lpdwHandle, ulong dwLen, REF string lpData ) LIBRARY "version.dll"
FUNCTION boolean VerQueryValueA( REF string lpBlock, string lpSubBlock, REF long lpBuffer, REF uint puLen ) LIBRARY "version.dll"
SUBROUTINE CopyMemory ( REF string d, long s, long l ) LIBRARY "kernel32.dll" ALIAS FOR RtlMoveMemory
//*******Código utilizado para recuperar o número de versão do produto no executável
string vls_filename, vls_Buff, vls_key
ulong vlul_Handle, vlul_Length
integer vli_rc
long vll_pointer
uint vlui_length
//Busca o tamanho do buffer do aplicativo
vlul_Length = GetFileVersionInfoSizeA( p_nom_executavel, vlul_Handle )
IF vlul_Length <= 0 THEN
return error.of_popula( populateerror(1010, 'Não foi possivel localizar o arquivo para o controle de versão.~n~r' + &
'Nome do executável : ' + p_nom_executavel))
END IF
vls_Buff = Space( vlul_Length )
//Busca o ponteiro para as informações do executavel
vli_rc = GetFileVersionInfoA( p_nom_executavel, vlul_Handle, vlul_Length, vls_Buff )
IF vli_rc = 0 THEN
return error.of_popula( populateerror(1010, 'Ocorreu um erro ao recuperar informação de versão.~n~r' + &
'Nome do executável : ' + p_nom_executavel))
END IF
//Define qual informação sera recurperada
//Onde \StringFileInfo\
//vls_key = "\StringFileInfo\040904e4\FileVersion"
vls_key = "\StringFileInfo\040904e4\ProductVersion"
IF NOT VerQueryValueA( vls_buff, vls_key, vll_pointer, vlui_length ) OR &
vlul_Length <= 0 THEN
p_versao = ""
return error.of_popula( populateerror(1010, 'Ocorreu um erro ao recuperar o número da vesão.~n~r' + &
'Nome do executável : ' + p_nom_executavel))
ELSE
p_versao = Space( vlui_length )
CopyMemory( p_versao, vll_pointer, vlui_length )
END IF
return 1
segunda-feira, março 21, 2005
PowerBuilder 9 - About libraries
Assigning libraries
PowerScript targets can use as many libraries as you want. Libraries can be on your own PC or workstation or on a server. When you create a target, you specify which libraries it uses. You can also change the library search path for a target at any time during development.
For information about specifying the library search path, see "Specifying the target's library search path".
How the information is saved
Every object is saved in two parts in a library:
Source form This is a syntactic representation of the object, including the script code.
Object form This is a binary representation of the object, similar to an object file in the C and C++ languages. PowerBuilder compiles an object automatically every time you save it.
Using libraries
It is hard to predict the needs of a particular application, so the organization of a target's libraries generally evolves over the development cycle. PowerBuilder lets you reorganize your libraries easily at any time.
About library size
For small applications, you might use only one library, but for larger applications, you should split the application into different libraries.
There are no limits to how large libraries can be, but for performance and convenience, you should follow these guidelines:
Number of objects It is a good idea not to have more than 50 or 60 objects saved in a library. This is strictly for your convenience; the number of objects does not affect performance. If you have many objects in a library, list boxes that list library objects become unmanageable and the System Tree and Library painter become more difficult to use.
Balance Managing a large number of libraries with only a few objects makes the library search path too long and can slow performance by forcing PowerBuilder to look through many libraries to find an object. Try to maintain a balance between the size and number of libraries.
Organizing libraries
You can organize your libraries any way you want. For example, you might put all objects of one type in their own library, or divide your target into subsystems and place each subsystem in its own library.
Sharing objects with others
PowerBuilder provides basic source control using the PBNative check in/check out utility. PBNative allows you to lock the current version of PowerBuilder objects and prevents others from checking out these objects and modifying them while you are working on them.
The project administrator must design a directory hierarchy for the project's workspace. The administrator might create a separate subdirectory for each target in the workspace, or for each PBL in the workspace. After the administrator sets up the project and registers every object in the workspace, individual developers copy a template workspace to their own computers, open the workspace, and connect to source control.
PowerBuilder also provides a direct connection to external SCC-compliant source control systems.
For more about using PBNative and other source control systems, see "Using a source control system with PowerBuilder".
sexta-feira, março 18, 2005
PowerBuilder – Pegando Valores em um ComputedField
Em algumas situações, precisamos de um valor de um ComputedField, o que também é um processo simples, mas pode se tornar chato se você precisar fazer este processo para vários campos.
A solução que encontrei para este problema é criar uma função que recupera o valor de um computedField.
Abaixo está o código necessário para a criação desta função:
// DESCRIÇÃO:
// * Pega o valor de um campo ComputeField
// * Similar ao GetItem, mas funciona para ComputeFiled
//
// ARGUMENTOS DE ENTRADA:
// adw_controle : DataWidow onde se encontra o Compute
// as_compute : Nome do ComputedField
// al_row : Numero da linha que deseja busca o valor. Se for um compute
// que se encontra no Header ou no
//
// RETORNO:
// * "" : Não conseguiu encontra o valor
// * <> de "" : Valor processado
//
// OBSERVAÇÃO:
//
// CRIADO POR :
// 17/03/2005 - Thiago Campos Pereira
// ALTERADO POR :
//
//========================================================================
string vls_retorno
string vls_expressao
vls_expressao = as_compute + ".Expression"
//Pega a expressão do compute
vls_expressao = adw_controle.Describe(vls_expressao)
//busca o valor
vls_retorno = "evaluate('"+vls_expressao+"', "+string(al_row)+")"
vls_retorno = adw_controle.describe(vls_retorno)
return vls_retorno
terça-feira, março 15, 2005
Oracle – Trabalhando com campos auto-incremental
No Oracle, este campo é conhecido como SEQUENCE.
Para trabalhar com este campo no Oracle, devemos seguir os seguintes passos:
1) Criar a tabela com um campo numérico, que será utilizado como auto incremental
create table ATUALIZACAO_LOG
(
SEQ_LOG NUMBER not null,
COD_EMPRESA NUMBER(5) not null,
COD_TELA NUMBER(38) not null,
CHAVE VARCHAR2(300) not null,
INICIO DATE not null,
FIM DATE null ,
TIP_LOG CHAR(1) not null
constraint CKC_TIP_LOG_LOG check (TIP_LOG in ('I','A','E','P')),
SIGLA_USUARIO VARCHAR2(20) not null,
HISTORICO VARCHAR2(300) not null,
constraint PK_ATUALIZACAO_LOG primary key (SEQ_LOG)
)
/
2) Definir um objeto do tipo SEQUENCE, com as suas configurações
CREATE SEQUENCE SEQ_ATUALIZACAO_LOG
START WITH 1
INCREMENT BY 1
NOMINVALUE
NOMAXVALUE
NOCYCLE
CACHE 20
NOORDER
/
Onde:
START WITH : Posição inicial
INCREMENT BY : Valor a ser incrementado.
3) Gerar o próximo valor
select SEQ_ATUALIZACAO_TELA.nextval
into Proximo_valor
from dual
4) Incluir na tabela
insert into ATUALIZACAO_LOG values(Proximo_valor, cod_empresa, cod_tela, upper(:as_chave), dt_now, dt_now, tip_log, upper(sigla_usuario), upper(historico) )
quinta-feira, fevereiro 03, 2005
PowerBuilder - Problemas na Migração da Versão 7 para a 9
No PB 7, quando você executava Retrieve em uma DataWindow e o DataObject está inválido ( a DataWindow foi apagada ou alterada o nome), o PowerBuilder retornava 0 ( não encontrou linhas). Já no PowerBuilder 9, o comando retorna -1, que é o correto já que a DataWindow não existe.
A recomendação é que caso ocorra um caso desse, verifique se a DataWindow realmente não existe. Caso não exista, comente o código colocando usuário, data e motivo pelo qual comentou o código. Após isso, teste bem o sistema
2) Mudança no tratamento do comando ScrollToRow
No PB7, quando você executava o ScrollToRow, ele não disparava eventos como RowFocusChanged e ItemFocusChanged. No PB9, estes eventos são disparados quando você executa o comando, podendo mudar o funcionamento da sua janela, caso você tenha código nestes eventos.
3) Problemas com o comando SetTrans
O comando SetTrans não é mais aceito no PowerBuilder 9, causando cancelamento do programa.
Para resolver este problema, substitua o comando SetTrans para SetTransObject.
PowerBuilder - Roteiro de Migração da Versão 7 para a 9
* Crie o Workspace
* Vá na janela de New / Existing Application
* Selecione a aplicação que você deseja migrar
* Monte a Library List necessária
* Confirme o nome do Target que será criado e clique em Finish
* Aparecerá uma mensagem informando que vocÊ deverá migrar os fontes. Nesta tela, desmarque a opção de exibir mensagem de informação e obsoleto e clique em OK para iniciar a migração
* Aguarde a finalização e verifique se ocorreu algum erro na migração ( é comum aparecer várias mensagens, mas a única que não deve ser ignorada é a de erro. Quando ocorrer uma mensagem de erro, devemos analisar e corrigir o problema)
* Após a finalização, para garantir o sucesso completo da aplicação, devemos executar dois passos extras
- Full Rebuild em todas a aplicação
- Optmize em todas a PBLS
quarta-feira, fevereiro 02, 2005
PowerBuilder – Armazenando fotos em um Banco de Dados
Este exemplo foi feito utilizando Orace 8.1.7 e PowerBuilder 9.2 (Build 7554)
PASSO 1 – Crie uma tabela
Crie uma tabela com um campo próprio para armazenar este tipo de arquivo (geramente chamado como campo BLOB), que pode variar de acordo com o SGBD ( SQL Server/Sybase/ASE = Image ou Text; Oracle = Long ou Long Raw ou Blob ou CLOB)
No meu exemplo, criei a seguinte tabela no Oracle:
CREATE TABLE TESTE_FOTO
( CODIGO NUMBER(2) NOT NULL,
DESCRICAO VARCHAR2(100) NULL,
EXTENSAO VARCHAR2(4) NULL,
FOTO LONG RAW NULL,
CONSTRAINT PK_TESTE_FOTO PRIMARY KEY (CODIGO))
O campo EXTENSAO foi feito para resolver um problema existente na API do Oracle 8, quando recuperamos a foto para exibição.
É recomendado que você nunca crie o campo BLOB em uma tabela a parte, pois geralmente este campo ocupa muito espaço, tornando a tabela pesada para utilizar em consultas que recuperam múltiplos registros.
Um detalhe muito interessante é que o campo de FOTO tem que ser Nulo. O que vai ser explicado no passo 2.
PASSO 2 – Criar a DataWindow de Manutenção
Crie uma DataWindow atualizável com todos os campos da tabela, exceto o campo BLOB, pois ele será tratado a parte. Por isso o campo BLOB deve ser nulo, pois a inserção de registro na tabela e feita em dois passos:
1 – Inserção dos campos normais
2 – Atualização do valor do campo BLOB
PASSO 3 – Selecionando o arquivo a ser armazenado
Insira um Picture Control na sua Datawindow, que será utilizado para exibir a imagem e crie um código que permita selecionar a imagem, como no exemplo abaixo :
string docpath, docname
integer li_rtn
//Exibe janela para selecionar o arquivo
li_rtn = GetFileOpenName("Selecione a Imagem",docpath, docname, "JPEG",+ "JPEG (*.jpg),*.jpg," &
+ "BMP (*.BMP),*.BMP,All Files (*.*), *.*", "C:\", 18)
IF li_rtn < filename=" docpath" ls_picturename =" trim(DW_1.Object.P_1.Filename)" ll_aux =" len(ls_picturename)" ll_i =" ll_aux" ll_i =" 0"> 0 then
ls_extensao = mid(ls_picturename,ll_i + 1)
else
setNUll(ls_extensao)
end if
dw_1.setitem(1,"extensao",ls_extensao)
//Salva a DataWindow
dw_1.update()
//Transforma o arquivo em um valor Blob
WF_grava_arquivo( DW_1.Object.P_1.Filename, LL_BLOB)
lblb_imagem = LL_BLOB
ll_codigo = dw_1.getitemnumber(1,"codigo")
//Atualiza o valor blog no Banco de Dados
updateblob teste_foto
set foto = :lblb_imagem
where codigo = :ll_codigo;
//Finaliza a transacao
commit;
Código da função WF_GRAVA_ARQUIVO
wf_grava_arquivo (string as_arquivo, ref blob lblob_final);//verifica se o arquivo já existe, se existir, realiza o updade, caso contrario, realizar o insert
long ll_row, ll_codigo, ll_file, ll_tam
blob lblob_arquivo
//ll_codigo = long (sle_1.text)
//Carrega o arquivo
ll_file = FileOpen ( as_arquivo , StreamMode! , Read! , LockRead!)
if ll_file = -1 then
messagebox("Erro","Ocorreu um erro na abertura do arquivo",stopsign!)
return
end if
lBlob_final = blob('')
ll_tam = fileread(ll_file, lblob_arquivo)
do while (ll_tam > 0)
lBlob_final = lBlob_final + lblob_arquivo
ll_tam = fileread(ll_file, lblob_arquivo)
loop
fileclose(ll_file)
PASSO 5 – Neste passo iremos recuperar o arquivo do banco de dados e exibi-lo na DataWindow.
No SQL Server e Sybase, basta incluir um controle “Large binary/text Database Ole Object” e prencher as informações corretas (Na dúvida, consulte o Help do PowerBuilder).
Mas, a solução acima não funciona no Oracle, pois existem alguns problemas com este controle, onde os dados não são recuperados.
Para resolver este problema, eu tive que criar a seguinte solução
1 – Recupero o campo BLOB para uma variável BLOB
2 – Limpo os arquivos temporários existentes. Para isso, armazeno os nomes dos arquivos temporários gerados em um XML
3 – Crio o arquivo temporário a partir da variável BLOB. Por este motivo, eu armazeno a extensão do arquivo na hora de gravar, evitando conflitos de tipos de arquivos. Neste ponto, também armazeno o nome do mesmo no XML, para limpeza no futuro.
4 – Utilizando um Picture Control na DataWindow, exibo o arquivo temporário armazenado.
Abaixo está o código utilizado para fazer este procedimento :
long ll_rowcount
long ll_codigo, ll_file, ll_row
blob lblb_imagem, lBlob_final, lblob_arquivo
string ls_imagem, ls_path
datastore vld_datastore
//Configura DataStore de Gerenciamento de arquivos temporários
vld_datastore = create datastore
vld_datastore.dataobject = 'd_arquivos_temporarios'
ll_codigo = long(sle_1.text)
//Recupera os Registros
ll_rowcount = dw_1.retrieve (ll_codigo)
//Se existir registro, vai para o tratamento do Blob
if ll_rowcount > 0 then
//Seleciona o campo Blob
selectblob foto
into :lblb_imagem
from teste_foto
where codigo = :ll_codigo;
//Importa os dados do arquivo XML de controle de arquivos temporarios
vld_datastore.importfile(XML!,'C:\tmpfoto.xml')
//Apaga todos os arquivos temporarios existentes na máquina
for ll_row = vld_datastore.rowcount() to 1 step -1
filedelete(vld_datastore.getitemstring(ll_row,"filename"))
vld_datastore.deleterow(ll_row)
next
//gera um arquivo temporario, com a extensao original
ls_path = "c:\tmpfoto" + string(today(),"yyyymmdd")+string(now(),"hhmmssffff")+"."+dw_1.getitemstring(1,"extensao")
//Grava o nome do aquivo temporario no XML de controle
ll_row = vld_datastore.insertrow(0)
vld_datastore.setitem(ll_row,"filename",ls_path)
vld_datastore.saveas( "C:\tmpfoto.xml", XML!,true )
//Carrega o arquivo
ll_file = FileOpen ( ls_path , StreamMode! , write! , Lockwrite!, Replace!)
if ll_file = -1 then
messagebox("Erro","Ocorreu um erro na abertura do arquivo",stopsign!)
return
end if
//Lê o blob e grava um arquivo
lBlob_final = lblb_imagem
do while (len(lBlob_final) > 0)
lblob_arquivo = blobmid(lBlob_final,1,32000)
filewrite(ll_file,lblob_arquivo)
lBlob_final = blobmid(lBlob_final,32001)
loop
fileclose(ll_file)
//Exibe o arquivo temporario
DW_1.Object.P_1.Filename=ls_path
messagebox("Sucesso","Arquivo recuperad com sucesso!")
end if
Boa sorte!!!!
quinta-feira, janeiro 27, 2005
PowerBuilder - Verificar se uma aplicação está sendo executada
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
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
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
Comparando o SQL Server com Outros Bancos de Dados
SQL Server 2000 - Alta Disponibilidade
sexta-feira, janeiro 14, 2005
PowerBuilder - Inserindo objeto via metodo post
//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
sexta-feira, janeiro 07, 2005
quinta-feira, janeiro 06, 2005
SQL Server 2000 - Identificando Versões
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
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
quarta-feira, janeiro 05, 2005
Dicas Gerais - Aumentar a conta do Hotmail para 250 MB
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
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
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
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.