Access - Visual Basic (Dor Cabeça)

Boas Blink,
estou aqui a limar um pontos finais no programa e gostava de saber na possibilidade de efectuar umas alterações (caso seja possivel se sabes o modo de o efecturar)

A busca do ficheiro excel que estou a fazer (com as tuas explicações) está a funcionar muito bem, mas com um modo de busca fixo ... há hipotese de o fazer atravês da escolha do utlilizador - tipo modo explorer do windows?:

1ª -duvida
Código estou a utlizar no momento - ###############################################
Dim strPathFile As String, strFile As String, strPath As String
Dim strTable As String
Dim blnHasFieldNames As Boolean
blnHasFieldNames = False
strPath = "H:" ' drive onde se situa o seu documento excel
strTable = "Alarmes" 'nome da tabela no seu banco
strFile = Dir(strPath & "Alarmes.xls") 'nome do seu excel, se mudar para "*.xls" importa todas as folhas excel que estiverem em C:\ para a tabela do banco.
Do While Len(strFile) > 0
strPathFile = strPath & strFile
DoCmd.TransferSpreadsheet acImport, 8, _
strTable, strPathFile, blnHasFieldNames
strFile = Dir()
Loop
####################################

2ª - Duvida - Ao correr o programa ao passar pela instrução:

DoCmd.RunSQL "SELECT * INTO Alarmes48 FROM Alarmes WHERE F1 > (Date()-2) Order by F1" ' Copiar lista Alarmes para lista Alarmes48

é lançado um popup com a informação
«A tabela 'Alarmes48' existente será eliminada antes da consulta ser executada.
Deseja continuar mesmo assim?
Sim Não»

não tem problema nenhum na execução do processo e funciona tudo bem, mas haverá algum modo de ele não lançar este popup e assumir sempre o 'SIM' como resposta?
Já estive a ve nas definições de segurança e retirei (acho eu) todas as restrições.


:) Obrigado ajuda :)

Abr
 
Viva Dave,

1ª Questão: os seguintes rotinas devolvem o caminho total para abrir e/ou gravar ficheiros, devem ser colocados num módulo, no final tem um procedimento de teste para ensaio.

Option Compare Database

' Função para abrir a API de OpenFileName or SaveFileName
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As FILENAME) As Long
Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pSavefilename As FILENAME) As Long

' Definição de variavel para a API OpenFileName or SaveFileName
Public Type FILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

' Constantes para a API OpenFileName or SaveFileName
Global Const ahtOFN_READONLY = &H1
Global Const ahtOFN_OVERWRITEPROMPT = &H2
Global Const ahtOFN_HIDEREADONLY = &H4
Global Const ahtOFN_NOCHANGEDIR = &H8
Global Const ahtOFN_SHOWHELP = &H10
' You won't use these.
'Global Const ahtOFN_ENABLEHOOK = &H20
'Global Const ahtOFN_ENABLETEMPLATE = &H40
'Global Const ahtOFN_ENABLETEMPLATEHANDLE = &H80
Global Const ahtOFN_NOVALIDATE = &H100
Global Const ahtOFN_ALLOWMULTISELECT = &H200
Global Const ahtOFN_EXTENSIONDIFFERENT = &H400
Global Const ahtOFN_PATHMUSTEXIST = &H800
Global Const ahtOFN_FILEMUSTEXIST = &H1000
Global Const ahtOFN_CREATEPROMPT = &H2000
Global Const ahtOFN_SHAREAWARE = &H4000
Global Const ahtOFN_NOREADONLYRETURN = &H8000
Global Const ahtOFN_NOTESTFILECREATE = &H10000
Global Const ahtOFN_NONETWORKBUTTON = &H20000
Global Const ahtOFN_NOLONGNAMES = &H40000
' New for Windows 95
Global Const ahtOFN_EXPLORER = &H80000
Global Const ahtOFN_NODEREFERENCELINKS = &H100000
Global Const ahtOFN_LONGNAMES = &H200000

'Função para a abrir a Cx_Diálogo_Open_File de ficheiros CSV
Function Open_File_Dialog_Box(Titulo As String) As String

Dim ofn As FILENAME
Dim ficheiro

