[VB 6.0] File open probleem

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

Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
ik zit met het problem dat als ik op de open knop druk hij wel netjes het open-scherm opent maar als ik een .mdb bestand selecteer dez niet opent. hij start MS Access wel op maar dit doet ie ook als ik het Open menu op cancel druk. Hoe kan dit? :?

code:

Private Sub mnuFileOpen_Click()
Dim sFile As String

With dlgCommonDialog
.DialogTitle = "Open"
.CancelError = False
'ToDo: set the flags and attributes of the common dialog control
.Filter = "Microsoft Access Database (*.mdb)|*.mdb"
.ShowOpen
If Len(.FileName) = 0 Then
Exit Sub
End If
sFile = .FileName
End With

Shell ("C:\Program Files\Microsoft Office\Office\MSACCESS.EXE"), [vbMaximizedFocus]

End Sub

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik heb weinig verstand van VB .. maar vergeet je niet een parameter op de commandline mee te geven aan access :?

Zoals ik het nu zie doe je namelijk niks met de bestandsnaam.

Acties:
  • 0 Henk 'm!

  • real[B]art
  • Registratie: Februari 2000
  • Laatst online: 03-09 19:42

real[B]art

CTRL+ALT+D1337

Je roept acces aan onafhankelijk van het resultaat van de open dialog, dus access wordt altijd gestart nadat de dialog sluit en dat doet ie bij zowel ok als cancel.
Verder zie ik idd dat je de bestandsnaam niet meegeeft dus access weet ook niet dat hij geacht wordt een bestand te openen.

"The general rule on about people on IRC seems to be "Attractive, single, mentally stable: choose two"


Acties:
  • 0 Henk 'm!

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 22:09
Op woensdag 20 maart 2002 01:47 schreef Denga het volgende:
ik zit met het problem dat als ik op de open knop druk hij wel netjes het open-scherm opent maar als ik een .mdb bestand selecteer dez niet opent. hij start MS Access wel op maar dit doet ie ook als ik het Open menu op cancel druk. Hoe kan dit? :?

code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub mnuFileOpen_Click()
    Dim sFile As String

    With dlgCommonDialog
      .DialogTitle = "Open"
      .CancelError = [b]True[/b]      'ToDo: set the flags and attributes of the common dialog control
      .Filter = "Microsoft Access Database (*.mdb)|*.mdb"
      .ShowOpen
      if err.number <> 0 then (hier moet je maar ff het error nummer voor cancel neerzetten)
        exit sub
      end if
      If Len(.FileName) = 0 Then
        Exit Sub
      End If
      sFile = .FileName
    End With
    
    Shell ("C:\Program Files\Microsoft Office\Office\MSACCESS.EXE"), [vbMaximizedFocus]
    
End Sub

Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 23:16

pistole

Frutter

lelijk maar effectief:
code:
1
if sFile <> "" then Shell ("C:\Program Files\Microsoft Office\Office\MSACCESS.EXE " & sFile), [vbMaximizedFocus]

ofzo. Weet niet of sFile het hele pad bevat.

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 13-09 11:16

mulder

ik spuug op het trottoir

Daar is die CancelError dus voor. Niet echt mooi, maar tis VB he.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
ok alvast bedankt nu opent ie access net meer als ik op cancel druk maar nog steeds opent ie de databse niet die ik in het open dialog box aanklik. hij opent access wel netjes maar niet mijn geselecteerde database. :?

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 13-09 11:16

mulder

ik spuug op het trottoir

Op woensdag 20 maart 2002 09:12 schreef pistole het volgende:
Weet niet of sFile het hele pad bevat.
zou 1 ding kunnen zijn.

Maar wat als Access ergens anders geinstalleerd is? Probeer eens een referentie naar Access the maken (Menu -> Project -> References). Heb het eigenlijk nooit gedaan met Access, maar dan kun je zoiets als dit doen (syntax niet correct):
code:
1
2
3
4
Dim obj As Access.Application

  Set obj = CreateObject("Access.Application")
  obj.OpenDatabase sFile

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 10-09 12:16

Sponge

Serious Game Developer

ShellExecute moet hierbij perfect werken

Acties:
  • 0 Henk 'm!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:39

Crazy D

I think we should take a look.

ShellExecute is een aardige :)
Of anders kun je in de registry zoeken naar <officepath>\msaccess.exe (oid), Office kennende staat er op een hoop plaatsen wel het path naar Access.
o.a. ergens in HKEY_CLASSES_ROOT\Applications\MSACCESS.EXE staat bij het complete path van Access.

maar ik denk dat ShellExecute aardiger is, dan opent Windows gewoon je default programma voor Access databases (meestal Access dus...)

Exact expert nodig?


Acties:
  • 0 Henk 'm!

  • steenz
  • Registratie: Oktober 2000
  • Laatst online: 21-09-2024
Ik neem aan dat je ook nog aan Access moet meegeven welke file je dan eigenlijk wilt openen (op de commandline).

Suc6

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 13-09 11:16

mulder

ik spuug op het trottoir

Op woensdag 20 maart 2002 21:59 schreef steenz het volgende:
Ik neem aan dat je ook nog aan Access moet meegeven welke file je dan eigenlijk wilt openen (op de commandline).

Suc6
Met ShellExecute hoef je alleen de .mdb mee te geven.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Kan iemand mij die code geven in bovenstaand ecode ingevoerd anders kom ik er namelijk ook niet meer uit... loop nu al ruim 2uur wat af te prutsen maar nog steeds wil het niet...:?

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • real[B]art
  • Registratie: Februari 2000
  • Laatst online: 03-09 19:42

real[B]art

CTRL+ALT+D1337

Op woensdag 20 maart 2002 23:19 schreef Denga het volgende:
Kan iemand mij die code geven in bovenstaand ecode ingevoerd anders kom ik er namelijk ook niet meer uit... loop nu al ruim 2uur wat af te prutsen maar nog steeds wil het niet...:?
I you don't succeed the first time, try again B-)

Kopieer de gegeven syntax, gebruik als je niet zeker weet waar de fout zit break lines (kun je - uit me hoofd - togglen met F9, de regel krijgt dan een rode achtergrond en de debugger pauzeert de uitvoering bij die regel. Je hebt dan de gelegenheid om te kijken naar de waardes van variabelen (selecteer de variabele en druk Shift F9) of naar resultaten van functies (zelfde manier). Als deze sneltoetsen niet werken moet je ff zelf zoeken in de menubalk bij 'debug' oid.
Al doende leert men, zodat je er de volgende keer niet weer intrapt. IMHO heb je daar meer aan dan kant-en-klare code cut & pasten (btw zelf klooien vind ik persoonlijk ook leuker :P).
Je kunt ook evt een boek kopen zoals 'VB voor beginners', klinkt lullig, is het niet, staan een hoop nuttige dingen in. Is vooral handig om te hebben als naslagwerk aangezien VB's help per functie, statement etc uitleg geeft met examples van alleen die functie. In dit soort boeken staat doorgaans ook hoe je ze kunt gebruiken en uitgebreidere examples.

Suc6!

"The general rule on about people on IRC seems to be "Attractive, single, mentally stable: choose two"


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Klinkt goed... alleen heb ik hier 4 boeken naast me liggen en in geen van de 4 staat de oplossing voor mijn probleem, en aangezien ik er al 2,5 vruchteloze uren in heb gestoken richt ik me toch tot jullie, dus bij voorbaat dank. (8>

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 10-09 12:16

Sponge

Serious Game Developer

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Dan:
ShellExecute me.hwnd, "OPEN","C:\dirretje\accessbestand.mdb",vbnullstring,app.path*,0

Iedereen gebruikt deze call anders... heb hem ook direct uit de API viewer geplakt, en de code hier meteen neer gezet. *app.path, zou misschien ook wel de directory van het access bestand moeten zijn (net zoals bij shortcuts "Start in")... Ook me.hwnd kan volgens mij 0 zijn...maar denk dat het zo wel werkt...

Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
ja dit gaat op als je maar 1 db wil openen maar het gat hierom een keuzemenu en daaruit kies ik 1 en die moet ie openen, dus ik kan niet een standaar .mdb meegeven als variabele...

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:39

Crazy D

I think we should take a look.

Op donderdag 21 maart 2002 14:27 schreef Denga het volgende:
ja dit gaat op als je maar 1 db wil openen maar het gat hierom een keuzemenu en daaruit kies ik 1 en die moet ie openen, dus ik kan niet een standaar .mdb meegeven als variabele...
:?
Dan bepaal je toch n.a.v. de keuze welke database het moet zijn, stop dat in een variabele, en opent die?

Exact expert nodig?


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
ok...........Denga is weer aan het prutsen en moet zeggen dat het best lukt maar loopt tegen een raar feit aan, nl.:
bij sFile = .FileName dan ziet ie het als sFile = "c:\Program Files\VB98\test.mdb" en dan zegt ie kan c:\Program.mdb niet openen...

en bij sFile = .FileTitle ziet ie 't als sFile = "test.mdb" en dat krijg ik als foutmelding kan het databasebestand test.mdb niet vinden. controleer het pad of bestandsnaam die u heeft opgegeven.

Hoe kan dit? en hoe opent ie 'm wel op de goede wijze? :?

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • nxt
  • Registratie: November 2001
  • Laatst online: 24-08 15:34

nxt

Op donderdag 21 maart 2002 23:13 schreef Denga het volgende:
ok...........Denga is weer aan het prutsen en moet zeggen dat het best lukt maar loopt tegen een raar feit aan, nl.:
bij sFile = .FileName dan ziet ie het als sFile = "c:\Program Files\VB98\test.mdb" en dan zegt ie kan c:\Program.mdb niet openen...
waarschijnlijk moeten er aanhalingstekens om de filename heen, want zo te zien geeft ie het na de 1e spatie op.
ik weet niet hoe je dat in VB doet, maar in java doet je dat door er een \ voor te zetten (e.g. \" voor een " in een string)
en bij sFile = .FileTitle ziet ie 't als sFile = "test.mdb" en dat krijg ik als foutmelding kan het databasebestand test.mdb niet vinden. controleer het pad of bestandsnaam die u heeft opgegeven.

Hoe kan dit? en hoe opent ie 'm wel op de goede wijze? :?
dat dat niet werkt snap ik wel, (tenminste als de db in een 'voor access onbekende dir' staat)

Acties:
  • 0 Henk 'm!

  • nxt
  • Registratie: November 2001
  • Laatst online: 24-08 15:34

nxt

sorry, dubbelpost

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Test het even met c:\progra~1 in plaats van c:\program files

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Ook dit werkt niet want .FileName is een door VB aangemaakte variabele en als je er aanhalingtekens omheen zet dan ziet ie .FileName als een vaste variabele... en dat mer c:\progra~\ werkt ook niet aangezien sFile zelf het path opzoekt, dus kan je dit niet veranderen, hij ziet het zelf al als c:\Program Files\
Heeft iemand dan wel de oplossing? :?

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 10-09 12:16

Sponge

Serious Game Developer

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'//Get ShortFilename from Longfilename
Private Declare Function GetShortPathName Lib "KERNEL32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Public Function GetShortName(ByVal strLongFileName As String) As String
    Dim lngRetVal As Long, strShortPathName As String, intLen As Integer

    '//This function is used to get a short path ("c:\mydocs~1\")
    '//Fill buffer
    strShortPathName = Space$(255)
    
    '//Length of the string
    intLen = Len(strShortPathName)
    
    lngRetVal = GetShortPathName(strLongFileName, strShortPathName, intLen)

    GetShortName = Left$(strShortPathName, lngRetVal)
End Function

Gooi daar de filename in en de magische short-name komt te voorschijn... Dit komt ook uit een database programma wat ik heb gemaakt... voor de 'open' string...

edit:

Space$() = sneller :)

Acties:
  • 0 Henk 'm!

Verwijderd

Op vrijdag 22 maart 2002 01:21 schreef Denga het volgende:
Ook dit werkt niet want .FileName is een door VB aangemaakte variabele en als je er aanhalingtekens omheen zet dan ziet ie .FileName als een vaste variabele... en dat mer c:\progra~\ werkt ook niet aangezien sFile zelf het path opzoekt, dus kan je dit niet veranderen, hij ziet het zelf al als c:\Program Files\
Heeft iemand dan wel de oplossing? :?
Simpel:
code:
1
2
3
4
5
6
dim sPath as string
dim sDataPath as string

sDataPath = "Naam van mijn bestand.mdb"
sPath = chr(34) & "C:\Program Files\Microsoft Office\Office\MSACCES.EXE " & sDataPath & chr(34)
shell sPath, vbMaximizedFocus

Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
ja dit is allemaal wel heel mooi maar dit zijn allemaal oplossingen voor het openen van 1 vooraf gedefinieerde file, maar ik wil juist dat je een file uit een lijst kan kiezen en dat lukt dus niet wat dus blijkt uit bovenstaande foutmelding....:?

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

Verwijderd

Het beste werk je toch met een object van Acces.
Eventjes zoeken in [project]>references, acces x.0 aanvinken. Dan kan je in de object browser (F2) kijken wat zo'n object allemaal kan.
Shell exe oproepen is hopeloos veroudert en niet efficient. Het enige nadeel van dat object is dat op elke pc je dezelfde office moet geinstalleerd hebben of je moet telkens die references aanpassen |:(
succes :)

Acties:
  • 0 Henk 'm!

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 10-09 12:16

Sponge

Serious Game Developer

hmmz.. je moet nog wel wat leren over variabelen.


(partly P-code)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
'//Get ShortFilename from Longfilename
Private Declare Function GetShortPathName Lib "KERNEL32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub AddFilesToList
 List.Additem "C:\test.mdb"
 List.Additem "C:\test2.mdb"
 List.Additem "C:\test3.mdb"
 List.Additem "C:\test4.mdb"
End Sub

Sub List_Click
ShellExecute me.hwnd, "OPEN, GetShortName(List.Text),vbnullstring,app.path*,0
End Sub

Public Function GetShortName(ByVal strLongFileName As String) As String
    Dim lngRetVal As Long, strShortPathName As String, intLen As Integer

    '//This function is used to get a short path ("c:\mydocs~1\")
    '//Fill buffer
    strShortPathName = Space$(255)
    
    '//Length of the string
    intLen = Len(strShortPathName)
    
    lngRetVal = GetShortPathName(strLongFileName, strShortPathName, intLen)

    GetShortName = Left$(strShortPathName, lngRetVal)
End Function

Dit MOET werken. Als het je niet lukt, zou ik toch eigenlijk aanraden om een goed boek over VB te halen...
Pagina: 1