Office System

The Office Developer Blog (by Luiz Cláudio C. V. Rocha - São Paulo, Brazil)

Erro "Fractional Truncation" no SQL Server com Access VBA - ADO

Se você está usando uma simples rotina ADO (a partir do Access ou do Excel, por exemplo) para gravar um registro no SQL Server e está recebendo uma mensagem de erro “Fractional Truncation”, é possível que seja por causa de um campo DateTime.

Embora o código esteja correto, pode ser que o SQL Server não entenda isto se o cursor estiver do lado servidor:

rst.DataVcto = CDate(Me.DataVencimento)

A solução é formatar a data para string no formato usado pelo SQL Server:

rst.DataVcto = Format(Me.DataVencimento, “yyyy-MM-dd”)

Se o cursor estiver do lado cliente (rst.CursorLocation = adUseClient), não é necessário formatar a data, o código original deverá funcionar.

Office e a Reforma Ortográfica

Finalmente, depois de um longo atraso, a Microsoft lançou o pacote de atualização do Office 2007, que incorpora na ferramenta as novas regras de ortografia da língua portuguesa trazidas pela Reforma Ortográfica, aprovada há um ano.

É necessário ter o Office 2007 com Service Pack 2 instalado para baixar a nova atualização (para saber se você tem o SP2 instalado, a janela "About" agora está no botão Office > Word Options > Resources > About).

O link da atualização da correção ortográfica é este: http://www.microsoft.com/downloads/details.aspx?FamilyId=DF0AF8D5-A8DA-4938-8A44-E8BE7C8EEAEF&displaylang=pt-br

Se o seu Office é em inglês (como o meu) e você tem instalado o Language Pack para Português-Brasil, é necessário também instalar o Service Pack 2 do language pack, que pode ser encontrado aqui: http://www.microsoft.com/downloads/details.aspx?displaylang=pt-br&FamilyID=e1203db2-1cc9-4809-9b6e-3f232cb8899f

Informações sobre o que está sendo atualizado: http://office.microsoft.com/pt-br/help/HA103876701046.aspx

 

Agora, algumas considerações minhas:

1) Essa atualização demorou demais a sair, mas não considero culpa da Microsoft. A própria Academia Brasileira de Letras levou meses para soltar a publicação oficial do novo vocabulário. Nem mesmo os dicionários oficiais (Aurélio, Houaiss e outros) até agora lançaram as novas publicações, e eles vivem disto, tinham obrigação de ter se antecipado em parte. A Microsoft foi mais rápida que eles.

2) Quem diz que o Br-Office (versão brasileira do OpenOffice) já tem as novas regras desde o começo do ano, ou está brincando, ou não é rigoroso no uso correto do nosso idioma. Há inúmeros erros na aplicação na nova gramática, e até da velha. Para se ter uma ideia, na abertura do programa aparece escrito (bem grande): "BEMVINDO", sem hífen e com "M". Bem, acho que aos 6 anos de idade eu aprendi que M só vem antes de P e B, e esta regra obviamente não mudou.

3) E o Office 2003? Cadê a atualização do Office 2003? Resposta: não tem e não terá. Esta é uma decisão com a qual não concordo, sob nenhum aspecto: técnico, jurídico, comercial, do bom senso, etc.

A justificativa para tal decisão é o fato do Office 2003 não estar mais em período de manutenção. Porém, ele estava SIM em período de manutenção quando a lei do acordo ortográfico entrou em vigor, e assim permaneceu por  vários meses depois disto. O fato de terem levado quase um ano para lançar o pacote de correção não pode ser considerada uma justificativa válida para não aplicar ao Office 2003, mesmo sendo verdade o que escrevi na consideração 1. Na minha visão, foi uma decisão infeliz, incompatível com os valores da empresa.

 

 

Windows Media Player no Windows 7 N

Após tentar inúmeras vezes instalar o Windows 7 Ultimate no meu notebook, sem sucesso (mensagens de erro na etapa de descompactação dos arquivos), testei, por falta de alternativas, instalar o Windows 7 Ultimate N, que... funcionou!

Que diabos é o Windows 7 "N"? Trata-se de uma versão disponível na Europa onde, em razão de ação judicial, a Microsoft precisa disponibilizar uma versão do Windows sem o Media Player. Veja bem: não é que o Media Player é proibido na Europa, mas sim que deve haver duas versões do Windows: uma com e uma sem o Media Player (a versão "N"). Como o preço é o mesmo, acredito que absolutamente ninguém adquira a tal versão "N", e que a minha seja a única no mundo...

