Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / открытие дбв через dao / 11 сообщений из 11, страница 1 из 1
22.11.2007, 13:48
    #34958185
Денис24
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
пробовал так
Код: 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
22.11.2007, 16:18
    #34958956
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
ради эксперимента,
попробуй прилинковать 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
22.11.2007, 16:37
    #34959062
Денис24
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
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
22.11.2007, 17:53
    #34959378
gjghjc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
Поищи по форуму по "Кодировка dbf" и просто "DBF".
Только что попробовал очень много интересных постов вывалилось, может и найдешь то что тебе нужно.
Сам я работаю с DBF только в cp866 если нужно отправлять файлик в 1251 то просто ковертирую утилиткой dbftowin обратная перекодировка при помощи dbftodos. (Спасибо их автору за экономию моего времени )


С уважением, Николай.
...
Рейтинг: 0 / 0
23.11.2007, 09:09
    #34960115
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
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
23.11.2007, 11:06
    #34960504
Денис24
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
Пробовал и через адо,результат тотже.
Пробовал dbftodos и dbftowin . получается вот что
...
Рейтинг: 0 / 0
23.11.2007, 11:08
    #34960506
Денис24
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
вот оригинал как видно эту таблицу если присоеденить в аксессе
...
Рейтинг: 0 / 0
23.11.2007, 11:09
    #34960511
Денис24
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
А вот что получается если делать через дао и адо в скрипте
Результат отображен в экселе
...
Рейтинг: 0 / 0
23.11.2007, 13:00
    #34960972
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
это 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
23.11.2007, 14:38
    #34961420
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
я бы ещё здесь посмотрел
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
...
Рейтинг: 0 / 0
23.11.2007, 17:04
    #34961999
Денис24
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открытие дбв через dao
Все получилось.Дело было в параметре BDE в реестре и значении 2 на jet3.5 b jet 4.0
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / открытие дбв через dao / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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