Você está na página 1de 21

Dicas sobre o Access

Descubra a tecla Zoom


O Access tem o hábito de mostrar a informação em grelhas que apenas revelam parte do
campo. Claro que pode ocupar o seu tempo a escolher o tamanho da letra e a largura das
colunas, mas será melhor premir Shift/F2 para fazer zoom a um campo-o seu conteúdo
será aberto numa janela separada, tornando-o muito mais fácil de alterar. Isto também
funciona no Query, permitindo-lhe poupar a escrita de longas expressões num pequeno
campo de Critérios.
Não guarde imagens como objectos OLE
A forma oficial de armazenar imagens em bases de dados do Access é através dos
objectos OLE (Object Linking and Embedding). Embora seja algo fácil de fazer, há
muitas desvantagens, como o fano de o tamanho da base de dados ser demasiado grande
e o comportamento ser imprevisível em sistemas diferentes, para além dos problemas de
acesso aos gráficos através de código. Será melhor manter as imagens como ficheiros
externos, armazenando apenas um atalho na base de dados, usando assim o Controlo de
Imagem para mostrar o gráfico num formulário. Se precisar de armazenar a própria
imagem na base de dados, guarde-a como BLOB (Binary Large Object) em vez de um
objecto OLE. Pode mostrá-lo apenas com a escrita de código que guarda a imagem como
um ficheiro temporário antes de o mostrar num formulário. Um código exemplo
encontra-se no Microsoft KnowledgeBase ou em toda a Internet. Neste caso, pode obter
uma melhor performance se mantiver as imagens numa base de dados Microsoft (MDB) e
fizer um link para a tabela.
Evite os nulos
Em teoria, os valores nulos são bons porque lhe permitem distinguir entre valores
desconhecidos e vazios. Em muitos casos, estes últimos podem ser uma chatice. Para
impedir o aparecimento de valores nulos num campo, abra o designer de tabelas. Para os
campos de memória e de texto, dê como verdadeira a opção Allow Zero Length e o valor
default para duas aspas (""). Para campos de outros tipos, assegure-se que existe um valor
default. Repare que isto não vai alterar em nada o que já existia. Se tiver de trabalhar com
valores nulos, use a função IsNull ou o critério especial IS NULL e IS NOT NULL no
designer do questionário. No geral, se estiver a obter resultados inesperados no Query, os
culpados são os valores nulos. Campos com valores como estes nunca serão
seleccionados por um Query a não ser que os peça especificamente.
Faça pesquisa do tipo case-sensitive
O Access pode fazer pesquisas do tipo case sensitive através das funções StrComp() e
InStr. Use StrComp para pesquisar num campo completo e InStr para apenas parte do
campo.
Controle as macros do Start-up
Se der o nome AutoExec a uma macro, ela vai correr automaticamente quando a base de
dados do Access é aberta. Se carregar em Shift a macro não será corrida. Mas, se quiser,
pode impedir que o Shift faça o bypass do código de startup, bastando colocar a opção
AllowbypassKey para «Falso». Infelizmente tem de fazer isto usando código Visual
Basic, mas um exemplo completo pode ser encontrado na Ajuda On-line. Procure por
AllowBypassKey.
Use subpesquisas no SQL
As subpesquisas do SQL são uma técnica muito poderosa para a manipulação de dados.
Imagine que tem duas versões na mesma tabela e que quer adicionar linhas de uma para a
outra, mas apenas quando elas não existirem. Assumindo que o campo de chave primária
se chama ID, aqui temos o SQL: INSERT INTO artists
SELECT NewArtists.* FROM NewArtists WHERE NewArtists.Id Not In (select
Artists.Id from Artists);
Uma técnica de recupração não documentada
Está preso a uma base de dados corrompida? De acordo com a Microsoft, o modo
descompilador não documentado para o Access 2000 pode reparar corrupções que
qualquer ferramenta de reparação não consegue. Basca colocar no Access com a seguinte
linha de comando: /decompile «dbname» em que «dbname» é o caminho completo para a
sua base de dados. Pode fazê-lo através de um atalho, o que leva o Access a pensar que
tem de alterar o formato binário. Antes de tentar esta ou outra tentativa de reparação, faça
uma cópia de segurança da base de dados mestra (MDB) corrompida.
Separe os dados e os códigos
Se partilha uma base de dados Access, considere usar uma MDB para todos os
formulários, relatórios, macros e codigo VBA, e uma outra para os dados. Use a opção
Link Table para anexar as tabelas da base de dados a aplicações MDB. Agora, tem a
opção de armazenar a aplicação MDB numa estação de trabalho, enquanto mantém os
dados numa localização partilhada, o que aumenta a performance. O lado negativo é que,
se quiser actualizar as aplicações, tem de substituir todas as cópias, usando um script de
login.
Desfragmente antes de compactar
Poderá aumentar a performance da sua máquina desfragmentando o disco, ou recorrendo
ao utilitário Compact and Repair do Access para optimizar uma MDB. Quando o fizer, é
melhor desfragmentar o disco primeiro. Se compactar sem ter desfragmentado, é mais
provável que a base de dadas fique rodeada por espaço usado do disco, tornando mais
lento o acesso quando se adicionam dados.
Use a indexação com cuidado
Indexar uma coluna a uma determinada tabela aumenta a velocidade da pesquisa nessa
mesma coluna, mas cada nova indexação que adiciona abranda a actualização da base de
dados. Deste modo o valor de uma indexação depende de como os dados são usados.
Com o Outlook - 2000