Após fazer a instalação, em um novo HD recém-formatado, o computador não tinha nenhum programa de áudio. Verifiquei as pastas do Program Files e a lista do Windows Update, mas em nenhum dos dois constava o Media Player.

A solução, então, foi baixar o Media Player 12. Mas onde? Na página do Media Player no site da Microsoft, apenas as versões anteriores estão disponíveis (pelo menos até hoje, 21/11/2009). Eu até achei em sites alternativos, mas eu não confio neles. Bem, depois de muito tempo procurando, finalmente achei este link:

http://www.microsoft.com/downloads/details.aspx?FamilyID=31017ed3-166a-4c75-b90c-a6cef9b414c4&displaylang=en

Fiz o download e estou usando agora o bonito Windows Media Player 12. 

Se por algum motivo, ou por acidente, você instalou o Windows 7 N, fica aí o link para colocar o Windows Media Player 12.

Coleções de ícones

Depois de alguns anos usando uma antiga coleção de ícones que eu tinha, concluí que o visual estava ultrapassado (ou então eu já estava cansado dele). Resolvi, então, ir atrás de novos ícones.

O primeiro lugar a que recorri, obviamente, foi o Google. Estava atrás de coleções gratuitas. Para a minha surpresa, não foi tão fácil achar algo bom. Eu até achei ícones muito bonitos, mas era um aqui e outro ali, sem identidade visual entre si. Como é importante os ícones de uma aplicação terem consistência, continuei procurando coleções.

Dentre as pagas, gostei destas três:

VirtualLNK: http://www.virtuallnk.com/
IconShock: http://www.iconshock.com/
IconExperience: http://www.iconexperience.com/

Optei pela Iconshock, em razão da quantidade. Embora custasse mais que a IconExperience, a quantidade de ícones era infinitamente maior (na prática não se mostrou tão maior assim, já que as imagens são um tanto repetitivas).

Embora tenha pago caro para resolver a necessidade, a compra não me atendeu por completo: os ícones pequenos (16x16) têm definição muito ruim. Como todas as coleções adotaram o estilo "Vista" de transparência, só os ícones grandes (32x32 ou mais) ficam realmente bons. Os de 24x24 até podem ser entendidos, com boa vontade, mas os de 16x16 não.

Este ano recebi por cortesia da Infragistics (um dos principais fabricantes de componentes para desenvolvimento .NET) seu novo produto: NetAdvantage Icons. Embora a Infragistics não tenha tradição em ícones, o produto deles é melhor que a maioria das tradicionais coleções existentes por aí. E, para completar, os ícones de 16x16 têm boa definição!

http://www.infragistics.com/dotnet/netadvantage/icons.aspx#Overview

Fica aí a sugestão para quem estiver procurando ícones (para comprar).  

Posted: Nov 20 2009, 10:38 PM by Luiz | with no comments
Filed under: ,
Referências de desenvolvimento do Office 2010

As referências de desenvolvimento do Office 2010 podem ser encontradas aqui:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=2baf54a3-bbde-4cb8-b0e6-19005939db6a

Um recurso prático no BrOffice - Writer

Tenho de vez em quando mexido um pouco no BrOffice para conhecê-lo mais a fundo, na prática.

Hoje eu vi no Writer um recurso muito prático e simples, que não tem no MS-Word e faz muita falta: chama-se "Inserir entrada sem numeração".

Imagine que você tenha uma lista numerada (com um nível ou mais) e, em algum item da lista, por exemplo, no item "2.b", você queira incluir um segundo parágrafo de texto. No MS-Word, o novo parágrafo vai automaticamente ser numerado com "2.c", e se você mandar remover o número, ele vai "entender" que você saiu da lista e bagunçar tanto o recuo como o espaçamento entre parágrafos.

No BrOffice, existe o botão "Inserir entrada sem numeração" na barra de "Marcadores e numeração", que insere um parágrafo não numerado no mesmo item em que você se encontra.

Para quem costuma escrever tutoriais "passo a passo" numerados, como eu, é uma ajuda e tanto.

Access - Numeração com ano

Uma dúvida que aparece com certa frequência nos fóruns é sobre a criação de numeradores compostos com ano:

1/2008, 2/2008, 3/2008, 4/2008 ... 100/2008, 101/2008
1/2009, 2/2009, 3/2009, 4/2009 ... 100/2009, 101/2009
etc.

A melhor solução, a meu ver, é ter dois campos na tabela: um só com o numerador (1, 2, 3, etc.) e outro só com o ano. A concatenação do numerador com o ano deve ser feita só em consultas e relatórios.

Tenho um exemplo que escrevi muito tempo atrás, em 2001, que não usa exatamente a prática que considero a mais adequada, porém também funciona. No exemplo, há um único campo texto que armazena o número já concatenado na tabela.

O exemplo está anexo a este artigo, para quem quiser baixar. Basta usar a função NextNumAno(), alterando o nome da tabela e do campo na instrução SELECT para coincidir com o seu banco de dados.

O mesmo módulo tem a função NextNumSimples(), que também pode ser usada caso você queira partir para a melhor solução que descrevi acima (onde o numerador fica num campo separado).

Em uma outra oportunidade eu re-escreverei este exemplo da forma que considero mais adequada hoje, oito anos depois. 

Erro no acesso a base Access pelo VB2008

Ao testar um simples código de acesso a um arquivo MDB pelo VB2008, recebi a seguinte mensagem de erro:

---------------------------

---------------------------
The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
---------------------------
OK  
---------------------------

Como tenho o MS-Access instalado e funcionando normalmente na máquina, tenho certeza de que o Jet está registrado.

O problema está ligado à versão 64bit do Windows, e a solução é exatamente a mesma que eu descrevi semanas atrás para o componente Shockwave Flash: abrir as Propriedades > Compile > Advanced Compile Options > Target CPU e escolher x86.

Controles ActiveX param de funcionar após atualização do Windows KB960715

A atualização do Windows disponível no KB960715, chamada "Update Rollup for ActiveX Kill Bits", a qual visa resolver questões de segurança no Internet Explorer, tem como consequência a quebra de controles ActiveX usados há anos pelo VB6, como Flexgrid, Hierarchical Flexgrid, Datagrid, Chart control, Masked Edit, Winsock e Animation.

Para resolver, é preciso distribuir a nova versão dos controles, que pode ser obtida com a instalação do "VB6 SP6 Cumulative Update": http://www.microsoft.com/downloads/details.aspx?FamilyId=CB824E35-0403-45C4-9E41-459F0EB89E36&displaylang=en&displaylang=en

