[Access] Query, Bestand openen ipv direct invullen

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Ik maak in access gebruik van de TekstOverbrengen Macro, ik heb hier een specificatie voor gemaakt, dus de manier hoe een bepaald log bestand geimporteerd moet worden, dit bestand word standaard opgeslagen als temp, omdat direct na het importeren een scherm komt waar men de keuze kan maken voor een naam. Na deze keuze word de tabel temp hernoemd naar de naam die de gebruiker kiest.

Nu zit ik met een vraag waar ik niet uitkom,
bij de macro hoort een vak "bestandsnaam". Hier zet je het doel van de log file in.
Wat ik wil is dat hij dit uit een formulier haalt, dit formulier moet dus een simpel
verkennertje zijn wat je krijgt bij alle windows programma's zodra je kiest bestand openen. Zodat de gebruiker zelf de te importeren log file kan kiezen, welke dan via een formulier gekozen word en doorgevoerd word in de macro.

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Ehr niemand? 8)7

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Is de vraag die je stelt nu: hoe kan ik in VBA binnen Access een FileOpen Dialog tevoorschijn toveren? Als dat zo is: zoek eens op MSDN, daar schijnen ze nogal het een en ander te weten over Access, API's en VBA... ;)

PS Om de hints wat duidelijker te maken heb ik ze even dikgedrukt :Y)

My personal website


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Ja kijk nu heb ik iets om op te googelen, khad geen idee hoe dat heete :) magoed kank zelf weer ff verder zoeken, thnx anyway.

mocht er nog iemand zijn die mij nog specefieker wil helpen mag dat natuurlijk wel :)

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

http://www.mvps.org/ is een handige resource... Iets specifieker voor jouw probleem: http://www.mvps.org/access/api/api0001.htm

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Mjah een hele rij met code, maar waar komt die code precies?
Want dit is echt nieuw voor mij, en ondanks mijn access bijbel van dik 1000 pages dik voor me, snap ik het nie

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Dat soort code gooi je dus in een module.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Mijn gevoel bij dit topic is een beetje "De TS weet hoe een macro werkt, maar echt programmeren (in Access) : ho maar." Je krijgt een aantal tips en zelfs een specifiele link naar een oplossing, en zelfs dan zou je het liefst een kant-en-klaar voorbeeld zien in plaats van met de source die je krijgt te gaan stoeien...

Als ik de site (mvps.org) goed ken, staan er genoeg tutorials en beschrijvingen op die je verder kunnen helpen hoe je dit op kunt lossen. Dus lees niet alleen de source, maar ook de omschrijving van de oplossing!

Good luck ;)

My personal website


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Nou nee ik hoef geen kant en klaar spul, want ik vind het zeker niet erg om wat te zitten modderen dus ik denk dat je dat verkeerd hebt gezien/gedacht.

Maar zodra ik een nieuwe module maak, start visual basic op,
ik copy paste de code hierin.

Vervolgens klik ik op de run button en gebeurt er helemaal niets.
dus dan volg ik het niet meer, en aangezien ik newbe ben wat visual basic programmeren betreft, probeer ik hier wat hulp te krijgen, zodat ik begrijp wat ik fout doe. zodat ik het zelf kan oplossen.

Ik vraag dus een oplossing om die code erin te krijgen, geen kant en klaar gebeuren.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Stel je hebt een auto. En in die auto gooi je benzine. Als je dan op het gaspedaal trapt, dan doet 'ie niks. En hoe komt dat? Je zult er op de een of andere manier voor moeten zorgen dat die benzine ook ontbrandt. (start je auto ff ;))

Jij zult er dus op de een of andere manier voor moeten zorgen dat jouw code ontbrandt getriggerd wordt. Bijvoorbeeld door een sub of function aan te roepen met bijvoorbeeld een knopje, of door deze aan te roepen in een event van je database of het hoofdscherm ervan.

duidelijker kan ik mijn hints niet maken hoor! :p

[ Voor 21% gewijzigd door OZ-Gump op 12-02-2004 14:17 ]

My personal website


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Oke daar kwam ik wat verder mee, nu heb ik dus een macro welke de module
met de goede functie opent, maar probleem is hij opent hem ook letterlijk.
En dat moet niet, hij moet hem runnen. :s

  • Boss
  • Registratie: September 1999
  • Laatst online: 23:16

Boss

+1 Overgewaardeerd

Geen macro gebruiken, da's voor n00bs :)
Maak een knop op je formulier, die in VBA code de juiste functie aanroept uit de code die je van mvps hebt.
Er staat een voorbeeld in die code over hoe die funtie eruit zou kunnen zien.
Het 'antwoord' van die functie (een bestandsnaam of 'NoFile' bij annuleren) kan je in een variabele of een tekstveld zetten om later verder te gebruiken.

Nogmaals: GEEN MACRO! Daar kan het gewoon niet mee.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Oke ik heb die code gebruikt,
hoe koppel ik nou Getopenfile aan een knop
en hoe verwerk ik de geopende bestandsnaam in mijn queries?
Dus welke variabele moet ik gebruiken?

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
Ehr misschien toch maar een klein schopje,

ik kom er echt niet uit.
ik heb de declaratie GetOpenFile maar hoe ik
die nu precies aan een knop koppel, en wat voor variabele ik moet gebruiken
in mijn macro's (dus de variabele waar de betandsnaam + pad in staat) begrijp ik niet goed.

  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 27-04 16:49
Oke, je hebt een module met alle functies op een dialoog-scherm te openen. Die functies moet je gebruiken in je formulier, door achter een knop de functies aan te spreken.

Dus...
1. Je hebt een formulier...
2. Je maakt een knop
3. Bij het OnClick Event zet je code neer die twee dingen doet:
3.1 Het openen van een dialoog scherm (je FileOpen Dialog), die je aanstuur met de functies die je in je module hebt. Een voorbeeld staat in de module als functie TestIt
3.2 Met de waarde die je terugkrijgt (de directory o.i.d.) moet je iets doen. Stop 't in een variabele of stop het in een Unbound-control (door bijvoorbeeld txtGekozenDirectory.Value = strVariabelenaamWaarJeDirectoryInZit)
4. Ga verder me de code

Nogmaals: Gebruik geen macro's!!! Macro's waren alleen in Access 2.0 (1995!) nog interessant voor het maken van menu-items. Sindsdien kan alles en meer beter en sneller met VBA. Leer dus heel snel VBA begrijpen en analyseren, daar heb je veel meer aan.

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
ik zal wel te stom zijn ofzo ik snap der nix van.
Wat zou ik nou bij de eigenschappen van onclick van een button in mijn form...

ik heb hier een acces boek doorgebladerd...
ik heb geprobeerd
ik heb de help van access doorgespit
maar ik kom er gewoon echt niet uit.


Het enigste wat me wel lukt is het via een macro, maar dan opent hij de code
van de funcitie die ik aanroep ipv deze weer te geven.
Dus nu zit ik nog met 2 dingen

Wat moet er bij onclick komen te staan.
En welke naam moet ik gebruiken om te verwijzen naar het bestand/pad wat ik door de file open gevonden heb....

1e probleem lukt niet 2e heb ik dus nog niet kunnen proberen.
ik heb echt een redelijk access programmaatje gemaakt maar nu net dit nog.
Wil er please iemand even helpen?

  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 27-04 16:49
offtopic:
Volgens mij heb jij een heeeeeeeeele grote hamer nodig
8)7 8)7 8)7 8)7 8)7

Sorry, maar als dit je niet lukt, dan zou ik je aanraden een basis-cursus te volgen

Nog een verzoek, als voor als je wilt dat anderen goed reageren kunnen: Post de code die je nu hebt achter je formulier, zodat je kan laten zien waar het fout gaat.

[ Voor 31% gewijzigd door JJvG op 03-03-2004 15:51 ]


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 26-05 22:29
oke hier de code dan:

'***************** Code Start **************
'This code was originally written by Ken Getz.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
' Code courtesy of:
' Microsoft Access 95 How-To
' Ken Getz and Paul Litwin
' Waite Group Press, 1996

Type tagOPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
strFilter As String
strCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
strFile As String
nMaxFile As Long
strFileTitle As String
nMaxFileTitle As Long
strInitialDir As String
strTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
strDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Declare Function aht_apiGetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (OFN As tagOPENFILENAME) As Boolean

Declare Function aht_apiGetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (OFN As tagOPENFILENAME) As Boolean
Declare Function CommDlgExtendedError Lib "comdlg32.dll" () As Long

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

Function TestIt()
Dim strFilter As String
Dim lngFlags As Long
strFilter = ahtAddFilterItem(strFilter, "Access Files (*.mda, *.mdb)", _
"*.MDA;*.MDB")
strFilter = ahtAddFilterItem(strFilter, "dBASE Files (*.dbf)", "*.DBF")
strFilter = ahtAddFilterItem(strFilter, "Text Files (*.txt)", "*.TXT")
strFilter = ahtAddFilterItem(strFilter, "All Files (*.*)", "*.*")
MsgBox "You selected: " & ahtCommonFileOpenSave(InitialDir:="C:\", _
Filter:=strFilter, FilterIndex:=3, Flags:=lngFlags, _
DialogTitle:="Hello! Open Me!")
' Since you passed in a variable for lngFlags,
' the function places the output flags value in the variable.
Debug.Print Hex(lngFlags)
End Function

Function GetOpenFile(Optional varDirectory As Variant, _
Optional varTitleForDialog As Variant) As Variant
' Here's an example that gets an Access database name.
Dim strFilter As String
Dim lngFlags As Long
Dim varFileName As Variant
' Specify that the chosen file must already exist,
' don't change directories when you're done
' Also, don't bother displaying
' the read-only box. It'll only confuse people.
lngFlags = ahtOFN_FILEMUSTEXIST Or _
ahtOFN_HIDEREADONLY Or ahtOFN_NOCHANGEDIR
If IsMissing(varDirectory) Then
varDirectory = ""
End If
If IsMissing(varTitleForDialog) Then
varTitleForDialog = ""
End If

' Define the filter string and allocate space in the "c"
' string Duplicate this line with changes as necessary for
' more file templates.
strFilter = ahtAddFilterItem(strFilter, _
"Logfile (*.log)")
' Now actually call to get the file name.
varFileName = ahtCommonFileOpenSave( _
OpenFile:=True, _
InitialDir:=varDirectory, _
Filter:=strFilter, _
Flags:=lngFlags, _
DialogTitle:=varTitleForDialog)
If Not IsNull(varFileName) Then
varFileName = TrimNull(varFileName)
End If
GetOpenFile = varFileName
End Function

Function ahtCommonFileOpenSave( _
Optional ByRef Flags As Variant, _
Optional ByVal InitialDir As Variant, _
Optional ByVal Filter As Variant, _
Optional ByVal FilterIndex As Variant, _
Optional ByVal DefaultExt As Variant, _
Optional ByVal FileName As Variant, _
Optional ByVal DialogTitle As Variant, _
Optional ByVal hWnd As Variant, _
Optional ByVal OpenFile As Variant) As Variant
' This is the entry point you'll use to call the common
' file open/save dialog. The parameters are listed
' below, and all are optional.
'
' In:
' Flags: one or more of the ahtOFN_* constants, OR'd together.
' InitialDir: the directory in which to first look
' Filter: a set of file filters, set up by calling
' AddFilterItem. See examples.
' FilterIndex: 1-based integer indicating which filter
' set to use, by default (1 if unspecified)
' DefaultExt: Extension to use if the user doesn't enter one.
' Only useful on file saves.
' FileName: Default value for the file name text box.
' DialogTitle: Title for the dialog.
' hWnd: parent window handle
' OpenFile: Boolean(True=Open File/False=Save As)
' Out:
' Return Value: Either Null or the selected filename
Dim OFN As tagOPENFILENAME
Dim strFileName As String
Dim strFileTitle As String
Dim fResult As Boolean
' Give the dialog a caption title.
If IsMissing(InitialDir) Then InitialDir = CurDir
If IsMissing(Filter) Then Filter = ""
If IsMissing(FilterIndex) Then FilterIndex = 1
If IsMissing(Flags) Then Flags = 0&
If IsMissing(DefaultExt) Then DefaultExt = ""
If IsMissing(FileName) Then FileName = ""
If IsMissing(DialogTitle) Then DialogTitle = ""
If IsMissing(hWnd) Then hWnd = Application.hWndAccessApp
If IsMissing(OpenFile) Then OpenFile = True
' Allocate string space for the returned strings.
strFileName = left(FileName & String(256, 0), 256)
strFileTitle = String(256, 0)
' Set up the data structure before you call the function
With OFN
.lStructSize = Len(OFN)
.hwndOwner = hWnd
.strFilter = Filter
.nFilterIndex = FilterIndex
.strFile = strFileName
.nMaxFile = Len(strFileName)
.strFileTitle = strFileTitle
.nMaxFileTitle = Len(strFileTitle)
.strTitle = DialogTitle
.Flags = Flags
.strDefExt = DefaultExt
.strInitialDir = InitialDir
' Didn't think most people would want to deal with
' these options.
.hInstance = 0
'.strCustomFilter = ""
'.nMaxCustFilter = 0
.lpfnHook = 0
'New for NT 4.0
.strCustomFilter = String(255, 0)
.nMaxCustFilter = 255
End With
' This will pass the desired data structure to the
' Windows API, which will in turn it uses to display
' the Open/Save As Dialog.
If OpenFile Then
fResult = aht_apiGetOpenFileName(OFN)
Else
fResult = aht_apiGetSaveFileName(OFN)
End If

' The function call filled in the strFileTitle member
' of the structure. You'll have to write special code
' to retrieve that if you're interested.
If fResult Then
' You might care to check the Flags member of the
' structure to get information about the chosen file.
' In this example, if you bothered to pass in a
' value for Flags, we'll fill it in with the outgoing
' Flags value.
If Not IsMissing(Flags) Then Flags = OFN.Flags
ahtCommonFileOpenSave = TrimNull(OFN.strFile)
Else
ahtCommonFileOpenSave = vbNullString
End If
End Function

Function ahtAddFilterItem(strFilter As String, _
strDescription As String, Optional varItem As Variant) As String
' Tack a new chunk onto the file filter.
' That is, take the old value, stick onto it the description,
' (like "Databases"), a null character, the skeleton
' (like "*.mdb;*.mda") and a final null character.

If IsMissing(varItem) Then varItem = "*.*"
ahtAddFilterItem = strFilter & _
strDescription & vbNullChar & _
varItem & vbNullChar
End Function

Private Function TrimNull(ByVal strItem As String) As String
Dim intPos As Integer
intPos = InStr(strItem, vbNullChar)
If intPos > 0 Then
TrimNull = left(strItem, intPos - 1)
Else
TrimNull = strItem
End If
End Function
'************** Code End *****************


Probleem is dus dat ik niet weet hoe ik deze code aanroep met een knop....

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Maak een form...
Zet er een knop op...
Dubbelklik op de knop om de code erachter te schrijven en zet daarin:
Visual Basic:
1
Call TestIt()


edit:

En code tussen [code] tags zetten aub

... en dan moet ik dat zelf ook doen natuurlijk :)

[ Voor 36% gewijzigd door bigbeng op 03-03-2004 16:56 ]

Pagina: 1