Ir para conteúdo
Fórum Script Brasil

Patricia Nascimento

Membros
  • Total de itens

    9
  • Registro em

  • Última visita

Posts postados por Patricia Nascimento

  1. Boa noite,

    Crie uma tabela de controle de emissão de relatorios com os campos que voce deseja, ex:

    Tabela--> Relatorios

    Campos

    Relatorio | Id | Data_Imp | Usuario

    Clientes 1 18/05/2008 Jose.Souza

    Tabela Preços 1 18/05/2008 Jose.Souza

    Clientes 2 18/05/2008 Patricia.nascimento

    Clientes 3 19/05/2008 Patricia.nascimento

    Clientes 4 19/05/2008 Patricia.nascimento

    Tabela Preços 2 19/05/2008 Wedson.Silva

    nos relatorios e formularios exitem uma propriedade chamada de "marca" ou Tag nas versões em ingles. nesta propiedade coloque o nome desejado para o Relatório, no meu exmplo eu tenho um relatorio chamado de rel_clientes e defini a "marca" como Clientes.

    no botão imprimir deste relatorio cole o seguinte código

    Dim ssql As String
    Dim lng_Atual As Long
    Dim rst_max_num As DAO.Recordset
    
    'desabilita os avisos do access
    DoCmd.SetWarnings False
    
        ssql = ""
        ssql = ssql & "SELECT Max(ID) AS Atual FROM Relatorios GROUP BY Relatorio HAVING Relatorio ='" & Report_Rel_Clientes.Tag & "'"
    
        'armazena os dados  do select na variavel
        Set rst_max_num = CurrentDb.OpenRecordset(ssql)
        
        'verifica se exite algum registro para o select atual
        If rst_max_num.EOF Then ' se não existir
            lng_Atual = 0
        Else ' senão
            lng_Atual = rst_max_num(0) + 1
        End If
        'atualiza a tabela de relatorios
        DoCmd.RunSQL ("INSERT INTO Relatorios ( Relatorio, ID, Data_imp, Usuario ) values ('" & Report_Rel_Clientes.Tag & "' , '" & lng_Atual & "' , Format(now, 'dd/mm/yyyy') , 'usuario_logado');")
    
    'habilita os avisos do access
    DoCmd.SetWarnings True

    disponibilizei no meu o arquivo em flash para voce acompanhar como fazer.

    http://www.suportevba.com/contador.html

    o arquivo é um pouco grande 3 MB mas vale a pena dar uma olhada

    att,

  2. Boa tarde,

    A solução dada ao problema deste tópico foi a seguinte:

    No form de Fichas foi retirado os codigos dos controles de ao receber foco e perder foco que apenas transformavam os dados dos campos em maiusculas "UCASE", substituimos:

    [color="#0000ff"]If DLookup("Tipo", "Usuario", "Tipo ='" & Form_Main.xxx & "' ") = "Atendimento" Then [/color]
    Por
    
    sSql = ""
    sSql = sSql & "SELECT login, tipo FROM Usuario WHERE login= '" & Form_Main.xxx & "';"
    
    Set rst_sql = CurrentDb.OpenRecordset(sSql)
    
    If rst_sql.EOF = True Then Exit Sub
    
    If rst_sql(1) = "atendimento" Then

    e o problema foi solucionado.

    att,

  3. Boa tarde,

    Quando voce diz que o usuario colocou tudo vinculado no computador dele voce quer dizer que ele separou a base de dados do front end?

    onde está a base de dados?

    se a base estiver em um local em rede que todos tem acesso e copie o front end dela para uma outra maquina e faça um teste.

    como exite mais de uma pessoa acessando o sistema isto significa que a base está em um local comum a todos e só descobrir onde a base esta e apontar as tabelas para a base.

    Para descobrir para onde a base foi mudada e só posicionar o ponteiro do mouse sobre uma das tabelas vinculadas e o access irá mostra o caminho da base.

    o comando para desvincular tabelas e esse;

    DoCmd.DeleteObject acTable, nome_da_tabela
    'para vincular use este
    
    DoCmd.TransferDatabase acLink, "Microsoft Access", "caminho_completo_e_nome_do_banco_de_dados", acTable, "nome_da_tabela_origem", "nome_tabela_destino", False

    Como funciona o código

    DoCmd.TransferDatabase (comando para importar, neste caso vincular)

    acLink (O tipo de transferência que você deseja fazer. Selecione Importação, Exportação ou Vínculo )

    "Microsoft Access" (O tipo de banco de dados a ser importado, exportado ou vinculado. Você pode selecionar o Microsoft Access ou um dos vários outros tipos de banco de dados)

    "caminho_completo_e_nome_do_banco_de_dados" (O nome do banco de dados a ser importado, exportado ou vinculado. Inclui o caminho completo. Esse é um argumento obrigatório)

    acTable (O tipo de objeto a ser importado ou exportado. Se você selecionar Microsoft Access do argumento Tipo de Banco de Dados, poderá marcar Tabela, Consulta, Formulário, Relatório, Macro, Módulo, Página de Acesso a Dados, Modo de Exibição do Servidor, Diagrama, Procedimento Armazenado ou Função )

    "nome_da_tabela_origem" (O nome da tabela, da consulta seleção ou do objeto do Access que você deseja importar, exportar ou vincular. Para alguns tipos de banco de dados, como FoxPro, Paradox ou dBASE, é um nome de arquivo. Inclua a extensão do nome de arquivo (como .dbf) no nome de arquivo. Esse é um argumento obrigatório.)

    "nome_tabela_destino" (O nome da tabela, da consulta seleção ou do objeto do Access que você deseja importar, exportar ou vincular. Para alguns tipos de banco de dados, como FoxPro, Paradox ou dBASE, é nome de arquivo. Inclua a extensão do nome de arquivo (como .dbf) no nome de arquivo. Esse é um argumento obrigatório. )

    False (Especifica se deve ser importada ou exportada somente a estrutura de uma tabela do banco de dados sem nenhum dado. O padrão é False.)

    Existem funções que fazem esta vinculação automatica sempre que o banco é aberto.

    não pesquisei mas creio que no proprio site http://scriptbrasil.com.br voce pode encontrala.

    Att,

  4. Bom dia a todos,

    Ouço muita gente falar que o Access é para pequenas aplicações devido a sua limitação de tamanho por banco de dados que é de 2 GBytes, mas a limitação se torna inexistente quando se faz um estudo aprofundado do sistema que se quer construir.

    Recentemente tivemos um grande desafio em um cliente. Este tem 17 lojas de materiais de construção, necessitava de um sistema para levantamento de créditos de ICMS, mas onde esta o problema?

    Bom, teríamos que fazer um sistema em Access para recuperar os créditos de ICMS a partir do ano de 2005.

    Durante o levantamento descobrimos o seguinte:

    Cada loja por ano gera em média 2,6 milhões de registros por 93 colunas, gerando pouco mais de 2,3 GB de informações.

    Cálculo simples 17 lojas x 4 anos x 2,3 GB por ano = 156,4 GB.

    Para efeito de comparação os resultados devem ser calculados com tributos de dois períodos diferentes.

    As informações estão em banco Oracle e a empresa não quer que o Oracle seja responsável pelos cálculos, pois iria onerar em muito o banco de dados e as lojas iriam ficar com o sistema lento.

    Ainda mais, o usuário deveria ter a possibilidade de executar testes de cálculos como se estivesse no Excel, mas com uma interface gráfica, onde apenas com um clique selecionando os campos desejados, seriam apresentados os cálculos. Também deveria ter a opção de fazer fórmulas avançadas como o Excel (Funções como, por exemplo: SE(), SomaSE(), ProcV() entre outras centenas de formulas).

    A solução dada para o cliente foi a seguinte:

    O Oracle gera os arquivos textos consolidando as informações das duas tabelas de tributos e o Access efetua a importação distribuindo os dados entre as tabelas, separando-as em uma árvore de pastas da seguinte forma: Filial e Ano.

    Na pasta "Ano" serão criadas automaticamente 24 tabelas representando 12 meses com informações geradas com os tributos do primeiro período e mais 12 tabelas com informações geradas com os tributos do segundo período. Assim, não sobrecarregamos o Access com cálculos para exibir resultados dos períodos diferentes, no entanto os 156,4 GB se tornam 312,8 GB divididos em 1.632 arquivos.

    Para gerenciar os dados, utilizamos vinculação dinâmica em tempo de execução para que o usuário nem perceba que esta utilizando milhares de bases de dados. Por exemplo, o usuário seleciona a filial 1 e o ano de 2007, automaticamente o sistema vincula as tabelas da referida loja e ano, e poderá usá-las para efetuar seus cálculos "o tempo para vincular as tabelas é em media de 5 segundos.

    Mais uma vez vamos aos números:

    17 lojas

    4 anos por loja

    12 meses utilizando valores de tributos período 1

    12 meses utilizando valores de tributos período 2

    196 MB de informações por mês/loja

    Resultado final:

    17 * 4 * 24 = 1.632 Arquivos

    1632 * 196 MB = 319.872 MB (312,375 GB )

    Ainda há quem diz que o Access e um Bando de dados.

    Em breve estarei disponibilizando este banco de dados em nosso site.

    att,

  5. Bom dia,

    Faça o seguinte teste;

    faça uma copia do banco;

    entre no codigo vba do form "Cadastro_Fichas" delete todo o codigo dele;

    cole o codigo que te mandei no procedimento evento "ao abrir"

    Private Sub Form_Open(Cancel As Integer)

    'cole o codigo aqui

    End Sub

    abra o vba e coloque um ponto de interrupção no inicio do codigo

    If DLookup("Tipo", "Usuario", "Tipo ='" & Form_Main.xxx & "' ") = "Atendimento" Then

    para isso e só posicionar na linha mensionada acima e apertar a tecla F9

    depois execute o seu programa normalmente e carregue a tela form "Cadastro_Fichas"

    assim que aparecer na tela do vba a linha com ponto de interrupção em amarelo faça o seguinte:

    aperte CTRL+G para abrir a janela imediata para fazer-mos o teste

    dentro da janela imediata digite

    ?Form_Main.xxx e tecle enter

    neste instante tem que aparecer o valor do campo do formulario e não "nulo"

    se aparecer nulo digite

    Form_Main.xxx = "Atendimento"

    e depois aperte enter

    faça o teste novamente

    ?Form_Main.xxx e tecle enter

    caso apareça na linha

    ?Form_Main.xxx

    Atendimento

    aperte a tecla F8 e veja se da o erro novamente; caso o erro persista me fale que te mando o seu banco com os acertos para voce.

    "no meu micro esta funcionando perfeitamente"

    so falta adptar o tipo no form main

    att,

  6. Chamando uma função atravez de uma consulta:

    Chame a fução SemAcentos passando o parametro endereço e todos os registros da tabela acentuados irão aparecer sem acentos.

    SELECT SemAcentos(Endereco) AS Endereço
    FROM tb_Endereco WHERE tb_Endereco.[ENDERECO] Is Not Null;
    Crie a função em um modulo.
    Function SemAcentos(sString As String)
    Dim x As Integer
    Dim sStringFinal As String
    
    Dim letra() As String
    
    For x = 0 To Len(sString) - 1
    ReDim Preserve letra(x)
    letra(x) = Mid(sString, x + 1, 1)
    
    If Asc(letra(x)) >= 192 Then 'Acentuados tem código >=192
    Select Case letra(x)
    Case "ã", "á"
       letra(x) = "a"
    Case "é", "ê"
       letra(x) = "e"
    Case "í"
       letra(x) = "i"
    Case "ó", "ô", "õ"
       letra(x) = "o"
    Case "ü", "ú"
       letra(x) = "u"
    Case "ç"
       letra(x) = "c"
    Case Else
    End Select
    
    End If
    Next x
    
    For x = 0 To Len(sString) - 1
    sStringFinal = sStringFinal + letra(x)
    Next x
    
    SemAcentos = sStringFinal
    End Function

  7. boa noite,

    Voce pode usar o agendador de tarefas do windows para abrir o access e executar a sua tarefa.

    Outra opção é criar uma função que verifica se está na hora de enviar os e-mails, para isso utilize o timer do formulário como descrito abaixo:

    Private Sub Form_Timer()

    If Time = "22:00:00" Then

    'no intervalo do cronometro informe 1000 "verifica se chegou a hora de segundo em segundo

    'insira aqui a chamada de sua função para enviar e-mail

    Call nomefuncao 'função

    ' ao final deligue o micro

    Shell "C:WINDOWSsystem32rundll32.exe C:WINDOWSSystem32shell32.dll,SHExitWindowsEx 1"

    End If

    End Sub

    Não sei se voce já tem o modulo de envio de e-mail caso tenha e so colocara chamada da função no local indicado, se não tem entre em contato.

    att,

  8. Ola, Boa noite!

    Gostei muito do layout do seu sistema. bom mas vamos a solução do seu problema.

    O campo xxx do seu form main está nulo.

    para sanar o problema do xxx nulo insira a linha destacada na cor azul no seu form main

    If user = xlogin And pass = xsenha And Not IsNull(Me.user) Then

    Form_Main.xxx.Value = xlogin ' atualiza o campo xxx do form main

    usuario = xnome

    Form_Main.frameMain.SourceObject = "Main_BemVindo"

    Form_Main.combMenu.Locked = False

    Form_Main.labTitulo.Caption = Form_Cadastro_Licenca.modulo

    Form_Main.operador.Value = usuario

    Form_Main.Caption = usuario + " - " + sistema

    Else

    MsgBox "Acesso negado. Verifique se os dados estão corretos e tente outra vez.", vbCritical

    Form_Main.frameMain.SourceObject = "Main_Acesso"

    End If

    substitua no form "Cadastro_Fichas"

    If DLookup("[Tipo]", "Usuario", "[Tipo] =" & Forms!Main![xxx]) = "Atendimento" Then

    por

    If DLookup("Tipo", "Usuario", "Tipo ='" & Form_Main.xxx & "' ") = "Atendimento" Then

    altere todos os dlookps do seu codigo pelo modelo acima mudando apenas o final

    Mas o ideal seria você utilizar a função:

    Select Case Form_Main.xxx.Value

    Case Is = LCase("Atendimento")

    Me.AllowAdditions = False

    Me.AllowDeletions = False

    Me.AllowEdits = False

    Me.Combinação50.Enabled = False

    Me.Comando32.Enabled = False

    Me.Comando33.Enabled = False

    Me.Comando34.Enabled = False

    Me.Comando43.Enabled = False

    Me.Comando32.Enabled = False

    Me.Comando33.Enabled = False

    Me.Comando34.Enabled = False

    Me.Comando43.Enabled = False

    Case Is = LCase("Supervisor")

    Me.AllowEdits = False

    Me.AllowAdditions = False

    Me.AllowDeletions = False

    Me.AllowEdits = False

    Me.Combinação50.Enabled = False

    Me.Comando32.Enabled = False

    Me.Comando33.Enabled = False

    Me.Comando34.Enabled = False

    Me.Comando43.Enabled = False

    Me.Comando32.Enabled = False

    Me.Comando33.Enabled = False

    Me.Comando34.Enabled = False

    Me.Comando43.Enabled = False

    Case Is = LCase("Processo")

    Me.AllowDeletions = False

    Me.Comando33.Enabled = False

    Case Is = LCase("Administrado")

    Me.AllowEdits = True

    Me.AllowAdditions = True

    Me.AllowDeletions = True

    Me.AllowEdits = True

    End Select

    End Function

    Att,

×
×
  • Criar Novo...