Esta instalação requer o Visual Basic 6 com o Service Pack 6 (http://www.microsoft.com/downloads/details.aspx?FamilyID=9ef9bf70-dfe1-42a1-a4c8-39718c7e381d&displaylang=en).

Quem não tiver o Visual Basic 6 não conseguirá baixar os controles. A princípio, parece um requisito normal, já que a distribuição destes ActiveX requer uma licença do Visual Basic. Porém, existe um outro produto da Microsoft (e dos caros!) que licencia a distribuição dos ActiveX: o Office Developer Edition. Quem tem apenas o Office Developer Edition (e não o VB6) ficou na mão, pois não tem como baixar as atualizações. 

 

Mais informações aqui:

http://blogs.msdn.com/askie/archive/2009/02/20/certain-vb-controls-no-longer-display-on-web-pages-after-installing-kb960715.aspx

 

SQL Server - Erro ao atachar database - 5120 - Windows Vista

Ao fazer uma simples operação de atachar um database no SQL Server, é possível que você receba uma mensagem de erro como esta:

 

TITLE: Microsoft SQL Server Management Studio
------------------------------

An error occurred when attaching the database(s).  Click the hyperlink in the Message column for details.

------------------------------
BUTTONS:

OK
------------------------------

E a explicação no hyperlink é esta:

TITLE: Microsoft SQL Server Management Studio
------------------------------

Attach database failed for Server 'TOSHIBA-LUIZ\SQLEXPRESS2005'.  (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.0.2531.0+((Katmai_PCU_Main).090329-1045+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Attach+database+Server&LinkId=20476

------------------------------
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

Não é possível abrir o arquivo físico "C:\Projetos\Data\GMedico.mdf". Erro do sistema operacional 5: "5(error not found)". (Microsoft SQL Server, Error: 5120)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.4035&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------

Nas primeiras vezes que tive este erro, a única solução que encontrei foi atachar o database em outro servidor, fazer Backup e depois restaurar no meu servidor. Depois descobri que se tratava de um simples problema de permissão: bastou abrir o Management Studio com permissões de administrador que eu consegui atachar normalmente. 

Posted: Jul 24 2009, 01:22 AM by Luiz | with no comments
Filed under: , , , ,
Divulgar a quantidade de horas em projetos fechados

No que se refere à forma de contratação, podemos classificar projetos de desenvolvimento de software em dois tipos principais:

a) Projetos abertos: o fornecedor cobra x reais por hora de serviço prestado de um determinado perfil técnico.

b) Projetos fechados: o cliente determina um escopo e o fornecedor cobra x reais pelo "produto", dentro de um prazo combinado.

A diferença entre os dois tipos de contratação vai muito além do cálculo do preço. Existem diferenças nas expectativas, nos riscos, na forma de trabalho e na garantia.

Não se pode dizer que um tipo é melhor que o outro, pois depende de cada situação. Se o cliente tiver o escopo bem definido, pode valer mais a pena fazer um projeto fechado. Se o escopo não for claro, um projeto aberto é a melhor (para não dizer a única) solução.

Para o fornecedor de serviços, vender projetos abertos diminui bastante o risco, pois sua responsabilidade maior será garantir a qualidade do serviço prestado nas horas que vendeu. O risco de estouro de custo é do cliente.

Por outro lado, são os projetos fechados que possibilitam ao fornecedor ter ganhos maiores (e também perdas, obviamente). Se ele tiver boa produtividade interna, conseguirá vender projetos a preços competitivos e ter um ganho superior ao que teria se vendesse apenas as horas. E para o cliente existe a vantagem de não assumir riscos de custo, já que o preço é fixo.

A rigor, o objeto da venda é diferente em cada tipo: num projeto fechado, vende-se uma entrega, um "produto"; num projeto aberto, vendem-se horas, mão-de-obra (e não o "produto" que vai ser criado com o uso destas horas).

O que tenho visto no mercado, em algumas grandes empresas, é a confusão dos conceitos. Tem sido comum clientes pedirem propostas com preços fechados e, na fase de negociação (ou mesmo antes disto), exigirem que o fornecedor informe quantas horas vai consumir no projeto.

Ora, esta informação tem natureza de segredo industrial e não deveria ser solicitada, até por questões éticas. Por isto, não há problema algum o fornecedor recusar abrir estes números.  

Imaginem, por exemplo, que eu vá comprar 20 monitores para a minha empresa. Eu vou contratar um fornecedor que tenha preço, qualidade e prazo que me satisfaçam, e só. Não faz sentido eu exigir que ele me informe quantas horas vai gastar na fabricação, já que isto é segredo dele. Se ele tiver investido em equipamentos, tecnologia e pessoal que lhe permitam fabricar meu pedido em pouco tempo, melhor para ele, terá seu investimento recompensado.

A mesma regra vale para fabricantes de software: se a empresa investiu em equipe, treinamento, componentes, automatização e tecnologia que lhe permitam desenvolver um software em pouco tempo, não faz sentido ela ter que divulgar para quem quer que seja a sua real produtividade e seus custos internos de produção. Isto é um segredo industrial seu.

Assim, se você é um desenvolvedor ou uma empresa que vende projetos fechados, não há nada de errado em não divulgar a quantidade de horas. É um segredo do seu ofício, da sua forma de trabalhar. E pior: certamente esta informação só será usada contra você, nunca a seu favor. Limite-se a discutir prazo, qualidade e preço.

 

 

 

 

Visual Studio .NET 2005/2008: erro "Class not registered" em objetos COM

Ao executar um projeto C# ou VB, recebi a seguinte mensagem de erro:

System.Runtime.InteropServices.COMException was unhandled
  Message="Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))"
  Source="System.Windows.Forms"
  ErrorCode=-2147221164

 

O projeto usa o componente COM ShockwaveFlash ocx, e foi justamente a linha de código que inicializa o controle que disparou o erro.

Tentei baixar nova versão do Flash Player, registrar novamente o ocx, remover a referência e assinalar novamente, apagar o controle do form e recolocá-lo, etc... Nada funcionou.

Suspeitei então que o problema deveria estar relacionado ao fato do meu Windows ser 64 bit. No projeto, abri a janela de propriedades (Project > Properties), guia Build, e mudei o Platform Target de "Any CPU" para x86. Isto resolveu o problema.

Portanto, projetos .NET com referência a objetos COM 32 rodando em Windows 64 provavelmente não funcionarão. Quando acontecer, mude a plataforma-alvo para x86.  

Excluindo objetos do Access com controle de versão

Dando sequência ao artigo de desenvolvimento Access com controle de versão, segue a dica de uma situação comum: exclusão de objetos do Access com controle de versão.

Se você quiser excluir, por exemplo, um formulário do seu banco de dados Access, é normal que tenha a seguinte dúvida: "devo excluir a partir do Access (da mesma forma que faria em uma aplicação sem controle de versão) ou a partir do Team Explorer (ou SourceSafe)?"

Se fosse um arquivo comum, minha sugestão seria excluir a partir do Team Explorer, pois ele providenciaria automaticamente a exclusão do arquivo local. No caso do Access, porém, em que o formulário é representado por um arquivo no TFS mas na máquina local ele é apenas um objeto dentro do MDB, o Team Explorer não consegue excluí-lo localmente. Assim, o mais prático é excluir o formulário a partir do Access, pois ele identificará que o objeto está com controle de versão e perguntará se você deseja excluir o arquivo correspondente no TFS.

 

Esta pergunta só é feita se nas configurações de Source Control do Access você mantiver o padrão "Ask" para o parâmetro "Remover objetos do controle de versão ao deletá-los do Access", conforme mostra a figura abaixo.

 

Um cuidado importante que você deve ter é fazer o Check-In do objeto antes de excluí-lo, já que o Access (infelizmente) não dá nenhum alerta a este respeito. Se acontecer de você excluir o formulário quando ele estiver com status Check-Out, ele será excluído do Access mas permanecerá no TFS. E pior, ele não permitirá excluir nem fazer Check-In pelo Team Explorer, conforme mostram as figuras abaixo:

 

 

Para conseguir excluir do TFS, é necessário primeiro desfazer as alterações pendentes e só depois disto excluir.

 

Concluindo: faça a exclusão do objeto a partir do Access, mas antes disto assegure-se de ter feito Check-In do objeto.

Access 2007 com controle de versão no TFS

No Access 2003 criei projetos usando controle de versão de objetos usando o Team Foundation Server 2005 (TFS). Isto é possível usando-se o Access 2003 Source Code Control Add-In, disponível aqui: http://www.microsoft.com/downloads/details.aspx?familyid=2ea45ff4-a916-48c5-8f84-44b91fa774bc&displaylang=en

Agora, com Access 2007 e TFS 2008, demorei um pouco a achar a solução. Vi na Internet alguns sites dizendo que a integração Access 2007 x TFS não é possível, apenas Access 2007 e SourceSafe. Isto felizmente não é verdade!

Para desenvolver no Access usando os recursos de controle de versão do TFS (tanto 2005 como 2008), após instalar o Access, o TFS e o Team Explorer (que é o client do TFS), é necessário instalar:

a) O Access Developer Extensions 2007 (ADE): http://www.microsoft.com/downloads/details.aspx?FamilyId=D96A8358-ECE4-4BEE-A844-F81856DCEB67&displaylang=en O add-in de controle de versão agora faz parte deste pacote ADE, não é mais separado. Após instalar o ADE, você notará que há um novo item disponível a partir do botão Office: "Developer". Este novo item tem as opções "Package Wizard", "Save as Template" e "Create from SourceSafe". Foi justamente esta última opção que levou aos mais desavisados a acreditar que Access 2007 não fala com TFS.