Até a versão 97 do Office, o Access e o Outlook não conversavam. Na edição 2000 é possível
importar para o Access informações disponíveis no Outlook e estabelecer um vínculo entre as
bases de dados. Esse intercâmbio abre novas possibilidades de uso dos programas. É possível,
por exemplo, criar um sistema de gerenciamento de clientes baseado na agenda de contatos do
Outlook ou desenvolver um sistema de gerenciamento de projetos a partir do conteúdo da lista de
tarefas. Acione o comando Arquivo/Obter Dados Externos/Vincular Tabelas no modo de exibição
Folha de Dados do Access. Na lista Tipos de Arquivos, escolha Outlook. Na seqüência, siga as
instruções do assistente. Lembre-se de que como os dados estão vinculados, qualquer alteração
feita a partir de um dos programas se reflete automaticamente no outro.

Do Excel - 97/2000

Para transportar uma tabela ou parte dela do Excel para o Access, abra os dois programas. Então,
selecione os dados no Excel e copie-os. No Access, crie uma tabela no modo Folha de Dados e
clique na interseção da linha com os títulos dos campos com a coluna dos seletores de linhas. A
tabela fica toda selecionada. Agora, acione Editar/Colar, ou Ctrl+V Faça os ajustes finais,
renomeando e dimensionando os campos.

Listas - 97/2000

Qual a vantagem de usar uma caixa de lista em vez de uma caixa de combinação? A resposta é
óbvia: a caixa de lista mantém os itens mais à mão. A outra requer pelo menos um clique adicional
para abrir a lista. Só que, na maioria das vezes, a falta de espaço no formulário impõe o uso da
caixa de combinação. Mesmo assim, no Access é possível combinar o melhor dos dois controles.
Com um pequeno código, pode-se fazer com que a caixa de combinação exiba sua lista drop-down
logo ao receber o foco. Para isso inclua o seguinte código para uma caixa de combinação
chamada cboOpções:

Private Sub cboOpções_GotFocus()

Me!cboOpções.Dropdown

End Sub

Para o Word - 97/2000

Transportar tabelas do Access para o Word é mais fácil do que parece. Com os dois programas
abertos, arraste a tabela do Access (a partir da janela Banco de Dados) para a página do Word.

Não, assistente, obrigado - 97


No Access 97, quando você desenha um botão de comando num formulário, o programa abre um
assistente para ajudá-lo a definir o que aquele botão vai fazer. Muitas vezes, no entanto, você quer
dispensar essa assessoria - e não tem escolha. Tem, sim. Mantenha pressionada a tecla Shift e
clique no ícone do botão, na caixa de ferramentas. Um novo objeto será adicionado ao formulário.

Janela de zoom - 97/2000

