Um conhecimento só é válido quando compartilhado.

sábado, 10 de outubro de 2009

Delphi "MS Sans Serif Size 8" no Windows 7

Para quem desenvolve em Delphi.
Não sei por que cargas d'agua, o Win7 não aceitou a fonte "MS Sans Serif", Size = 8.
Meus projetos tem muito forms que vieram e versões anteriores do Delphi, várioscom a font "MS Sans Serif" Size = 8. No Win 7 a fonte "MS Sans Serif" o Size minimo é 10, deixando meus forms c/ as fontes enormes, consequencia. Tiveque mudar todos meus .dfm p/ fonte Tahoma na mão.

ÊÊÊÊÊ windows 7, porque vc não deixou o "MS Sans Serif" assumir o Size = 8 heim...

Solução... Peguei essa fonte de outra maquina e intalei na mão.

terça-feira, 8 de setembro de 2009

Delphi 2010+MSSQL - "Unable to find procedure DBXRow_GetUint8"

Aconteceu comigo.



Ao tentar fazer um conexão em um banco de dados SQL Server, como o Delphi 2010, fui premiado com a mensagem "Unable to find procedure DBXRow_GetUint8". Então parti para alguns testes:

1o) Criei um novo projeto e testar a conexão, para minha surpresa o exemplo conectou 100% ao banco.
2o) Executei um projeto meu menor, e também conectou 100%
3o) Olhei no meu projeto que dava o erro, se tinha alguma Unit ocasionando o erro, pois já aconteceu comigo "A biblioteca RX, não deixava abrir o editor do TImageList"
4o) Passei um email para o Andreano e ele me respondeu para que eu criasse um exemplo, mas como se já tinha feito e estava com quase 100% de certeza que no monte de units do meu projeto uma delas estava ocasionando o erro. Pior e como descobrir qual ?
5o) Último teste criei um projeto teste e fui puxando para ele unit a unit, para saber qual era.

Resultado final foi que não descobri pois com pouquíssimas units o erro estava ocorrendo e olhei todas e vi que não era uma unit que estava ocasionando o erro. Então ao dar uma olhada no diretório do projeto teste, diretório este que era o mesmo do meu projeto, vi que eu tinha colocado no mesmo diretório dos EXEs as dlls de conexão. Como tinha duas dlls uma para firebird e outra para MSSQL, resolvi apagar a do MSSQL, pois a do firebird estava funcionando normal. Para minha alegria ao executar a aplicação o erro não ocorreu.

Resumo:
Delphi 2010 com conexão MSSQL, não coloque a dll "dbxmss.dll", no mesmo diretório de sua aplicação, deixe-a no "System32".

O erro foi reportado ao QC

Para deixar os leitores a par do acontecido:
Depois de vários comentários no QC, referente este erro, foi descoberto que o problema estava vindo da versão antiga da dll (dbxmss.dll), a qual eu por acidente peguei do diretório do D2009 ao invés de pegar-la do diretório do D2010. Atualizei a dll e funcionou 100%.

terça-feira, 5 de maio de 2009

Axial Build 2009 for Windows

Foi lançado a versão 2009 do Axial Build. O poduto é de uso livre.
Criado pela Tecsis Soluções, o Axial Builder 2009, além de trazer o mais novo padrão no seu visual, seu código foi todo reescrito, trazendo assim optimização e rapidez nas compilações. No código reescrito a Tecsis utilizou o Axial framework, o qual é utilizado para criação de todos os seus projetos, com essas mudanças ficou muito fácil de incluir recursos de compilação ao Axial Build. Para baixar clique http://cc.embarcadero.com/Author/55953

terça-feira, 24 de março de 2009

MidasLib vs ReportMemoryLeaksOnShutdown

Nas minhas aplicações tenho o "ReportMemoryLeaksOnShutdown := DebugHook <> 0", habilitado sempre. Enquanto eu estava no D2007 o vazamento de memória estava zerado, tratei todos. Ao mudar para o D2009 começou a aparecer um vazamento de memória assim:

Como não me relata quais objetos não foram liberados da memória, eu não pude resolver este problema, até ontem. Ontem resolvi cercar alguns recursos em uma das telas de um sistema meu e observei que ao cercar o método que configura as propriedades dos TFields como:
  • ConstraintErrorMessage;
  • DefaultExpression;
  • Alignment;
  • DisplayFormat;
  • etc..