b) O Visual Studio Team System 2008 (ou 2005) Team Foundation Server MSSCCI Provider: aqui está o segredo. Como o suporte MSSCCI no TFS não é nativo, é preciso instalar este add-in. Endereços:

- Para TFS 2005: http://www.microsoft.com/downloads/details.aspx?FamilyId=87E1FFBD-A484-4C3A-8776-D560AB1E6198&displaylang=en

- Para TFS 2008: http://www.microsoft.com/downloads/details.aspx?familyid=faeb7636-644e-451a-90d4-7947217da0e7&displaylang=en

Após instalar este add-in, o item "Create from SourceSafe" do Access passa a se chamar "Create from Team Foundation".

 

Agora podemos começar o desenvolvimento.

 

Em outro tópico abordarei os pontos de atenção no uso de ferramentas de controle de versão com o Access. 

Concatenar valores de registros diferentes no Access

Esta dúvida não é muito frequente, mas como eu mesmo já precisei algumas vezes desta solução, vou postá-la aqui.

Trata-se da concatenação de valores localizados em linhas diferentes de uma tabela. Em um banco de dados relacional, é simples concatenar campos (Campo1 & "," & Campo2 & "," & Campo3), mas não é simples concatenar linhas diferentes (Linha1 & "," & Linha2 & "," & Linha3).