Em qualquer versão do Access, em tabelas, consultas, macros e até nas caixas de propriedades, é
comum você encontrar um texto maior do que é possível ver no campo de visualização. Nesses
casos, para facilitar a leitura, acione Shift+F2. O programa abre a janela Zoom, que mostra o texto
num espaço maior.
FORMULÁRIOS
    Formulários são instrumentos para facilitar a entrada e edição dos dados. Eles também
trazem para o programador recursos de programação não existentes nas Tabelas e Consutas,
além de serem visualmente mais atraentes que Tabelas ou consultas.
 

Cancelando Evento em outro Formulário

Para que eu estando com o foco no formulário Senha, possa cancelar um evento num
subformulário, do formulário serviços. O que eu estou querendo é que ao preencher um
desconto maior que um valor seja pedida uma senha de autorizacao (abre-se um formulario
baseado numa tabela onde esta armmazenada a senha) e se a senha estiver errada o
formulario seja fechado e o evento seja cancelado o foco permanecendo no Controle
Desconto.

1. Na tabela que possui o campo Desconto, defina-o como Requerido Sim.

2. Substitua o comando DoCmd.CancelEvent no Formulário Senha pelo comando:

Forms!seuformuláriovendas!seusubformuláriovendas.Form!Desconto=Null

A coisa acabou ficando assim (colocando o Desconto como não Requerido):

Forms![Serviços]![Itens de Serviço Subformulário].[Form]!Desconto.SetFocus


REDES
 

 
Rede Windows 95/98 *

Como Obter o Número IP de uma Máquina e o Número da Placa de Rede *

Login Name *

Recebendo O Logon Da Rede *

Ocultar qualquer diretorio compartilhado *

BD EM REDE *

Rotina para pegar o Nome do usuário da rede *

Comentários Sobre BDs no Access *

Como saber o "Login Name" do usuário corrente *

ODBC
 

Rede Windows 95/98

Numa rede windows 95/98, deve-se lembrar de habilitar o Compartilhamento Completo no


micro onde está o sistema, para que funcione adequadamente.

Como Obter o Número IP de uma Máquina e o Número da Placa de Rede

Voce pode usar a propriedade localip

do objeto winsock

basta inclui-lo em seu projeto.

Login Name
Como saber o "Login Name" do usuário corrente

Aplicativos: Visual Basic 3.0 32bits, Visual Basic 5.0, Office 95 e 97.

Introdução

Muitos sistemas possuem um módulo de segurança, onde os usuários cadastrados se


identificam com seu "User Name" e uma senha para que o sistema possa saber as
permissões de cada um dos usuários.

Se o ambiente onde o sistema estiver sendo executado for de rede, é possível aproveitar o
login da rede para saber quem é o usuário. Desta forma, o usuário não necessita se
identificar na entrada do sistema. Para saber qual o usuário corrente, é usada uma função da
API do Windows chamada GetUserName.

Como Fazer?

Para usar a função GetUserName, é necessário declará-la com a seguinte sintaxe:

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal


lpBuffer As String, nSize As Long) As Long

Como pode ser visto, esta função possui 2 parâmetros: lpBuffer, que é a variável que
receberá o "login name" e nSize, que é o tamanho em bytes da váriavel que receberá o
"login name".

Se a função retornar zero, o processo falhou, caso contrário, está tudo OK.

Exemplo:

Function NomeUsuario()

Dim strNomeUsuario As String

Dim lngTamanhoString As Long

Dim lngRetorno As Long

lngRetorno = GetUserName(strNomeUsuario, lngTamanhoString)

If lngRetorno <> 0 then

strNomeUsuario = String(lngTamanhoString, " ")

lngRetorno = GetUserName(strNomeUsuario, lngTamanhoString)


strNomeUsuario = Left$(strNomeUsuario, lngTamanhoString - 1)

NomeUsuario = strNomeUsuario

Else

MsgBox "A busca do Nome do Usuário falhou!!!"

End If

End Function

Vamos analisar alguns pontos importantes deste exemplo:

Como visto, a função foi chamada duas vezes. Isto é feito para primeiramente saber o
tamanho da string que deve ser passada. Este tamanho é retornado na variável passada
(lngTamanhoString). Sabendo este tamanho, basta preencher a string que receberá o "login
name":

strNomeUsuario = String(lngTamanhoString, " ")