o erro acima não ocorria, então pensei. Já não bastava o erro "stack overflow", ainda mais esse ?
Meu proximo passo foi cercar propriedade por propriedade pra descobrir qual ou quais estavão gerando o vazamento de memória, até que descobri que era a propriedade "DefaultExpression". Bom agora além de ter que mudar o método de validação de minhas aplicações iria eu ter que mudar o método de alimentar os valores defaults dos TFields ? Não ! Parti então para fazer um exemplo e mandar para o Andreano na esperança dele reportar e o problema ser resolvido talvez no Update3, mas ao concluir o exemplo este não me mostrava o erro citado acima, então o que poderia ser ? Passei limpando uma de minhas aplicações vendo se tinha alguma Unit que poderia estar ocasionando o erro, mas não consegui achar nada, até que ao abrir o fonte do projeto em um de meus sistemas, no menu Project->View Source, descobri que tinha 3 units inseridas por mim mesmo ao projeto que são elas:
Como não poderia deixar, comentei as duas ultimas pensando que se fosse essas seria uma das duas a MidasLib não poderia ser..., o erro continuou aparecendo, então para desencargo de consciência comentei a MidasLib também e para minha surpresa era ela que estava ocasionando os vazamentos de memória.
Fica aqui mais uma situação ocorrida comigo para que outros não passem por isso, e mais uma vez vamos esperar que no Update3 isso seja resolvido.

T+

Error "Stack overflow" no D2009

Quando o D2009 saiu, exitei por algum tempo a saida do D2007, porque minhas aplicações estavam todas rodando 100%, passados algum tempo resolvi fazer o teste de compilar minha apliação com D2009 e logo vi algumas alterções em alguns dos componentes que uso e uma simples mudança no meu código (nada significante), então resolvi migrar, pois o dbExpress me encheu os olhos em vista do que era. Para minha surpreza ao rodar o sistema e abrir uma das telas veio um erro "Stack overflow".

Após quebrar a cabeça por algum tempinho descobri que este erro estava acontecendo porque eu configuro a propriedade "CustomConstraint" dos TFields, ex: "CDS.FieldByName('VALOR').CustomConstraint := 'VALUE IS NOT NULL AND VALUE >= 0';", para validar dados. Depois de vários testes, não teve jeito, tive que mudar todo método de validação dos meus sistemas, diga-se de passagem UM TRABALHÃO.
Antes de mudar é claro mandei um exemplo para o Andreano. Engraçado que criando o exemplo para mandar para o Andreano, observei que o erro só ocorria, quando rodava o sistema através do F9 em design, pois se executasse direto ou sem debug o error não ocorria. (isso foi reportado para o Andreano também).
Fico aqui pensando comigo mesmo, será que só eu uso estes recursos ? Ou a maioria ainda não foi para o D2009?
Bom fica ai o relato, e que apesar do D2009 estar no Update 2, ainda não foi resolvido.

T+

segunda-feira, 23 de março de 2009

MetaData no dbExpress e Delphi 2009

Assistindo alguns videos dos novos recursos do D2009, baixei um video de uma palestra ministrado por William Santos dbExpress - MetaData com Delphi 2009, que mostra os novos recursos do dbExpress e como trabalhar com MetaData. Lembrei também que baixei os exemplos do livro de Marco Contú e la tinha um exemplo de metadata, então resolvi vê como funcionava na pratica todos os recursos, como não era surpresa descobri que seria a solução para atualização dos MetaDatas dos meus bancos de dados, pois a Embarcadero provou que continua se preocupando com o desenvolvedor como a Borland fazia, pois foi fácil buscar as informações do metada, visualizando que pode ser feito uma aplicação para essa atualização automatica. Bom mais como sempre nem tudo são flores, pois quando fui buscar as Triggers descobri que este recurso ainda não estava disponível, então resolvi olhar dentro do código fonte do framework do dbExpress, pois achei que poderia os métodos estar com nomes não tão intuitivos. Depois que vasculhar, não achei nada e pensei que seria o fim para criar o recurso de atualização automática do meu banco, vendo que só faltava isso parti a pesquisar como eu poderia fazer isso manualmente e sem muito esforço consegui achar e é isso que quero passar aqui, em SQL Server.


SELECT
[Table Name] = OBJECT_NAME(sys.objects.parent_object_id),
[View Name] = sys.objects.name,
[View Source] = sys.sql_modules.definition
FROM sys.sql_modules
INNER JOIN sys.objects ON sys.objects.object_id = sys.sql_modules.object_id
WHERE sys.objects.type = 'TR'"


T+

SAC Automação Delphi e Lazarus

SAC Automação Delphi e Lazarus
Assine nosso SAC Automação Delphi e Lazarus para ter suporte técnico especializado em desenvolvimento

Quem sou eu

Minha foto

Proprietário/Administrador de Empresa em TI (Tecsis Informática)
  • Autor dos projetos OpenSource ORMBr, e DBCBr
  • Autor dos componentes ACBrInstall, ACBrSped, ACBrPaf, ACBrInStore, ACBrDownload.

Total de visualizações

Postagem em destaque

ORMBr - Mapeamento objeto-relacional

Mapeamento objeto-relacional ( ou ORM, do inglês: Object-relational mapping ) é uma técnica de desenvolvimento utilizada para reduzir...

Todo os direitos reservados.. Tecnologia do Blogger.

Seguidores

Google+ Seguindores