Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Mikä on App.Path (vb)

pajuar [11.11.2003 21:26:59]

#

Kirjoitan ensimmäistä kertaa...
Eli voisiko joku selittää, mikä on App.Path ja miten sitä hyödynnetään?

Olen yrittänyt saada vb-käyttöliittymää avamaan Accesilla tehtyä itsenäisesti toimivaa tietokantasovellusta (mdb, eli
siinä on main switchboard).

Olen kaivellut erillaisia ohjeita pitkin nettiä, ja kaikki ohjeet tiedoston avaamisesta oletussovelluksessa antavat ohjeeksi käyttää App.path:a. Notepadin saan kyllä auki näin, mutta muita ohjelmia en.

Antti Laaksonen [11.11.2003 21:31:20]

#

App.Path sisältää hakemiston, johon ohjelma sillä hetkellä on tallennettu. Hyötyä App.Pathista on esimerkiksi silloin, kun samassa hakemistossa on kuva tai muu tiedosto, jota ohjelma käyttää. Ohjelman ja näin ollen tiedoston hakemisto taas tietenkin on jokaisella käyttäjällä eri. Siksi siihen ei voi viitata suoraan vaan App.Pathin avulla.

pajuar [11.11.2003 21:44:53]

#

No johan selvitti. Käsitin aluksi, että tuon avattavan tiedoston pitäisi olla samassa hakemistossa, kuin vb-ohjelman...
Eli mitenkähän homma menee silloin, kun tuo mdb-tiedosto on jossain toisessa hakemistossa, kuin itse ohjelma.

Ohjelman saan avattua alla olevalla pätkällä, mutta miten saisin siihen avattua tietyn tiedoston jostain muualta?

On muuten nopeaa toimintaa vastausten kanssa.kiitokset.

Private Sub acces_Click()
If Dir("C:\Ohjelmatiedostot\Microsoft Office\Office\msaccess.exe") <> "" Then

Dim pInfo As PROCESS_INFORMATION
         Dim sInfo As STARTUPINFO
         Dim sNull As String
         Dim lSuccess As Long
         Dim lRetValue As Long
         sInfo.cb = Len(sInfo)
         lSuccess = CreateProcess(sNull, _
                                 "C:\Ohjelmatiedostot\Microsoft Office\Office\msaccess.exe", _
                                 ByVal 0&, _
                                 ByVal 0&, _
                                 1&, _
                                 NORMAL_PRIORITY_CLASS, _
                                 ByVal 0&, _
                                 sNull, _
                                 sInfo, _
                                 pInfo)
    Else
      acces.Enabled = False
    End If

End Sub

pajuar [11.11.2003 23:22:11]

#

Ja vielä unohtui; formin alussa on tällainen pätkä:
(turha kysyä, minkä vuoksi tai mitä se tekee...)

Option Explicit
      Private Type PROCESS_INFORMATION
         hProcess As Long
         hThread As Long
         dwProcessId As Long
         dwThreadId As Long
      End Type
      Private Type STARTUPINFO
         cb As Long
         lpReserved As String
         lpDesktop As String
         lpTitle As String
         dwX As Long
         dwY As Long
         dwXSize As Long
         dwYSize As Long
         dwXCountChars As Long
         dwYCountChars As Long
         dwFillAttribute As Long
         dwFlags As Long
         wShowWindow As Integer
         cbReserved2 As Integer
         lpReserved2 As Long
         hStdInput As Long
         hStdOutput As Long
         hStdError As Long
      End Type

Private Declare Function CreateProcess Lib "kernel32" _
         Alias "CreateProcessA" _
         (ByVal lpApplicationName As String, _
         ByVal lpCommandLine As String, _
         lpProcessAttributes As Any, _
         lpThreadAttributes As Any, _
         ByVal bInheritHandles As Long, _
         ByVal dwCreationFlags As Long, _
         lpEnvironment As Any, _
         ByVal lpCurrentDriectory As String, _
         lpStartupInfo As STARTUPINFO, _
         lpProcessInformation As PROCESS_INFORMATION) As Long
      Private Declare Function OpenProcess Lib "kernel32.dll" _
         (ByVal dwAccess As Long, _
         ByVal fInherit As Integer, _
         ByVal hObject As Long) As Long
      Private Declare Function TerminateProcess Lib "kernel32" _
         (ByVal hProcess As Long, _
         ByVal uExitCode As Long) As Long
      Private Declare Function CloseHandle Lib "kernel32" _
         (ByVal hObject As Long) As Long
      Const SYNCHRONIZE = 1048576
      Const NORMAL_PRIORITY_CLASS = &H20&

Antti Laaksonen [12.11.2003 15:44:26]

#

Onko sinulla jotain erityistä syytä käyttää CreateProcess-funktiota? Jos haluat pelkästään avata tiedoston tietyllä ohjelma, ShellExecute riittää ihan hyvin. Ks. https://www.ohjelmointiputka.net/koodivinkit/23549-vb6-shellexecute-funktio

Kannattaa muuten huomioida, että Access ei välttämättä ole asennettu tuohon hakemistoon.

setä [12.11.2003 17:11:29]

#

Vastaan ihka enstemäistä kertaa. Jos käytät Visual Basicia, oletko kokeillut Data-ohjainta (vakiona) ja esim. DBGrid-ohjainta (lisättävä Project - Components - lomakkeelta). Tietokantaa voi selata ja päivittää kirjoittamatta tavuakaan koodia. Tietokanta ja taulu määritellään suunnittelutilassa Data-ohjaimelle.

pajuar [12.11.2003 19:30:41]

#

Kiitokset Antille...
Rupesin hieman epäilemään itseäni, kun kaikki ohjeet ympäri
maailmaa neuvoivat tuota shellExecute-juttua...
...ja aihetta olikin. Tuo viimeinen kommentti, että onko acces asennettu tuohon hakemistoon... Olen tehnyt tuhottomasti töitä aivan törkeän huolimattomuusvirheen takia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta