佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1016|回复: 10

如何洽当地保存database的directory++再请问如何执行register.xml??

[复制链接]
发表于 21-5-2006 11:41 PM | 显示全部楼层 |阅读模式
假如我用VB做了一个module
是用来寻找database的directory
以便让我的program利用database...

那么
通常大家是怎样保存那个directory
以便让sub-modules来refer呢?


以前我作project的方法很烂(我是中途做project先的,现在还在读)
是在MDI form里define一个变量来保存
然后sub-module可以refer MDI

丢脸
所以要问大家比较妥当

懂VS Studio的人可以回答我...


[ 本帖最后由 haroldlbc 于 22-5-2006 01:00 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 22-5-2006 12:17 AM | 显示全部楼层
不用丢脸, 你的算是一个方法之一.

另一个方法, 是用 public variable.
另外, 可以记录在 registry/xml 文件里, 这样, 不只是随时随地可以 refer 你的 database, 以后再打开你的软件, 也不需要再要求用户重新输入资料库的 path.
回复

使用道具 举报

发表于 22-5-2006 09:15 AM | 显示全部楼层
原帖由 goatstudio 于 22-5-2006 00:17 发表
不用丢脸, 你的算是一个方法之一.

另一个方法, 是用 public variable.
另外, 可以记录在 registry/xml 文件里, 这样, 不只是随时随地可以 refer 你的 database, 以后再打开你的软件, 也不需要再要求用户重 ...


我想问,所谓不需要重新输入的意思是输入原本的path对吗?

那么,如果path换了,是不是我们需要改registry/xml里面所设定的path,对吗?
回复

使用道具 举报

发表于 22-5-2006 09:23 AM | 显示全部楼层
原帖由 johe07 于 22-5-2006 09:15 AM 发表


我想问,所谓不需要重新输入的意思是输入原本的path对吗?

那么,如果path换了,是不是我们需要改registry/xml里面所设定的path,对吗?


这个当然... 当 path 换了... 程序找不到, pop 出对话框要求重新输入咯...
回复

使用道具 举报

发表于 22-5-2006 09:31 AM | 显示全部楼层
我以为有更神奇的方法。。。
哈哈哈

谢谢
回复

使用道具 举报

 楼主| 发表于 22-5-2006 10:13 AM | 显示全部楼层
原帖由 goatstudio 于 22-5-2006 12:17 AM 发表
不用丢脸, 你的算是一个方法之一.

另一个方法, 是用 public variable.
另外, 可以记录在 registry/xml 文件里, 这样, 不只是随时随地可以 refer 你的 database, 以后再打开你的软件, 也不需要再要求用户重 ...

registry/xml比较容易
public class/varable 的coding很难...



[ 本帖最后由 haroldlbc 于 22-5-2006 12:58 PM 编辑 ]
回复

使用道具 举报

Follow Us
 楼主| 发表于 22-5-2006 12:59 PM | 显示全部楼层
请问要如何执行registry/xml比较容易,
可以给sample/example吗?
回复

使用道具 举报

发表于 22-5-2006 07:36 PM | 显示全部楼层
我猜想你用 VB6?
很久以前我这么做过... 以下的 code 是我从一个网站抄回来的, 把它弄成一个 module, 你就可以用了.
基本上, 你只需要用到:

WriteRegistry
ReadRegistry
DeleteValue



  1. Option Explicit
  2. 'Security Mask constants
  3. Public Const READ_CONTROL = &H20000
  4. Public Const SYNCHRONIZE = &H100000
  5. Public Const STANDARD_RIGHTS_ALL = &H1F0000
  6. Public Const STANDARD_RIGHTS_READ = READ_CONTROL
  7. Public Const STANDARD_RIGHTS_WRITE = READ_CONTROL
  8. Public Const KEY_QUERY_VALUE = &H1
  9. Public Const KEY_SET_VALUE = &H2
  10. Public Const KEY_CREATE_SUB_KEY = &H4
  11. Public Const KEY_ENUMERATE_SUB_KEYS = &H8
  12. Public Const KEY_NOTIFY = &H10
  13. Public Const KEY_CREATE_LINK = &H20
  14. Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _
  15.    KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _
  16.    KEY_CREATE_LINK) And (Not SYNCHRONIZE))
  17. Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or _
  18.    KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
  19. Public Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
  20. Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE _
  21.    Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
  22. ' Possible registry data types
  23. Public Enum InTypes
  24.    ValNull = 0
  25.    ValString = 1
  26.    ValXString = 2
  27.    ValBinary = 3
  28.    ValDWord = 4
  29.    ValLink = 6
  30.    ValMultiString = 7
  31.    ValResList = 8
  32. End Enum
  33. ' Registry value type definitions
  34. Public Const REG_NONE As Long = 0
  35. Public Const REG_SZ As Long = 1
  36. Public Const REG_EXPAND_SZ As Long = 2
  37. Public Const REG_BINARY As Long = 3
  38. Public Const REG_DWORD As Long = 4
  39. Public Const REG_LINK As Long = 6
  40. Public Const REG_MULTI_SZ As Long = 7
  41. Public Const REG_RESOURCE_LIST As Long = 8
  42. ' Registry section definitions
  43. Public Const HKEY_CLASSES_ROOT = &H80000000
  44. Public Const HKEY_CURRENT_USER = &H80000001
  45. Public Const HKEY_LOCAL_MACHINE = &H80000002
  46. Public Const HKEY_USERS = &H80000003
  47. Public Const HKEY_PERFORMANCE_DATA = &H80000004
  48. Public Const HKEY_CURRENT_CONFIG = &H80000005
  49. Public Const HKEY_DYN_DATA = &H80000006
  50. ' Codes returned by Reg API calls
  51. Private Const ERROR_NONE = 0
  52. Private Const ERROR_BADDB = 1
  53. Private Const ERROR_BADKEY = 2
  54. Private Const ERROR_CANTOPEN = 3
  55. Private Const ERROR_CANTREAD = 4
  56. Private Const ERROR_CANTWRITE = 5
  57. Private Const ERROR_OUTOFMEMORY = 6
  58. Private Const ERROR_INVALID_PARAMETER = 7
  59. Private Const ERROR_ACCESS_DENIED = 8
  60. Private Const ERROR_INVALID_PARAMETERS = 87
  61. Private Const ERROR_NO_MORE_ITEMS = 259
  62. ' Registry API functions used in this module (there are more of them)
  63. Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  64. Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
  65. Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  66. Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  67. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  68. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  69. Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
  70. Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
  71. Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  72. Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
  73. Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
  74. Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long

  75. ' Example
  76. ' Text1.Text = ReadRegistry(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName")
  77. '
  78. Public Function ReadRegistry(ByVal Group As Long, ByVal Section As String, ByVal Key As String) As String
  79. Dim lResult As Long, lKeyValue As Long, lDataTypeValue As Long, lValueLength As Long, sValue As String, td As Double, TStr1 As String, TStr2 As String, I As Variant
  80. On Error Resume Next
  81. lResult = RegOpenKey(Group, Section, lKeyValue)
  82. sValue = Space$(2048)
  83. lValueLength = Len(sValue)
  84. lResult = RegQueryValueEx(lKeyValue, Key, 0&, lDataTypeValue, sValue, lValueLength)
  85. If (lResult = 0) And (Err.Number = 0) Then
  86.    If lDataTypeValue = REG_DWORD Then
  87.       td = Asc(Mid$(sValue, 1, 1)) + &H100& * Asc(Mid$(sValue, 2, 1)) + &H10000 * Asc(Mid$(sValue, 3, 1)) + &H1000000 * CDbl(Asc(Mid$(sValue, 4, 1)))
  88.       sValue = Format$(td, "000")
  89.    End If
  90.    If lDataTypeValue = REG_BINARY Then
  91.        ' Return a binary field as a hex string (2 chars per byte)
  92.        TStr2 = ""
  93.        For I = 1 To lValueLength
  94.           TStr1 = Hex(Asc(Mid(sValue, I, 1)))
  95.           If Len(TStr1) = 1 Then TStr1 = "0" & TStr1
  96.           TStr2 = TStr2 + TStr1
  97.        Next
  98.        sValue = TStr2
  99.    Else
  100.       sValue = Left$(sValue, lValueLength - 1)
  101.    End If
  102. Else
  103.    sValue = "Not Found"
  104. End If
  105. lResult = RegCloseKey(lKeyValue)
  106. ReadRegistry = sValue
  107. End Function

  108. ' Example
  109. ' WriteRegistry HKEY_CURRENT_USER, "SOFTWARE\My Name\My App", "NewSubKey", ValString, "NewValueHere"
  110. ' WriteRegistry HKEY_CURRENT_USER, "SOFTWARE\My Name\My App", "NewSubKey", ValDWord, "31"
  111. '
  112. Public Sub WriteRegistry(ByVal Group As Long, ByVal Section As String, ByVal Key As String, ByVal ValType As InTypes, ByVal Value As Variant)
  113. Dim lResult As Long
  114. Dim lKeyValue As Long
  115. Dim InLen As Long
  116. Dim lNewVal As Long
  117. Dim sNewVal As String
  118. On Error Resume Next
  119. lResult = RegCreateKey(Group, Section, lKeyValue)
  120. If ValType = ValDWord Then
  121.    lNewVal = CLng(Value)
  122.    InLen = 4
  123.    lResult = RegSetValueExLong(lKeyValue, Key, 0&, ValType, lNewVal, InLen)
  124. Else
  125.    ' Fixes empty string bug - spotted by Marcus Jansson
  126.    If ValType = ValString Then Value = Value + Chr(0)
  127.    sNewVal = Value
  128.    InLen = Len(sNewVal)
  129.    lResult = RegSetValueExString(lKeyValue, Key, 0&, 1&, sNewVal, InLen)
  130. End If
  131. lResult = RegFlushKey(lKeyValue)
  132. lResult = RegCloseKey(lKeyValue)
  133. End Sub

  134. Public Function ReadRegistryGetSubkey(ByVal Group As Long, ByVal Section As String, Idx As Long) As String
  135. Dim lResult As Long, lKeyValue As Long, lDataTypeValue As Long, lValueLength As Long, sValue As String, td As Double
  136. On Error Resume Next
  137. lResult = RegOpenKey(Group, Section, lKeyValue)
  138. sValue = Space$(2048)
  139. lValueLength = Len(sValue)
  140. lResult = RegEnumKey(lKeyValue, Idx, sValue, lValueLength)
  141. If (lResult = 0) And (Err.Number = 0) Then
  142.    sValue = Left$(sValue, InStr(sValue, Chr(0)) - 1)
  143. Else
  144.    sValue = "Not Found"
  145. End If
  146. lResult = RegCloseKey(lKeyValue)
  147. ReadRegistryGetSubkey = sValue
  148. End Function

  149. Public Function ReadRegistryGetAll(ByVal Group As Long, ByVal Section As String, Idx As Long) As Variant
  150. Dim lResult As Long, lKeyValue As Long, lDataTypeValue As Long
  151. Dim lValueLength As Long, lValueNameLength As Long
  152. Dim sValueName As String, sValue As String
  153. Dim td As Double
  154. On Error Resume Next
  155. lResult = RegOpenKey(Group, Section, lKeyValue)
  156. sValue = Space$(2048)
  157. sValueName = Space$(2048)
  158. lValueLength = Len(sValue)
  159. lValueNameLength = Len(sValueName)
  160. lResult = RegEnumValue(lKeyValue, Idx, sValueName, lValueNameLength, 0&, lDataTypeValue, sValue, lValueLength)
  161. If (lResult = 0) And (Err.Number = 0) Then
  162.    If lDataTypeValue = REG_DWORD Then
  163.       td = Asc(Mid$(sValue, 1, 1)) + &H100& * Asc(Mid$(sValue, 2, 1)) + &H10000 * Asc(Mid$(sValue, 3, 1)) + &H1000000 * CDbl(Asc(Mid$(sValue, 4, 1)))
  164.       sValue = Format$(td, "000")
  165.    End If
  166.    sValue = Left$(sValue, lValueLength - 1)
  167.    sValueName = Left$(sValueName, lValueNameLength)
  168. Else
  169.    sValue = "Not Found"
  170. End If
  171. lResult = RegCloseKey(lKeyValue)
  172. ' Return the datatype, value name and value as an array
  173. ReadRegistryGetAll = Array(lDataTypeValue, sValueName, sValue)
  174. End Function

  175. Public Function DeleteSubkey(ByVal Group As Long, ByVal Section As String) As String
  176. Dim lResult As Long, lKeyValue As Long
  177. On Error Resume Next
  178. lResult = RegOpenKeyEx(Group, vbNullChar, 0&, KEY_ALL_ACCESS, lKeyValue)
  179. lResult = RegDeleteKey(lKeyValue, Section)
  180. lResult = RegCloseKey(lKeyValue)
  181. End Function

  182. ' Example
  183. ' DeleteValue HKEY_CURRENT_USER, "Software\My Name\My App", "NewSubKey"
  184. '

  185. Public Function DeleteValue(ByVal Group As Long, ByVal Section As String, ByVal Key As String) As String
  186. Dim lResult As Long, lKeyValue As Long
  187. On Error Resume Next
  188. lResult = RegOpenKey(Group, Section, lKeyValue)
  189. lResult = RegDeleteValue(lKeyValue, Key)
  190. lResult = RegCloseKey(lKeyValue)
  191. End Function
复制代码

回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 22-5-2006 10:12 PM | 显示全部楼层
原帖由 goatstudio 于 22-5-2006 07:36 PM 发表
我猜想你用 VB6?
很久以前我这么做过... 以下的 code 是我从一个网站抄回来的, 把它弄成一个 module, 你就可以用了.
基本上, 你只需要用到:

WriteRegistry
ReadRegistry
DeleteValue



Option Explic ...

我是用VB.net,只是纯粹要了解。并没有要用。

你给的code不能直接用,但我只是要了解concept, so要时间消化。


谢谢你啊~~
回复

使用道具 举报

发表于 22-5-2006 10:34 PM | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 23-5-2006 09:56 AM | 显示全部楼层
原帖由 goatstudio 于 22-5-2006 10:34 PM 发表
是 VB.NET 啊...
那么看这里: Working with Windows Registry using VB.NET - The Code Project - VB.NET

谢谢你啊............
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 6-8-2025 06:34 AM , Processed in 0.126544 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表