Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Программно изменить значение реестра.
 
 автор: mulrus   (09.06.2009 в 14:43)   личное сообщение
 
 

Конечено странный вопрос но всё же. Существует ли такая возможность.

Нужная это для того, потому что у меня в базу принимаются таблицы dbf разного формата одни OEM другие в ANSI. Так вот я просто уже знаю заранее какие ко мне придут и в какой кодировке.

То бишь принимаю я файл в кодировке ANSI а мне он нужен в OEM

бац: сперва в строке [HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Xbase]
"DataCodePage"="ANSI" меняется на "DataCodePage"="OEM"

А потом засасываю данные.

Понимаю что идея фикс но все же....

  Ответить  
 
 автор: час   (09.06.2009 в 14:45)   личное сообщение
 
 

Идея - хорошая, зря Вы на себя наговариваете.........

(MS ACCESS, VBA, VB, ASP) - Класс для работы с реестром. тут на форуме

Класс для работы с реестром
Автор АлексейE
16.01.2004 г.
Работа со строковыми значениями реестра на основе Microsoft Windows Script Host (WSH) Описание: Класс для работы с реестром со строковыми значениями на основе Microsoft Windows Script Host (WSH)

Класс OperationRegistry имеет свойства:
- oprVersion (Версия класса. Только чтение)
- oprRootKeyName (Наименование корневого раздела. Чтение / Запись)
- oprStartup (Путь к разделу Автозагрузки. Только чтение)

Класс OperationRegistry имеет методы:
- oprRegWriteVal (создает раздел / параметр)
- oprRegGetVal (Возвращает значение раздела / параметра)
- oprRegDelete (Удаляет раздел / параметр)

- oprStartupAdd (Добавляет новый параметр автозагрузки)
- oprStartupDelete (Удаляет параметр автозагрузки)

Option Compare Database
Option Explicit
--------------------------------------------------------------------------------


'К сожалению перечисления только для чисел типа Long
'Для перевода в строку воспользуемся функцией-конвертор ConverterRootKeyName()
'Т.к. начинаем отсчет с 0, то по умолчанию будет первичный раздел HKEY_CURRENT_USER
Public Enum RootKeyName
rkn_HKEY_CURRENT_USER
rkn_HKEY_LOCAL_MACHINE
rkn_HKEY_CLASSES_ROOT
rkn_HKEY_USERS
rkn_HKEY_CURRENT_CONFIG
rkn_HKEY_DYN_DATA
'rkn_HKEY_PERFORMANCE_DATA
End Enum

Private WshShell As Object
Private rknRootKeyName As RootKeyName 'Корневой раздел


'/////////////// С В О Й С Т В А ///////////////

' Версия
Public Property Get oprVersion() As String
oprVersion = "2.10.030916 L"
End Property

'Ключ автозагрузки
Public Property Get oprStartup() As String
oprStartup = "SoftwareMicrosoftWindowsCurrentVers ionRun"
End Property

Public Property Get oprRootKeyName() As RootKeyName
oprRootKeyName = rknRootKeyName
End Property

Public Property Let oprRootKeyName(rknNewValue As RootKeyName)
rknRootKeyName = rknNewValue
End Property


'/////////////// С О Б Ы Т И Я ///////////////
Private Sub Class_Initialize()
Set WshShell = CreateObject("WScript.Shell")
End Sub
--------------------------------------------------------------------------------


Private Sub Class_Terminate()
Set WshShell = Nothing
End Sub
--------------------------------------------------------------------------------



'/////////////// М Е Т О Д Ы ///////////////

' Функция oprRegGetVal() возврвщает значение ключа реестра
Public Function oprRegGetVal(strSubKey As String) As Variant
On Error GoTo oprRegGetVal_Error

Dim strName As String, varResult As Variant

strName = CompletePath(strSubKey)
varResult = WshShell.RegRead(strName)

oprRegGetVal_Exit:
oprRegGetVal = varResult
Exit Function

oprRegGetVal_Error:
If Err.Number = -2147024894 Then varResult = ""
Resume oprRegGetVal_Exit
End Function
--------------------------------------------------------------------------------


' Процедура oprRegWriteVal() создает раздел / параметр.
Public Sub oprRegWriteVal(strSubKey As String, varValue As Variant)
Dim strName As String

strName = CompletePath(strSubKey)
WshShell.RegWrite strName, varValue
End Sub
--------------------------------------------------------------------------------


' Процедура oprRegDelete() Удаляет раздел / параметр.
Public Sub oprRegDelete(strSubKey As String)
On Error GoTo oprRegGetVal_Error

Dim strName As String

strName = CompletePath(strSubKey)
WshShell.RegDelete (strName)

oprRegGetVal_Exit:
Exit Sub

oprRegGetVal_Error:
If Err.Number = -2147024894 Then
Else
MsgBox Err.Description
End If
Resume oprRegGetVal_Exit
End Sub
--------------------------------------------------------------------------------


' Процедура oprStartupAdd() Создает новый параметр автозагрузки.
Public Sub oprStartupAdd(strProgramName As String, strPathProgram As String)
Dim strSubKey As String, rknRootKeyName As RootKeyName

strSubKey = Me.oprStartup & strProgramName

