Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
Me!cboOpções.Dropdown
End Sub
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.
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.
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.
Forms!seuformuláriovendas!seusubformuláriovendas.Form!Desconto=Null
Rede Windows 95/98 *
Login Name *
BD EM REDE *
ODBC
do objeto winsock
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
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?
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()
NomeUsuario = strNomeUsuario
Else
End If
End Function
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":
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:
Conslusão
You can easily retrieve a user's network logon name by using the following
API call:
lngBufferLength = 255
strTemp = UCase(Trim$(strBuffer))
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.
Até mais,
Kleber.
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.
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
left As Long
top As Long
right As Long
bottom As Long
End Type
'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
o mouse)
X.top = 0: X.left = 0
Else
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:
"SystemParametersInfoA" _
As Long
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.
Agora uma coisa mais legal... Se voce estiver trabalhando em uma rede Win95 voce pode
net.runner@u-netsys.com.br
BD EM REDE
>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?!
--------
Oi Albuquerque.
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
Origem:
Alessandro
E-mail:
Testado na versão:
7.0
Comentários:
Passos:
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
Usuário = String(255, 0)
X=1
X=X+1
Loop
UserID = Usuário
>
> 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!
roda sem problemas, desde que suas tabelas não sejem extensas em volume de
Access97.
No Access2000 com a inclusão do acesso à base de dados em SQL7 este limite
Abraços,
--------
Assunto:
Data:
De:
"Juninho" <shopcomp@zaz.com.br>
Para:
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.
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.
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!
net.runner@u-netsys.com.br
Aplicativos: Visual Basic 3.0 32bits, Visual Basic 5.0, Office 95 e 97.
Introdução
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:
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()
NomeUsuario = strNomeUsuario
Else
End If
End Function
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":
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:
Conslusão
Commit, Trans - Para efetivar / Rollback - Para desfazer / On error – para tratar erros de
acesso e semelhantes.