powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
8 сообщений из 8, страница 1 из 1
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33320781
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В VB6 создаю файлы dbf следующим образом:

Код: plaintext
1.
2.
Set cn = New Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBase IV;Data Source=D:\db"
cn.Execute "CREATE TABLE h (ID LONG, Code nvarchar(80))"

Есть две проблемы: Поле ID получается Double, а текстовые поля не читаются (так утверждают получатели файлов, которые открывают их используюя FoxPro, через Excel открывается замечательно). Как установить CP866?
...
Рейтинг: 0 / 0
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33321129
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создаю и заполняю таблицу вот так (текст надо сохранить с расширением vbs)
Код: 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.
'oledb.vbs: выгрузка в dbf

 Set cnt = createobject("adodb.Connection")
 'важное поле - datasource (директория с dbf)
 cnt.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;Extended Properties=dbase III;Persist Security Info=False"
 cnt.Open
 
 'создание новой таблицы (если уже такая есть, то - будет ошибка)
 on error resume next
 cnt.Execute ("create table tbl1 (s1 varchar(30), s2 varchar(30))")
 ierr=onerror()

 if ierr = 0 then

   Set rst = createobject("adodb.Recordset")
   ' adOpenKeyset =  1  adLockOptimistic= 3 
   rst.Open "tbl1", cnt,  1 ,  3 
   
   str1 = ""
   str2 = ""
   For i =  1  To  100 
    str1 = "номер " +CStr(i)
    str2 = "другой номер " + CStr(i * i - i +  10 )
    rst.AddNew
    rst.Fields("s1").Value = str1
    rst.Fields("s2").Value = str2
    rst.Update 'сохранение изменений в dbf
   Next
   
   rst.Close
   msgbox("Добавление в таблицу завершено")
 
 end if
 cnt.Close
 

function onerror
 if err.number<> 0  then
  MsgBox "Ошибка # " & CStr(Err.Number) & " " & Err.Description
  err.clear
  onerror= 1 
  exit function
 end if
 onerror= 0 
end function

после этого получившийся dbf нормально открывается досовскими просмоторщиками (например, dbu.exe) -- кириллица видна нормально.
. Возможно в вашем случае надо что-то настроить в ФоксПре (кодовую страницу 866), а не в dbf.
...
Рейтинг: 0 / 0
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33321146
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
занудные цитаты из msdn:
msdndBASE and FoxPro to Microsoft Access Data-Type Conversions
----------------------------------------------------------
When you access a dBASE or FoxPro file, Visual Basic translates dBASE
and FoxPro data types into the corresponding Microsoft Access data types.
The following table lists the data-type conversions.

dBASE data type Microsoft Access data type
--------------------------------------------------
Character Text
Date Date/Time
General (FoxPro only) OLE
Logical Yes/No
Memo Memo
Numeric, Float Number (FieldSize property set to Double)

mssnNumeric Fields
When you use Visual Basic to create a numeric field in a DBASE version III or IV database, Visual Basic creates a numeric field with five decimal places. This is by design
...
Рейтинг: 0 / 0
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33321167
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче, либо пусть в ФоксПре переставляют кодовую страницу на 866, либо при выгрузке в dbf преобразовывай символы в кодировку ansi (1251)
...
Рейтинг: 0 / 0
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33321168
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
...
Рейтинг: 0 / 0
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33321171
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
savosin_sergeyкороче, либо пусть в ФоксПре переставляют кодовую страницу на 866, либо при выгрузке в dbf преобразовывай символы в кодировку ansi (1251)А это как?
...
Рейтинг: 0 / 0
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33321431
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К foxpro приложен файлик cpzero.prg (или .fxp), который умеет не только затирать, но и устанавливать нужную кодовую страницу. Находится в корневом каталоге foxpro.
Для замены кодовой страницы в foxpro выполнить
do cpzero with <имя dbf файла>,<кодовая страница>
например, в файле my.dbf установить кодовую страницу 866:
do cpzero with "my.dbf",866

или любым другим способом менять 29-й (0х1D) байт (отсчет с 0) заголовка dbf. Для CP866 29-й байт = 101 (0х65)
...
Рейтинг: 0 / 0
Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
    #33321852
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо golsa
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Создание dBase IV инструкцией SQL через ADO. Проблема с кодовой страницей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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