powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / открытие дбв через dao
11 сообщений из 11, страница 1 из 1
открытие дбв через dao
    #34958185
Денис24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробовал так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set DBE_dbf = CreateObject("DAO.PrivateDBEngine.36")
set DB_dbf = DBE_dbf.OpenDatabase("p:\cust\", False, False, "dBase IV;LANGID=0x0419;CP=1251;COUNTRY=0")
set DB_dbf.OpenRecordset("select * from korresp") 

а также 

set DB_dbf = DBE_dbf.OpenDatabase("p:\cust\", False, False, "dBase IV;LANGID=0x0419;CP=866;COUNTRY=0")
set DB_dbf.OpenRecordset("select * from korresp") 

В итоге нечитаемые символы в строковых полях
Пробовал менять менять значение реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase на ansi и oem.
подозреваю что кодировка в оригинальном дбв cp1251
Как его корректно открыть через dao?
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34958956
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ради эксперимента,
попробуй прилинковать dbf к файлу Access и посмотри,
всё нормально с кодировкой?

если нормально , то обращайся к dbf через, временно созданный файл.mdb
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    Dim DB As DAO.Database
    Dim TB As DAO.TableDef
    Set DB = DBEngine.Workspaces( 0 ).CreateDatabase(ПУТЬ & "tmp", dbLangCyrillic)
    
    'присоединю базы dbf к tmp.mdb
    Set TB = DB.CreateTableDef(имя_базы_без_DBF)
    TB.Connect = "dBase IV;DataBase=" & ПУТЬ
    TB.SourceTableName = имя_базы_без_DBF   ' или другое, например Таблица1
    DB.TableDefs.Append TB
    Set TB = Nothing
    
    DB.Close:   Set DB = Nothing
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34959062
Денис24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_ради эксперимента,
попробуй прилинковать dbf к файлу Access и посмотри,
всё нормально с кодировкой?

если нормально , то обращайся к dbf через, временно созданный файл.mdb
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    Dim DB As DAO.Database
    Dim TB As DAO.TableDef
    Set DB = DBEngine.Workspaces( 0 ).CreateDatabase(ПУТЬ & "tmp", dbLangCyrillic)
    
    'присоединю базы dbf к tmp.mdb
    Set TB = DB.CreateTableDef(имя_базы_без_DBF)
    TB.Connect = "dBase IV;DataBase=" & ПУТЬ
    TB.SourceTableName = имя_базы_без_DBF   ' или другое, например Таблица1
    DB.TableDefs.Append TB
    Set TB = Nothing
    
    DB.Close:   Set DB = Nothing

Это я уже делал,получилось(кракозябл в прилинкованной таблице нету).но теперь мне надо продолжить.Выбрать сделать выборку и передать результат в excel.
Если делать так,опять же через дао
Код: plaintext
1.
set RS = DB_mdb.OpenRecordset("select * from korresp") 
А потом єтот рекордсет передавать екселю -опять кракозябы

Я так понял если работать напрямую через дао то он не правильно работает с кодировками.Если делать через аксес то все ок.
Все это я делаю в скриптах.
Можно ли в скриптах использовать функции операционной системы
Пробовал так
Код: plaintext
1.
Public Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal StrFrom As String, ByVal StrTo As String) As Long
-ошибка
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34959378
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи по форуму по "Кодировка dbf" и просто "DBF".
Только что попробовал очень много интересных постов вывалилось, может и найдешь то что тебе нужно.
Сам я работаю с DBF только в cp866 если нужно отправлять файлик в 1251 то просто ковертирую утилиткой dbftowin обратная перекодировка при помощи dbftodos. (Спасибо их автору за экономию моего времени )


С уважением, Николай.
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34960115
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjc приложил полезные программы, а если не лень пиши свою перекодировку
Код: plaintext
1.
Dim WIN:	WIN = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяжм√№"
Dim DOS:	DOS = "└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ │╖v╣"
попробуй через ADODB
Код: plaintext
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.
31.
32.
'   вывод в excel через ADO для VBScript
    Dim path_dbf:     path_dbf = "C:\ПУТЬ К DBF"
    Dim basa_dbf:     basa_dbf = "basa.dbf"

    Dim cnn:        Set cnn = WScript.CreateObject("ADODB.Connection")
    Dim rst:        Set rst = WScript.CreateObject("ADODB.Recordset")
    
    cnn.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};" & "DBQ=" & path_dbf & ";" & "DefaultDir=" & path_dbf & "\"
    cnn.Open
    rst.Open "SELECT * FROM " & basa_dbf, cnn
    
    Dim XLS
    Set XLS = WScript.CreateObject("Excel.Application")
    
    XLS.WorkBooks.Add

    'Создание заголовков
    Dim i
    For i =  0  To rst.Fields.Count -  1 
        XLS.Cells( 1 , i +  1 ).Value = rst.Fields(i).Name
    Next

    'Вставка рекордсета
    XLS.Range("A2").CopyFromRecordset rst ' со следующей строки
    
    rst.Close
    cnn.Close

    XLS.Visible = True
    
    Set XLS = Nothing
    Set rst = Nothing
    Set cnn = Nothing
