DICAS
Deixar na memória o programa e ser executado numa determinada
hora! *
Retornar que dia, mês e ano será de hoje a daqui 1
mes e 48 dias, por exemplo. *
Transformar .mdb em .txt *
Senha apenas para o Banco de Dados no Access 2 *
Acessar a porta paralela do computador usando o Visual Basic *
Mudar de campo com a tecla enter, pois só consigo com o TAB
*
Definir ENTER para saltar de campos, e não emitir um Beep
após o ENTER ser pressionado *
Ler o número do HD para mostrar ao usuário do programa
o número em uma tela *
Atualizar um TextBox automaticamente ao preencher um determinado
item no DBCombo *
Somar o conteúdo de um campo e exibi-lo em uma textbox *
Texto de uma caixa de texto selecionado quando a caixa tiver com
o foco *
Impor uma período de funcionamento para meu programa *
Ao digitar o ponto do teclado numérico, o progrma interprete
como vírgula *
Consulta em várias tabelas *
Criar um campo numérico com duas casas decimais em uma determinada
tabela, através de código *
Como registrar um OCX *
Aplicação Multiusuária com Windows 3.11 *
IMPRIMIR ARQUIVO TEXTO *
Ler arquivo do Excel no VB ou Access *
Parábola *
Como uma barra de progresso estabelecer o mínimo (0%) como
sendo o inicio da copia de alguns arquivos e o máximo (100%) como
o final? *
Pegar somente os 2 primeiros dígitos de um número
*
Número de Linha em Arquivo Texto *
Acelerando Código *
Botão de Comando Redondo *
Fazendo AutoNumeração
voltar a iniciar de 1 novamente
Deixar na memoria o programa e ser executado numa determinada hora!
(Exemplo: às 17:30).
: Eh por forma Hide ??
Uma forma é colocar no Form um controle Timer e testar nele se chegou determinada hora.
Ex:
Private Sub Timer1_Timer()
If format(now,"hh:nn") = "17:30" then call Aciona_Rotina
end sub
Retornar que dia, mês e ano será de hoje a daqui 1 mes e 48 dias, por exemplo.
: Ja tentei criar uma funcao,contudo devido a variações dos dias dos meses e ainda de anos bissextos, acabei desistindo.
Caro Alexandre
Você deve usar a Função dateAdd a sintaxe você pega no
Help do VB, mais a Solução Seria:
DateAdd("d",78,Now)
o "d" significa que Vou somar dias 78 = 1 mes e 48 dias
Existe dois métodos:
1- usando o arquivo txt como se fosse uma tabela de um banco de dados e usar comandos
SQL para transportar os registros (nunca me lembro dos comandos)
2- usando programação, como segue:
Tabela.MoveFirst
open "arquivo.txt" for output as #1
do while not Tabela.EOF
print #1, tabela!campo1 & vbtab & tabela!campo2 & vbtab ....
tabela.MoveNext
loop
close #1
(cria um arquivo com campos de tamanho variavel separados por TAB)
Senha apenas para o Banco de Dados no Access 2
Eu tenho um Banco de Dados no Access e não gostaria de deixar que o usuário pudesse abri-lo e fazer as alterações que achasse "melhor", pois talvez o programa não funcionaria corretamente, portanto gostaria de acessar o banco de dados protegido apenas através do programa.
Obs.: Isso para o Acces2, que não tinha o recurso de senha apenas para o Banco de Dados.
: Desde já agradeço,
: Batata
Use:
Set BancoDeDados = OpenDatabase("C:\BANCO DE DADOS.MDB", False, False, ";pwd=suasenha")
A senha é case sensitive.
Acessar a porta paralela do computador usando o Visual Basic
é simples:
open "lpt1" as #1
print #1, "texto"
close #1
Mudar de campo com a tecla enter, pois só consigo com o TAB
No evento Keypress insira o seguinte código:
If KeyAscii = 13 then
SendKeys "{TAB}"
KeyAscii = 0
End If
Definir ENTER para saltar de campos, e não emitir um Beep após o ENTER ser pressionado
Existe mais duas formas de fazer isso:
Se voce quer que o efeito do ENTER funcione para todos os controles
presentes no formulario:
1) No evento Form_KeyPress insira o codigo:
If KeyAscII = 13 then
SendKeys "{Tab}"
KeyAscII = 0
endif
2) Altere a propriedade KeyPreview do Form para True
Se voce quer que o efeito do ENTER funcione num controle em
especifico:
1) No evento KeyPress do controle insira o codigo:
If KeyAscII = 13 then
SendKeys "{Tab}"
KeyAscII = 0
Endif
Ler o número do HD para mostrar ao usuário do programa o número em uma tela
Prezado Eduardo,
Segue a rotina para verificação do Serial Number de qualquer unidade
registrada no Windows 95 ou Windows NT
'Declaração da API, só funciona em VB32bits (4 ou 5)
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Sub mostra_serial()
Dim lVSN As Long, n As Long, s1 As String, s2 As String
Dim unidade As String
Dim sTmp As String
On Local Error Resume Next
'especifica-se o diretorio raiz
unidade = "C:\"
'Reservando espaço para os string que serão passados para a API
s1 = String$(255, Chr$(0))
s2 = String$(255, Chr$(0))
n = GetVolumeInformation(unidade, s1, Len(s1), lVSN, 0, 0, s2, Len(s2))
's1 terá o label da unidade
'lVSN terá o serial number
's2 indica o tipo de gravação de arquivo (se FAT, etc...)
'Numero IVSN (serial number) é convertido para hexadecimal para ser mostrado como no DIR
sTmp = Hex$(lVSN)
Label3(0) = s1
Label3(1) = Left$(sTmp, 4) & "-" & Right$(sTmp, 4)
Label3(2) = s2
End Sub
Somar o conteúdo de um campo e exibi-lo em uma textbox
Gilda Gomes,
Vamos admitir que o TextBox destino seja Text1, a tabela contendo o campo Valor se chame Tabela1, e que o banco de dados onde está Tabela1 seja Banco1.MDB:
Sub Exemplo()
Dim BD as Database
Dim strSQL as String, auxRS as Recordset
Set BD = Workspaces(0).OpenDatabase("Banco1.MDB")
strSQL = "select sum(Valor) as Soma" & _
" from Tabela1"
Set auxRS = BD.OpenRecordset(strSQL)
if Not IsNull(auxRS!Soma) then
Text1 = auxRS!Soma
End If
auxRS.Close
BD.Close
End Sub
Texto de uma caixa de texto selecionado quando a caixa tiver com o foco
Sim, isso é possível.
No evento GotFocus, escreva:
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
Impor uma período de funcionamento para meu programa
Prezado Silva,
Não vou escrever a rotina para você, mas tenho uma idéia e vou expo-la:
1-Na primeira execução do seu sistema, já na tela de abertura, verifique se é a primeira vez que o sistema é rodado. Para tal, crie um banco de dados ou então um arquivo binario qualquer que registre a data do primeiro acesso. É fácil, se a data do primeiro acesso estiver vazia, então é a primeira vez que o usuário acessa o sistema. Caso não queira usar arquivos ou então banco de dados para fazer isso, você também pode usar o registro do Windows. Pesquise no help a utilização dos comandos GETSETTING, DELETESETTING E SAVESETTING. Esses comandos com certeza resolvem esse problema, pois permitem que você, ao rodar o software pela primeira vez, grave no registro a data.
2-Caso o usuário já tenha acessado, some a data do primeiro acesso ao numero de dias que o usuário poderá utilizar o seu sistema.
3-Compare o resultado com a data atual do windows (função DATE). Caso a data seja maior que a data do sistema, então o usuário ainda não ultrapasso o limite de utilização. Caso contrário, faça com que o sistema "caia", usando uma função EXIT SUB por exemplo.
Espero ter ajudado,
Ao digitar o ponto do teclado numérico, o progrma interprete como vírgula
Parq que isso ocorra, tenho usado uma conversão no KEY PRESS // Format (CCUR(VAL( TEXTBOX.TEXT)), ##,##0.00), 9), porém, ao utilizar este textbox para uma soma/divisão com outros valores, o número sempre sai arrendondado, ou com um desvio de 0,02.
Oi Paulo,
Para transformar ponto em virgula eu uso o seguinte
codigo no evento KeyPress:
char = Chr(KeyAscii)
If char = "." Then KeyAscii = 44 ‘intercepta o ponto e substitui pela vírgula
O problema e que se voce for usar o valor da textbox para fazer outros calculos, como parece ser o seu caso, o VB nao vai reconhecer a virgula como separador de decimais. Tive muita dor de cabeca com isso, mas arranjei uma solucao bisonha, mas que funciona.
O codigo vai abaixo:
valor = Txtvalor.Text
pos = InStr(valor, ",") 'captura a posição da vírgula na string
If pos <> 0 Then 'se o numero não tem vírgula, InStr=0
stresq = Left(valor, (pos - 1)) 'captura a parte inteira
strdir = Right(valor, (Len(valor) - pos)) 'captura a parte decimal
valor = stresq & "." & strdir 'concatena com um ponto
Else
valor = Val(TxtValor.Text) 'no caso do número não ter vírgulas
End If
Por exemplo , se eu tiver várias tabelas e quiser fazer uma consulta em todas ao mesmo tempo e emitir um relatório desta consulta . Como devo proceder ???
Ai vai Ale...
Você não informa onde quer fazer as pesquisas...
No VB vc pode usar o comando SQL a seguir:
Dim sSqlCode as String
Dim lObjConsulta as Object
sSqlCode = ""
sSqlCode = sSqlCode & "Select * "
sSqlCode = sSqlCode & "From Tabela1, Tabela2, Tabela3, Tabela4, ... "
sSqlCode = sSqlCode & "Where Condicao"
Set lObjConsulta = VariavelDoBancoDeDados.openrecordset(sSqlCode, snapshot)
If lObjConsulta.bof and lObjConsulta.eof then 'nao foi encontrado nenhum registro que satisfaca a condicao
..
..
..
..
Else
objeto1 = lObjConsulta.fields("campo1")
objeto2 = lObjConsulta.fields("campo2")
objeto3 = lObjConsulta.fields("campo3")
objeto4 = lObjConsulta.fields("campo4")
..
..
..
..
End If
Criar um campo numérico com duas casas decimais em uma determinada tabela, através de código
Criei meus arquivos via código, mas não consigo armazenar numero com casas decimais.
Marcelo,
Verifique se o tipo do campo que você criou é algo como
dbSingle, dbDouble ou um dos demais tipos listados no Help que comportam
casas decimais; no Help, também, estão os limites de cada
tipo.
Luiz,
você pode registrar da seguinte forma:
c:\vb\tools\regsvr32 c:\windows\system\keysta32.ocx
Uu então:
C:\WINDOWS\SYSTEM\Regsvr32.exe RText.ocx
Se você quizer desregistrar use
c:\vb\tools\regsvr32 /u c:\windows\system\keysta32.ocx
Ou:
C:\WINDOWS\SYSTEM\Regsvr32.exe /u RText.ocx
Aplicação Multiusuária com Windows 3.11
Estou desenvolvendo uma aplicação multiusuária para o ambiente Windows for Workgroup. Quero abrir uma tabela compartilhada para dois terminais, onde possa incluir, alterar e excluir na mesma tabela e ao mesmo tempo. Devo utilizar o acesso direto a uma Table ou utilizo Dynaset? O Que é melhor?
Resposta do MarcusVinicius: Para atualização tanto faz.
O Table é mais rápido do que o Dynaset, mas se você
for fazer pesquisa, o Dynaset é mais indicado, uma vez que ele permite
que a consulta seja feita por qualquer campo, independente de ser ou não
chave e o Table exige que o mesmo seja chave primária.
Método para imprimir um arquivo texto, sem ter que abri-lo:
"print app.path & "\arquivo.txt"
Ler arquivo do Excel no VB ou Access
A forma mais simples e que eu usaria seria gerar um TXT, o excel tem
essa opção Salvar como.. e então facilitaria a criação
de uma interface em Visual Basic para "ler" estes dados. Para ler este
arquivo TXT, cria-se um Type como variável de leitura e abrir o
arquivo como randon.
1 - É Possível fazer uma parábola?
A maneira mais fácil de se traçar uma curva é usando coordenadas polares. A equação da parábola é:
ro= p / (1 - cos(alfa))
onde p é a distância que a parábola corta o eixo dos x.
Para o traçado de um programinha seria mais ou menos assim:
p = 1
a = 0
ang = a * 3.141592/180
ro = p / (1. - cos(ang)
xa = cos(ang) * ro
ya = sin(ang) * ro
pset (xa,ya)
for a = 0 to 360 step 5
ang = a * 3.141592/180
ro = p / (1. - cos(ang)
xa = cos(ang) * ro
ya = sin(ang) * ro
line -(xa,ya)
next a
Eu não testei, mas acredito que esta certo. Eu fiz de 0 a 360,
isto fará a curva ser traçada de - a + infinito.
Como uma barra de progresso estabelecer o mínimo (0%) como sendo o inicio da copia de alguns arquivos e o máximo (100%) como o final?
Se você tem n arquivos para passar para porcentagem é:
for a= 1 to n
perc = a*100/n
manda para o slicer o perc
next a
Função Rnd realmente randômica
Função Rnd sempre é constante. Por exemplo: quando coloco ela variando de 0 a 100 o primeiro valor sempre é 95 o segundo 51 o terceiro 37 e assim por diante... gostaria então de algum jeito que realmente fosse randômico.
------
O problema é que você está dando sempre a mesma
semente, no randomize(), use o timer como semente, ai cada vez será
uma nova sequência de némeros.
Pegar somente os 2 primeiros dígitos de um número
Tenho por exemplo um numero 3,531309834738E 04 tem como eu pegar somente
as 2 primeiras casas desse número?
Se você está necessitando do número mesmo, e não de uma representação dele seria alguma coisas assim:
numero= 3.14159265
num = val(format(numero,"0.00"))
se você quizer mais precisão mude o "0.00" para "0.000"
e assim por diante.
Número de Linha em Arquivo Texto
1) Ajuda!!! Alguém sabe como gerar o número de linhas de um arquivo
texto (formato lista)?
Se for para colocar o numero da linha antes da linha, basta vc fazer:
open "seutexto.txt" for input as #1
open "Temp.txt" for output as #2
while not EOF(1)
line input #1, strTemp
Conta = Conta + 1
print #2, Format(Conta,"000") + strTemp
wend
Close #1
Close #2
kill "seutexto.txt"
Name "Temp.txt" as "seutexto.txt"
OUTRA:
Para contar o número de linhas, vc tem q ler linha a linha e ir contando, por exemplo:
Open "c:\autoexec.bat" for input as #1
Do Until Eof(1)
Line Input #1, Linha
Contador = Contador +1
loop
Close #1
msgbox "O Autoexec.bat tem " & Contador & " Linhas"
1. Você poderia usar nomes mais esclarecedores para suas variáveis. Fica mais claro.
2. Antes de começar um bloco grande que faz uma coisa só, coloque um comentário.
3. Divida o programa em procedimentos.
4. Estabeleça tipos fixos para as variáveis (String, Integer,
Boolean, etc.).
De qualquer forma, aí vai uma dica para você construir um botão redondo:
INGREDIENTES:
3 controles Shape (estilo Circle)
1 controle Label
bastante paciência
e muita criatividade!
MODO DE FAZER:
Insira um frame no form e coloque a propriedade BorderStyle = 0 (nenhuma).
Dentro do frame, crie o botão superpondo os três shapes de forma a criar um efeito 3D:
Um shape (ShapeCima) deve ter ser preenchido com uma cor clara (branco ou cinza claro) e o outro (ShapeBaixo) com cor escura (preto ou cinza escuro). Posicione-os como um 8. O terceiro shape (ShapeFace) irá sobrepor os demais. Ajuste as propriedades Left e Top de ShapeCima e ShapeBaixo para dar idéia de luz e sombra. Lembre-se que ShapeCima e ShapeBaixo devem ser maiores que ShapeFace.
Monitore os eventos MouseDown e MouseUp do frame, assim você fica sabendo se o botão foi apertado ou não.
Observe que um botão tradicional recebe "luz" no lado esquerdo e no de cima, fazendo sombra em baixo e à direita quando ele está para cima.
Você deve fazer o mesmo com o botão redondo. Nos eventos MouseUp e MouseDown troque as propriedades de FillColor de ShapeCima e ShapeBaixo. Assim você vai obter o efeito de apertado e solto.
O frame entra na história apenas para responder aos eventos e para que algumas de suas propriedades sejam usadas como, por exemplo, TooltipText.
É claro que aqui descrevi apenas o básico, mas um botão tem propriedades e eventos que um frame não tem. Assim, será preciso escrever código para simular tudo isso. É aí que entram os ingredientes principais paciência e criatividade.
Você pode construir um novo controle, de forma que se possa alterar
o tamanho do botão, cor da face, alterar o caption, etc.
Transformar Arquivo TXT em Tabela
Como fazer para transformar um arquivo .txt, para uma tabela do Visual Basic 5.0
Depure estas linhas que eu tirei de um programa que desenvolvi:
Set BancoDeDados = OpenDatabase("C:\VisualRota\VisualRota.mdb")
'APAGAR AS TABELAS EXISTENTES PARA GERAR AS NOVAS.
BancoDeDados.Execute "DROP TABLE CGOR0770"
'CRIA TABELAS NA MEMORIA
Set TabelaTemporariaDEF = BancoDeDados.CreateTableDef("CGOR0770")
'REALIZA REFERENCIA DAS TABELAS AO DIRETÓRIO DO ARQ TEXTO.
TabelaTemporariaDEF.Connect = "TEXT;DATABASE=C:\VisualRota\"
'CRIA RELACAO COM O ARQ. TEXT ESPECIFICO
TabelaTemporariaDEF.SourceTableName = "arq770.txt"
'CRIA O ARQUIVO
BancoDeDados.TableDefs.Append TabelaTemporariaDEF
'DELETA TODOS OS REGISTROS EXISTENTES NAS TABELAS DEFEITOS
BancoDeDados.Execute "DELETE * FROM DEFEITOS;"
'COPIA A TABELA RELACIONADA COM O ARQUIVO TEXTO PARA UMA OUTRA TABELA
BancoDeDados.Execute "INSERT INTO DEFEITOS SELECT * FROM CGOR0770;"
OBS: Me desculpe eu esqueci que vc ainda tem que definir o arquivo Schema.ini com a estrutura do seu arquivo!
Outro detalhe, esta rotina só funcionará se o seu arquivo texto estiver todo alinhado em colunas, permitindo desta forma definir os campos!
Fazendo uma mensagem Piscar em Formulário
Para fazer uma mensagem de um controle piscar em um Formulário:
Crie um controle Rótulo chamado lblPiscador e digite uma palavra qualquer como Caption.
- No Evento No Cronômetro do Formulário colocar o código:
Me!lblPiscador.visible = not Me!lblPiscador.visible
- Mude a Propriedade Intervalo do Cronômetro para 500 (altere a gosto).
Esta dica foi enviada por Osiris Gopfert Moreira (a335@petrobras.com.br)
para a revista Forum Access.
Fazendo
AutoNumeração voltar a iniciar de 1 novamente
Alterar o valor inicial de um campo AutoNumeração
Para uma nova tabela que ainda não possua registros, você pode alterar o valor inicial de um campo AutoNumeração que tenha sua propriedade Novos Valores definida com Incremento para um número diferente de 1. Para uma tabela que possua registros, você também pode utilizar esse procedimento para alterar o próximo valor atribuído a um novo número em um campo AutoNumeração.
1 Crie uma tabela temporária com apenas um campo, um campo Número; defina sua propriedade Tamanho do Campo com Inteiro Longo e dê a ele o mesmo nome do campo AutoNumeração na tabela cujo valor você deseja alterar.
2 No modo Folha de Dados, digite um valor no campo Número da
Tabela temporária que seja 1 a menos do que o valor inicial que
você deseja para o campo AutoNumeração. Por exemplo,
se você desejar que o campo AutoNumeração comece em
100, digite 99 no campo Número.
3 Crie e execute uma consulta acréscimo para acrescentar uma
tabela temporária à tabela cujo valor AutoNumeração
você deseja alterar.
Observação Se a sua tabela original possuir uma chave primária, você deverá removê-la temporariamente antes de executar a consulta acréscimo. Da mesma forma, se a sua tabela original tiver campos que possuam a propriedade Requerido definida como Sim, a propriedade Indexado definida como Sim (Duplicação não autorizada) ou as definições da propriedade RegraDeValidação do campo e/ou do registro que impedem entradas Nulas nos campos, você deverá desativar temporariamente essas definições.
4 Exclua a tabela temporária.
5 Exclua o registro adicionado pela consulta acréscimo.
6 Se você teve que desativar as definições de propriedade
no passo 3, retorne-as às suas definições originais.
Quando você insere um registro na tabela remanescente, o Microsoft Access utiliza um valor do campo AutoNumeração igual ao valor inserido na tabela temporária mais 1.
Observação Se você desejar compactar o banco de dados depois de alterar o valor inicial de AutoNumeração, certifique-se de adicionar primeiro pelo menos um registro à tabela. Se não fizer isso, quando compactar o banco de dados, o valor de AutoNumeração do próximo registro adicionado será redefinido como 1, mais o maior valor anterior. Por exemplo, se não havia registros na tabela quando você redefiniu o valor inicial, a compactação definirá o valor de AutoNumeração para o próximo registro adicionado como 1; se havia registros na tabela quando você redefiniu o valor inicial e o maior valor anterior era 50, a compactação definirá o valor de AutoNumeração para o próximo registro adicionado como 51.