Quando tudo ocorre normalmente, basta em seguida usar o número retornado pela função
na variável de tamanho, que corresponde ao tamanho da string com o caractere nulo
terminal. Como não desejamos o caractere nulo terminal pegamos todos menos ele:

strNomeUsuario = Left$(strNomeUsuario, lngTamanhoString - 1)

Conslusão

Tendo o "login name", basta pegar as permissões armazenadas normalmente em um banco


de dados com todos os "login names" cadastrados.

Recebendo O Logon Da Rede

Retrieving the network logon name

You can easily retrieve a user's network logon name by using the following

API call:

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _

(ByVal lpBuffer As String, nSize As Long) As Long


To retrieve a "clean" version of the name, use this function:

Public Function NTDomainUserName() As String

Dim strBuffer As String * 255

Dim lngBufferLength As Long

Dim lngRet As Long

Dim strTemp As String

lngBufferLength = 255

lngRet = GetUserName(strBuffer, lngBufferLength)

strTemp = UCase(Trim$(strBuffer))

NTDomainUserName = Left$(strTemp, Len(strTemp) - 1)

End Function

SISTEMA "MODAL"

No VB4 - 16bits eu utilizava uma api da dll USER chamada SetSysModal que fazia com
que a sua aplicação se tornasse MODAL e impedisse o uso de outras aplicações (ou seja o
usuário não pode utilizar ALT+TAB nem CTRL+ESC nem utilizar outro programa do
windows enquanto não sair da minha aplicação). Preciso disso pois a máquina só poderá ser
liberada após uma verificação de senha e SmartCard.

Alguém sabe como fazer algo semelhante com alguma API de 32 bits no VB5 ? (a máquina
do smartcard só trabalha em 32bits...)

-------

Meu amigo,

Estive desesperado tentando conseguir a mesma coisa no windows 95; mas o que me
impediu foi justamente o fato de que o Windows 95 é um sistema operacional multitarefa
preemptiva, o que significa que nenhuma aplicação pode estar de fato funcionando 'modal'.
Podemos ter janelas 'modal' dentro de um contexto de processo em execução, mas não no
sistema todo.
Se o objetivo é parar tudo e fazer com que o usuário fique obrigado a usar um comando,
como por exemplo uma janela de login com senha, o jeito é esconder a barra de tarefas,
limitar a area de movimento do mouse na tela e manipular a entrada do teclado, tudo isso
via API. O caso é que estou estudando essas 3 formas, sendo que a primeira já consegui
como fazer. Divino Junior

dribeiro-fct@unimar.br

-------

Estou meio sem tempo para procurar uma solução elegante para o problema, mas a segunda
parte de limitar a área de movimento do mouse na tela eu já tinha pronta.

Qualquer dúvida, é só perguntar.

Até mais,

Kleber.

PS.: duas observações para quem se interessar pela rotina:

1ª- Tentei usar uma 'MsgBox' depois de chamar a 'ClipCursor' e a MsgBox soltou o
mouse! :-o

2ª- Diz o help da API que para soltar o mouse é só mandar 'ClipCursor' com NULL como
parâmetro.

Como em VB para se usar NULL é só usar o zero, tentei fazer

Temp = ClipCursor(0)

mas não obtive sucesso... Se alguém conseguir isto, por favor não se esqueça de me contar
como fez. :-)

Option Explicit

'ClipCursor confina o cursor em um retângulo na tela '(as coordenadas são determinado na


estrutura 'RECT')

Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long

Private Type RECT

left As Long

top As Long
right As Long

bottom As Long

End Type

Private Sub Form_Click()

Static Flag As Boolean

Dim X As RECT, Temp As Long

'Maximiza a tela, pois se o cursor for confinado em um local 'fora da janela, você não
conseguirá mais soltá-lo! :-)

Me.WindowState = 2

'Flag varia entre falso e verdadeiro a cada click 'Ou seja, um click no form confina o
mouse; outro click solta-o

If Flag Then

'Cria um retângulo com o tamanho total da tela (e assim libera

o mouse)

X.top = 0: X.left = 0

X.bottom = Screen.Height / Screen.TwipsPerPixelY

X.right = Screen.Width / Screen.TwipsPerPixelX

Else

'Confina o cursor nas seguintes coordenadas

X.top = 300: X.left = 300

X.bottom = 400: X.right = 500

End If

'Chama a função; se o valor de retorno for diferente de zero, 'significa que a função foi bem
sucedida

Temp = ClipCursor(X)
Flag = Not Flag

End Sub

--------

Bom, já que tá todo mundo no mesmo barco eu acabei achando uma solução interessante e
já vou passar para os outros interessados...

descobri que existe uma função no User32 chamada SystemParametersInfo que diz ao
windows95 ou NT que um Screen Saver está ativo e, com isso, desabilita o ALT+TAB,
CTRL+ESC e CTRL+ALT+DEL. funciona assim:

Private Const SPI_SCREENSAVERRUNING = 97&

Private Declare Function SystemParametersInfo Lib "User32" Alias

"SystemParametersInfoA" _

(ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any,

ByVal fuWinIni As Long) _

As Long

Para ativar, no load ou no activate da tela, coloque o seguinte código:

Dim lngRet As Long

Dim blnOld As Boolean

lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, blnOld, 0&)

Para Desativar o código é:

Dim lngRet As Long

Dim blnOld As Boolean

lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, blnOld, 0&)

Eu testei e pode ter certeza de que funciona mesmo no win95 e no NT.

Luis Serpa
-------

Ok, gente. Ja consegui colocar minha aplicacao MODAL presa sem que o usuario possa
mudar com ALT+TAB, mas agora eu tenho outro problema:

Depois que o usuario coloca a senha eu libero a maquina para uso e gostaria de impedir que
algum desavisado saisse mexendo ou apgando diretorios do HD da maquina. existe alguma
maneira de TRAVAR o explorer ou impedir que arquivos sejam deletedados ou impedir o
acesso a determinados diretorios ? Por favor se alguem souber... Luis Serpa

---------

Tem sim.

Vai te dar um pouco de trabalho fazer o VB enxergar o conteudo do diretorio. Coloque um


caracter Chr(254) no nome do arquivo... e ninguem vai poder acessar o diretorio via
Windows (tem que criar o diretorio via DOS caso contrario nao funciona) . Mas via DOS
qualquer um pode dar um Deltree e apagar tudo. Essa e uma dica velha ... mas quando nao
se tem escolha, nao se pode mudar de OS...

Agora uma coisa mais legal... Se voce estiver trabalhando em uma rede Win95 voce pode

Ocultar qualquer diretorio compartilhado

va ate as propriedades do compartilhamento e coloque um $ no fim do nome como o


diretorio que vai ser compartilhado. O diretorio continua sendo acessivel com as mesmas
propriedades e senhas que voce definiu... porem agora ele nao aparece em nenhuma lista do
Windows.

Para entrar no diretorio so digitando o caminho completo: \\maquina\pasta$\ legal ne? Eu


uso esse recurso para ninguem deletar acidentalmente os arquivos da agencia de correio
eletronico e o .MDB do meu programa. Boa sorte! CRG

net.runner@u-netsys.com.br

BD EM REDE

>O que esta acontecendo é o seguinte.

>Eu sei que quanto mais usamos um arquivo .MDB ele costuma ficar um pouco maior
devido a dados temporários que o Jet Database grava no próprio MDB. Para remover estes
dados é só compactar o banco de dados pelo Access ou pelo método CompactDatabase.
>Mas o meu banco de dados esta ficando grande demais... chegando a atingis 6.5Mb com
apenas 2 ou 3 usuários trabalhando "para valer" no banco de dados.

>Minha pergunta é... isso é normal? Nas outras versões no Jet DataBase o MDB não ficava
tão grande assim.

>O MDB praticamente dobrou de tamanho só de dados temporários. Como vai ficar
quando eu tiver 10 ou 15 funcionários usando o sistema ao mesmo tempo?!

>Obrigado a todos da lista.

--------

Oi Albuquerque.

Em primeiro lugar obrigado pela atenção.

Esta nos meus planos migrar para o NT no futuro e uma base de dados mais consistente.