С уважением Игорь.
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34960504
Денис24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал и через адо,результат тотже.
Пробовал dbftodos и dbftowin . получается вот что
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34960506
Денис24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот оригинал как видно эту таблицу если присоеденить в аксессе
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34960511
Денис24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот что получается если делать через дао и адо в скрипте
Результат отображен в экселе
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34960972
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это VB6
надо, перед тем как создавать файл Access удалить его
Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Private Sub Command1_Click()
    On Error GoTo m1

    Dim DB As DAO.Database
    Dim RS As DAO.Recordset
    Dim TB As DAO.TableDef
    Set DB = DBEngine.Workspaces( 0 ).CreateDatabase(App.Path & "\tmp", dbLangCyrillic)
    
    Dim basa As String:     basa = "ИМЯ БАЗЫ DBF БЕЗ РАСШИРЕНИЯ"
    
    'присоединю базы dbf к tmp.mdb
    Set TB = DB.CreateTableDef(basa)
    TB.Connect = "dBase IV;DataBase=" & App.Path
    TB.SourceTableName = basa
    DB.TableDefs.Append TB
    Set TB = Nothing
    DB.Close:   Set DB = Nothing
    
    Set DB = OpenDatabase(App.Path & "\tmp", True)
    Set RS = DB.OpenRecordset("Select * From " & basa)

    Dim xl
    Set xl = CreateObject("Excel.Application")
    xl.Visible = False
    xl.Workbooks.Add
    xl.Sheets("Лист1").Name = basa
    xl.Application.ScreenUpdating = False
    Dim i As Integer

    'Создание заголовков
    For i =  0  To RS.Fields.Count -  1 
        xl.Cells( 1 , i +  1 ).Value = RS.Fields(i).Name
    Next i
    'Вставка рекордсета в новый лист
    xl.ActiveSheet.Range("A2").CopyFromRecordset RS ' со следующей строки
    
    xl.Visible = True
    xl.Application.ScreenUpdating = True
    Set xl = Nothing

    RS.Close:   Set RS = Nothing
    DB.Close:   Set DB = Nothing
    Exit Sub
m1:
    MsgBox Err.Description
    Set RS = Nothing
    Set TB = Nothing
    Set DB = Nothing
End Sub
Денис, делай пожалуйста картинки поменьше и с расширением gif
обрезай их в Paint-е, например
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34961420
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы ещё здесь посмотрел
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
...
Рейтинг: 0 / 0
открытие дбв через dao
    #34961999
Денис24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все получилось.Дело было в параметре BDE в реестре и значении 2 на jet3.5 b jet 4.0
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / открытие дбв через dao
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]