'Inicializa variáveis
ofn.lStructSize = Len(ofn)
'ofn.hwndOwner = formulario.Hwnd
'ofn.hInstance = App.hInstance
ofn.lpstrFilter = "Text Files (*.csv)" + Chr$(0) + "*.csv" + Chr$(0) 'Define o filtro dos tipos de ficheiros
ofn.lpstrFile = Space$(254) 'Ficheiro por default que vai abrir
ofn.nMaxFile = 255 'Penso que define o tam máx do nome do ficheiro
ofn.lpstrFileTitle = Space$(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = "C:\" 'Directoria por defeito
ofn.lpstrTitle = Titulo 'Título da janela
ofn.Flags = 0

ficheiro = GetOpenFileName(ofn)

If (ficheiro) Then
Open_File_Dialog_Box = Trim$(ofn.lpstrFile)
Else
Open_File_Dialog_Box = ""
End If

End Function

'Função para a abrir a Cx_Diálogo_Open_Save_Dialog_Box de ficheiros CSV
Function Open_Save_Dialog_Box(Titulo, directoria, Optional nome_ficheiro As String) As String

Dim ofn As FILENAME
Dim caminho

'Inicializa variáveis
ofn.lStructSize = Len(ofn)
'ofn.hwndOwner = formulario.hWnd
'ofn.hInstance = App.hInstance
ofn.lpstrFilter = "Microsoft Excel 97 (*.xls)" + Chr$(0) + "*.xls" + Chr$(0) 'Define o filtro dos tipos de ficheiros

If IsNull(nome_ficheiro) Or nome_ficheiro = "" Then
ofn.lpstrFile = Space$(254)
Else
ofn.lpstrFile = nome_ficheiro & Space$(254 - Len(nome_ficheiro)) 'Nome do ficheiro por default
End If

ofn.nMaxFile = 255 'Penso que define o tam máx do nome do ficheiro
ofn.lpstrFileTitle = Space$(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = directoria 'Directoria por defeito
ofn.lpstrTitle = Titulo 'Título da janela
ofn.Flags = ahtOFN_FILEMUSTEXIST Or ahtOFN_HIDEREADONLY Or ahtOFN_NOCHANGEDIR

caminho = GetSaveFileName(ofn)

If (caminho) Then
Open_Save_Dialog_Box = RTrim(ofn.lpstrFile)
Else
Open_Save_Dialog_Box = ""
End If

End Function

Sub teste()

MsgBox Open_File_Dialog_Box("teste")
MsgBox Open_Save_Dialog_Box("Teste1", "C:\", "TESTANDO.CSV")

End Sub

Quanto à 2ª questão verifique se a seguinte instrução funciona (eu ainda uso o Office 97 em casa):

Application.SetOption "Show Status Bar", True
Application.SetOption "Confirm Action Queries", 0
Application.SetOption "Confirm Record Changes", 0

Cmpt
 
Olá, Dave e bbaixo,

Eu uso outros processos, mas acabam por fazer as mesmas coisas. :-)

Relativamente ao ponto 1, uso o "FileDialog" do Office.
FileDialog Object
Exige menos código, fazendo uma solução mais simples, mas tem algumas "armadilhas", principalmente se a BD for aberta em vários computadores com versões diferentes do Office/Access. Assim, embora pareça mais complexa, a solução do bbaixo acaba por ser preferível.

Relativamente ao ponto 2, em vez do "Application.SetOption", costumo usar o "DoCmd.SetWarnings".
O SetOption é mais permanente. O SetWarnings tem um carácter mais temporário. Só desligo os avisos quando necessário, voltando a ligá-los logo de seguida. tipo:

DoCmd.SetWarnings False
... instruções de update....
DoCmd.SetWarnings True
 
Boas Bbaixo e Blink

[:cool:] obrigado a ambos pelas dicas

... até final da semana não vou conseguir implementá-las no programa, mas no fim de semana vou-me debruçar sobre essas vossas dicas e ver se consigo resolver ...

bbaixo realmente esse código para a primeira duvida parece um pouco complexo, mas vou ter um fim de semana para o desvendar :)

Quanto segunda duvida utilizei as instruções que colocas-te (bbaixo) e não funcionaram ... provávelmente por estar access 2007, mas no fim de semana experimento as do Blink e dou o feedback :)
 
Back
Top