O que esta me espantando no caso desse MDB é que em outra empresa eu criei um sistema
similar usando o Access2 e nessa empresa havia tabelas com muito mais registros (25000) e
também muito mais usuários (16 ao todo) e o MDB não era maior que 10Mb. Como que
essa tecnologia pode ter involuído no Access97?!

Obrigado a todos!

Cesar R. Gimenes

---------

Se voce esta´ pensando em ter mais do que 10 usuarios simultaneos, talvez a melhor
solucao seja usar o SQL SERVER. Ele monta tabelas com acesso muito rapido, mesmo que
o banco (muito menor que o MDB) tenha 300, 400 Mb.

Por exemplo, eu tenho um banco com mais de 50 tabelas, sendo a maioria com menos de
500 registros, duas com 12.000 e uma, especificamente, com mais de 100 mil registros, e
tudo junto ocupa cerca de 330 Mb no servidor. Utilizo esta solucao (Servidor NT 4.0 +
SQL Server) para 22 usuarios simultaneos, e um banco bem pesado. A performance e´
muito boa.

Ter uma tabela como esta no formado MDB e´ suicidio. Voce esta´ muito sujeito a
problemas. Quando voce tiver 15 funcionarios atualizando a tabela simultaneamente, voce
tera´ muitos problemas de perda de integridade, por que o formato MDB nao funciona
muito bem com um compartilhamento pesado como este.
Outra solucao seria utilizar um formato de arquivo intermediario entre o MDB e o SQL
SERVER. Por exemplo, InterServer.

Atencisoamente,

Sergio A. Albuquerque

Obs.: estas mensagens foram da lista de VB da virtualand: http://www.virtualand.net/

Rotina para pegar o Nome do usuário da rede

Origem:

Alessandro

E-mail:

Testado na versão:

7.0

Comentários:

A rotina além de funcionar com sucesso nas redes Novell e Windows NT

também obteve bom desempenho em redes Windows 95.

Passos:

1 - Crie um novo módulo e coloque as seguintes linhas:

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal


lpBuffer As

String, nSize As Long) As Long

Public ret As Long

Public Usuário As String

2 - Salve o módulo com qualquer nome;

3 - No formulário que você tem como o primeiro a ser aberto junto com o banco de dados
crie
um campo com o nome "UserID" e, no evento Ao Abrir do formulário, coloque a seguinte
rotina:

Dim X As String

'captura o nome do usuario logado na rede

Usuário = String(255, 0)

ret = GetUserName(Usuário, Len(Usuário))

'elimina os nulos da variavel Usuário

X=1

Do While Asc(Mid(Usuário, X, 1)) <> 0

X=X+1

Loop

Usuário = Left(Usuário, (X - 1))

UserID = Usuário

Access 97 em rede: com quantos micros ele tem capacidade de trabalhar?

>

> Ouvi um boato de que o Access 2 (na época) trabalhava com pequenas redes

> de ate 11 micros, mas não tenho certeza e no Access 97 talvez seja

> diferente!

Dividindo-se o banco de dados em dois (Back-End e Front-End) até 20 estações

roda sem problemas, desde que suas tabelas não sejem extensas em volume de

dados. Já tive a experiência em implantar sistemas nesta configuração em

Access97.
No Access2000 com a inclusão do acesso à base de dados em SQL7 este limite

praticamente não existe.

Abraços,

Vagner Izaias Ferreira

Vagner'Soft Informática Ltda.

--------

Assunto:

Re: Com quantos micros o Access97 pode trabalhar em rede?

Data:

Tue, 21 Dec 1999 09:57:38 -0200

De:

"Juninho" <shopcomp@zaz.com.br>

Para:

"Ribamar FS" <ribafs@yahoo.com>

O Access 97 comporta senão me engano até 25 computadores em rede.

Comentários Sobre BDs no Access

Não seria o caso de vc pensar em migrar para SQL SERVER??

Sim...

O problema é que o CEO da empresa exigiu que eu usasse o Access97. Nem trabalhar com
o VB5 (que é a minha vontade) eu posso. Bom o jeito foi montar tudo no próprio Access, o
programa esta ficando legal embora um pouco lento nas maquinas mais desmemoriadas. A
única deficiência que eu encontrei programando no Access é que ele não pode usar o
operador AddressOf que no VB é usado para fazer os famosos CallBacks. ...Única
deficiência alem das que eu já esperava :-)... Por enquanto não tive problemas de banco de
dados corrompido ou truncado (para falar a verdade eu tinha muito desse tipo de problema
nos velhos tempos do Clipper)

>Eu tenho um caso em que fui forçado a mudar... Usando apenas MDB, o BD se corrompia
a toda hora, e isso não acontece mais usando o SQL SERVER. >A configuração nesse caso
era para 10 usuários. Além do mais, o SQL SERVER dá muito mais opções.

Sim eu acho uma boa.

O problema é que até isso passar pela etapa de O&M vai levar no mínimo um ano.

>Sugiro que vc dê uma olhada na edição desse mês da revista FORUM ACCESS.

Legal ... Vou sim!

Quanto ao tamanho do banco de dados, cada vez que eu adiciono um usuário ele fica mais
obeso, ainda mais agora que eu tenho um usuário trabalhando remotamente via rede Dial-
Up. (Deus tenha piedade da minha alma)

Obrigado Takahashi!

Obrigado também a todos os amigos das listas. Cesar R. Gimenes

net.runner@u-netsys.com.br

Como saber o "Login Name" do usuário corrente

Aplicativos: Visual Basic 3.0 32bits, Visual Basic 5.0, Office 95 e 97.

Introdução

Muitos sistemas possuem um módulo de segurança, onde os usuários cadastrados se


identificam com seu "User Name" e uma senha para que o sistema possa saber as
permissões de cada um dos usuários.

Se o ambiente onde o sistema estiver sendo executado for de rede, é possível aproveitar o
login da rede para saber quem é o usuário. Desta forma, o usuário não necessita se
identificar na entrada do sistema. Para saber qual o usuário corrente, é usada uma função da
API do Windows chamada GetUserName.

Como Fazer?
Para usar a função GetUserName, é necessário declará-la com a seguinte sintaxe:

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal


lpBuffer As String, nSize As Long) As Long

Como pode ser visto, esta função possui 2 parâmetros: lpBuffer, que é a variável que
receberá o "login name" e nSize, que é o tamanho em bytes da váriavel que receberá o
"login name".

Se a função retornar zero, o processo falhou, caso contrário, está tudo OK.

Exemplo:

Function NomeUsuario()

Dim strNomeUsuario As String

Dim lngTamanhoString As Long

Dim lngRetorno As Long

lngRetorno = GetUserName(strNomeUsuario, lngTamanhoString)

If lngRetorno <> 0 then

strNomeUsuario = String(lngTamanhoString, " ")

lngRetorno = GetUserName(strNomeUsuario, lngTamanhoString)

strNomeUsuario = Left$(strNomeUsuario, lngTamanhoString - 1)

NomeUsuario = strNomeUsuario

Else

MsgBox "A busca do Nome do Usuário falhou!!!"

End If

End Function

Vamos analisar alguns pontos importantes deste exemplo:

Como visto, a função foi chamada duas vezes. Isto é feito para primeiramente saber o
tamanho da string que deve ser passada. Este tamanho é retornado na variável passada
(lngTamanhoString). Sabendo este tamanho, basta preencher a string que receberá o "login
name":

strNomeUsuario = String(lngTamanhoString, " ")

Quando tudo ocorre normalmente, basta em seguida usar o número retornado pela função
na variável de tamanho, que corresponde ao tamanho da string com o caractere nulo
terminal. Como não desejamos o caractere nulo terminal pegamos todos menos ele:

strNomeUsuario = Left$(strNomeUsuario, lngTamanhoString - 1)

Conslusão

Tendo o "login name", basta pegar as permissões armazenadas normalmente em um banco


de dados com todos os "login names" cadastrados.

Utilizar o VB com banco de dados do MS Access em ambiente multiusuário

Resposta do Marcus Vinícius: Normalmente. Para o MsAccess é indiferente se você está


utilizando acesso multiusuário ou não. Você deve tomar cuidado, somente com os
comandos de rede. tais como:

Commit, Trans - Para efetivar / Rollback - Para desfazer / On error – para tratar erros de
acesso e semelhantes.

Você também pode gostar