Estou anexando um exemplo que usa código VBA (tanto DAO como ADO) para percorrer linhas e criar um string com os produtos de cada categoria, separados por vírgula. O exemplo foi criado por mim anos atrás, mas será útil para quem precisar deste tipo de solução.

 

Instalando o dispositivo de segurança do Unibanco no Vista

Ao acessar o site do Unibanco em uma máquina nova, ele pede a instalação do dispositivo de segurança.

No Windows Vista, porém, por mais que tentemos instalar e que não recebamos nenhuma mensagem de erro, o site continua pedindo a instalação. Na prática, ela não é concluída.

Para que a instalação seja bem sucedida, abra o Internet Explorer com privilégios de administrador. Desta forma o dispositivo será instalado corretamente. 

 

Linq to SQL - Debug Visualizer

Ao iniciar meus trabalhos com a sintaxe do Linq, uma dificuldade que tive foi saber qual efetivamente era o comando que estava sendo enviado ao SQL Server.

Pesquisando no Google, descobri um add-in que estava disponível nas versões beta do Visual Studio 2008 mas que foi excluído da versão final, o linq to SQL Debug Visualizer.

Anexei a este post um arquivo zip com este add-in. Para usá-lo, faça o seguinte:

1) Feche o Visual Studio.

2) Abra o arquivo zip.

3) Arraste o arquivo SqlServerQueryVisualizer.dll (que está dentro do zip) para a pasta C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\Visualizers na sua máquina.

Para usar o visualizador, basta colocar um breakpoint na linha seguinte à definição da query que a opção Database Query aparecerá.

 

Ao clicar no Linq to SQL Debugger Visualizer, o Visual Studio abre uma janela com a instrução SQL. Esta janela ainda nos possibilita executar a query e ver os dados durante o debug.

 

 

Free Download Manager

Quem está procurando por uma boa ferramenta de gerenciamento de download, eu recomendo o Free Download Manager (FDM), que pode ser baixado a partir do site www.freedownloadmanager.org

Tela principal do FDM

 

 

Trata-se de uma ferramenta Open Source com bons recursos. Particularmente, eu sub-utilizo a ferramenta, já que para mim basta saber a velocidade e o tempo previsto para conclusão do download.

Durante o download é possível exibir no canto inferior esquerdo da tela uma janela semi-transparente mostrando a porcentagem e o status do download.

 

Campo texto com tamanho fixo no Access

O campo texto das tabelas do Access tem tamanho variável. Isto significa que se você configurar a propriedade Tamanho = 50, estará definindo apenas o tamanho máximo do campo. Se digitar apenas 10 caracteres, o registro terá tamanho 10, não 50.

Se por um algum motivo você precisar que um campo tenha tamanho fixo, completando com espaços as posições não preenchidas, pode fazê-lo por meio de uma query:

ALTER TABLE TuaTabela
ALTER COLUMN TuaColuna CHAR(30)

Quando isto pode ser útil? Raramente. O único cenário que vejo é quando precisamos gerar um TXT de tamanho fixo. Ter a tabela com os tamanhos corretos diminui o trabalho na hora de programar. 

Access - estoque com consulta união

Uma das dúvidas mais postadas em grupos de discusão de Access é sobre a modelagem da base de dados para controle de estoque.

Existe uma abordagem pouco usada mas que considero interessante: calcular o estoque por meio de consulta união. Você pode ter uma tabela de entrada e outra de saída de mercadorias, ou uma única tabela de movimentação. A idéia consiste em criar uma consulta com o código do produto, qtde entrada, qtde saida (em colunas diferentes).

SELECT CodProduto, QtdeEntrada, 0 AS QtdeSaida

FROM qryEntradas

UNION ALL SELECT CodProduto, 0, QtdeSaida

FROM qrySaidas

 

O segredo é criar uma coluna com valor 0 na QtdeSaida dos registros de entrada e uma coluna com valor 0 na QtdeEntrada dos registros de saída.

Por fim, basta pegar esta consulta união e criar uma query agrupando os dados.

Anexo um MDB de exemplo (que criei há muitos anos...).

More Posts Next page »