rknRootKeyName = Me.oprRootKeyName

Me.oprRootKeyName = rkn_HKEY_LOCAL_MACHINE
Me.oprRegWriteVal strSubKey, strPathProgram

Me.oprRootKeyName = rknRootKeyName
End Sub
--------------------------------------------------------------------------------


' Процедура oprStartupDelete() Удаляет параметр автозагрузки.
Public Sub oprStartupDelete(strProgramName As String)
Dim strSubKey As String, rknRootKeyName As RootKeyName

strSubKey = Me.oprStartup & strProgramName

rknRootKeyName = Me.oprRootKeyName

Me.oprRootKeyName = rkn_HKEY_LOCAL_MACHINE
Me.oprRegDelete strSubKey

Me.oprRootKeyName = rknRootKeyName
End Sub
--------------------------------------------------------------------------------



'/////////////// Д О П . Ф У Н К Ц И И ///////////////

' Функция ConverterRootKeyName() возврвщает значение типа строка
Private Function ConverterRootKeyName(lngKey As Long) As String
Dim strKeyName As String
Select Case lngKey
Case 0
strKeyName = "HKCU"
Case 1
strKeyName = "HKLM"
Case 2
strKeyName = "HKCR"
Case 3
strKeyName = "HKEY_USERS"
Case 4
strKeyName = "HKEY_CURRENT_CONFIG"
Case 5
strKeyName = "HKEY_DYN_DATA"
Case 6
strKeyName = "HKEY_PERFORMANCE_DATA"
Case Else
strKeyName = ""
End Select

ConverterRootKeyName = strKeyName
End Function
--------------------------------------------------------------------------------


' Функция CompletePath() возврвщает полный путь к параметру
Private Function CompletePath(strPathKey As String) As String
Dim strName As String

strName = Left(strPathKey, 1)

' Добавим обратный слеж если его нет
If strName = "" Then
strName = ConverterRootKeyName(Me.oprRootKeyName) & strPathKey
Else
strName = ConverterRootKeyName(Me.oprRootKeyName) & "" & strPathKey
End If

CompletePath = strName
End Function
--------------------------------------------------------------------------------



Пример использования
Public Sub OperationRegistry()
Dim orgOperReg As OperationRegistry

Set orgOperReg = New OperationRegistry

'Определяем корневай узел HKEY_CURRENT_USER (Но можно не определять,
'по умолчанию HKEY_CURRENT_USER)
orgOperReg.oprRootKeyName = rkn_HKEY_CURRENT_USER

' Создаем раздел / параметр
orgOperReg.oprRegWriteVal "SoftwareMyProgramProgram1", ""
orgOperReg.oprRegWriteVal "SoftwareMyProgramProgram2StringKey", "String Key"

' Читаем раздел / параметр
Debug.Print orgOperReg.oprRegGetVal("SoftwareMyProgramProgram1")
Debug.Print orgOperReg.oprRegGetVal("SoftwareMyProgramProgram2StringKey")

' Удаляем раздел / параметр
orgOperReg.oprRegDelete "SoftwareMyProgramProgram1"
orgOperReg.oprRegDelete "SoftwareMyProgramProgram2StringKey"
orgOperReg.oprRegDelete "SoftwareMyProgram"

Set orgOperReg = Nothing
End Sub
--------------------------------------------------------------------------------


' Добавляем Автозагрузку
Public Sub AddStartup()
Dim orgOperReg As OperationRegistry
Set orgOperReg = New OperationRegistry

orgOperReg.oprStartupAdd "База ACCESS", "D:Мои документыAccessRefer2002.mde"

Set orgOperReg = Nothing
End Sub
--------------------------------------------------------------------------------


' Удаляем Автозагрузку
Public Sub DeleteStartup()
Dim orgOperReg As OperationRegistry
Set orgOperReg = New OperationRegistry

orgOperReg.oprStartupDelete "База ACCESS"

Set orgOperReg = Nothing
End Sub

  Ответить  
 
 автор: Анатолий (Киев)   (09.06.2009 в 15:44)   личное сообщение
 
 

ИМХО, вы пошли ложным путем.
1. Изменения в реестре не отражаются в текущум приложении (по крайней мере, без использования API). Т.е. Access надо будет перезагружать.
2. Если на компе установлен BDE, этот параметр игнорируется.

Если в файлах нет МЕМО полей (DBT файл рядом), то лучше выполнять импорт с помощью ODBC Visual FoxPro драйвера (у него ANSI по умолчанию) или прямым доступом к файлу как к бинарному. Вам останется только нарисовать или слизать функцию преобразования OEM-Unicode. О работе с DBF можно много нарыть в инете. Например здесь.

  Ответить  
 
 автор: mulrus   (09.06.2009 в 19:48)   личное сообщение
 
 

Спасибо большое....

  Ответить  
 
 автор: mulrus   (09.06.2009 в 20:07)   личное сообщение
 
 

Еще раз спасибо. Действительно реестр это не панацея. Через ODBC все прекрасно подключается в том числе и таблицы ФоксПро. Спокойно подключил таблицы Фокса и Таблицы 5-го ДиБейза.

  Ответить  
 
 автор: час   (10.06.2009 в 09:39)   личное сообщение
 
 

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList