powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
19 сообщений из 19, страница 1 из 1
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33810754
alex_ist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С раздела Delphi направили сюда за советом при работе через ADO + OLE DB for Visual FoxPro.

Вопрос
В разных процедурах создаю таблицы DBF через OLEDB for Visual FoxPro.
В одном месте они создаются с кодовой страницей 1251 (Russian Windows), а в других - с кодировкой 1252 (ANSI Windows).

1) Почему это происходит ?
2) Как можно создавать с нужной мне кодировкой (иногда нужна 866, а иногда 1251) ?
3) Можно ли изменить кодовую страницу уже созданного файла DBF.

Пример создания таблицы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with TADOQuery.Create(nil) do
try
  ConnectionString := 'Provider=VFPOLEDB.1;Data Source=' + <путь к Temp каталогу Windows> + 
                      ';Mode=Share Deny None;Password="";Collating Sequence=MACHINE';

  SQL.Text := 'CREATE TABLE "' + <Полный путь к файлу DBF> + '" ' +
              '(id с(38), kod n(2), name c(30),  state_id n(2), type_id n(2))';
  ExecSQL;
  ...
  ...
finally
  Free;
end;

При использовании такого блока кода в разных местах, создаются таблицы с разной кодировкой.

Ссылка на вопрос в разделе Delphi http://www.sql.ru/forum/actualthread.aspx?tid=307320
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33810829
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2) Как можно создавать с нужной мне кодировкой (иногда нужна 866, а иногда 1251) ?

Код: plaintext
1.
CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE] 
    [CODEPAGE = nCodePage]

автор3) Можно ли изменить кодовую страницу уже созданного файла DBF.

Можно
- используя CPZERO.prg
- копируя таблицу в др таблицу

Код: plaintext
1.
COPY TO FileName [DATABASE DatabaseName [NAME LongTableName]]
[AS nCodePage]

авторВ разных процедурах создаю таблицы DBF через OLEDB for Visual FoxPro.
В одном месте они создаются с кодовой страницей 1251 (Russian Windows), а в других - с кодировкой 1252 (ANSI Windows).

1) Почему это происходит ?

В Фоксе для установки кодовой страницы используется настройка в файле конфигурации CODEPAGE = 1251/866/... именно с этим значение создается по умолчанию таблица.
Если у тебя в ОС утановлена кодовая страница 1252 и нет файла конфигурации или явно не указана страница создания, то таблица создастся в кодировке ОС.

Проверить кодировку среды можно ф-ией

авторCPCURRENT()
Returns the code page setting (if any) in your Visual FoxPro configuration file, or returns the current operating system code page.

Проверить кодировку таблицы можно
авторCPDBF([nWorkArea | cTableAlias])
Returns the code page with which an open table has been marked.
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33810859
Goldminer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist автор3) Можно ли изменить кодовую страницу уже созданного файла DBF.

Можно
- используя CPZERO.prg
- копируя таблицу в др таблицу

Код: plaintext
1.
COPY TO FileName [DATABASE DatabaseName [NAME LongTableName]]
[AS nCodePage]

Маленькое замечание: это СОВСЕМ не одно и то же. COPY перекодирует данные (т.е. из одной "исправной" таблицы создает другую "исправную"), а CPZERO "чинит" таблицу, в заголовке которой неправильно прописан CP (данные не трогает).
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33810975
alex_ist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал
Код: plaintext
CREATE TABLE "C:\as.dbf" (id n( 10 ), k_nb n( 2 ), hran n( 3 ), state_id n( 2 ), type_id n( 2 ), objtype c( 30 )) CODEPAGE= 1251 
Но ругается на неизвестную фразу
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33810986
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
CREATE TABLE "C:\as.dbf"  CODEPAGE= 1251 
 (id n( 10 ), k_nb n( 2 ), hran n( 3 ), state_id n( 2 ), type_id n( 2 ), objtype c( 30 )) 
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811134
alex_ist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
CREATE TABLE "C:\as.dbf"  CODEPAGE= 1251 
 (id n( 10 ), k_nb n( 2 ), hran n( 3 ), state_id n( 2 ), type_id n( 2 ), objtype c( 30 ))
Тоже не работает. Говорит, что ошибка синтаксиса
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811253
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробуй, должно получиться

Код: plaintext
1.
2.
3.
4.
5.
oConn = CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString = "provider=vfpoledb.1;;
data source= 'c:\';Mode=ReadWrite"
oConn.Open()

oConn.Execute([execscript("CREATE TABLE C:\as.dbf  CODEPAGE=1251  (id n(10), k_nb n(2), hran n(3), state_id n(2), type_id n(2), objtype c(30)) ")])
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811538
alex_ist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за execscript .
Откуда он?
Без него также ругается.
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811552
Cyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПробуй, должно получиться
Чегой-то даже в самом фоксе это не проходит, странно однако
Код: plaintext
CREATE TABLE C:\as.dbf  CODEPAGE= 1251  (id n( 10 ), k_nb n( 2 ), hran n( 3 ), state_id n( 2 ), type_id n( 2 ), objtype c( 30 ))
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811578
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_istА что за execscript .
Откуда он?
Без него также ругается.

Я не понял, последний код выполнился успешно?

Там кстати надо поправить строчку (убрать точку с запятой)

Код: plaintext
1.
2.
3.
4.
oConn = CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString = "provider=vfpoledb.1;data source= 'c:\';Mode=ReadWrite"
oConn.Open()

oConn.Execute([execscript("CREATE TABLE C:\as.dbf  CODEPAGE=1251  (id n(10), k_nb n(2), hran n(3), state_id n(2), type_id n(2), objtype c(30)) ")])

ExecScript - так и переводи "исполнить строки команд Фокса", аналог этого Pithon.
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811582
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyv авторПробуй, должно получиться
Чегой-то даже в самом фоксе это не проходит, странно однако
Код: plaintext
CREATE TABLE C:\as.dbf  CODEPAGE= 1251  (id n( 10 ), k_nb n( 2 ), hran n( 3 ), state_id n( 2 ), type_id n( 2 ), objtype c( 30 ))


Ну и какая ошибка вылезает?

PS версию Фокса приведи.
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811621
alex_ist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдается ошибка Syntax Error
Работаю через Delphi + ADO + OLE DB for VFP 8
Без CODEPAGE=1251 все отлично работает
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811626
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот оно что, скачай OLE DB for VFP 9
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811707
alex_ist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, у нас везде корпоративно использется OLE DB for VFP 8
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33811831
Cyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторверсию Фокса приведи.
Сорри, на девятке усе Ок
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33813063
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi alex_ist!

Там нельзя. И кстати AFAIK именно из-за того что у вас версия провайдера под
8-ку и возникают проблемы с кодировкой - там что-то напортачили в MS и при
некоторых условиях для экземпляра берётся жёстко CP=1252 ну и соответственно
новые таблицы получают эту CP.
Почитай на сайте Михаила Дроздова про проблемы с кодировками в 8 фоксе.
И кстати если у вас так широко используется провайдер, то может и сам фокс
имеется? Тогда проще всего на нём нарисовать простейший COM-сервер -
помошник. Скажем одним из методов которого сделать банальную строчку RETURN
EXECSCRIPT(param1) - и тогда можно исполнять скрипты/программы любой
сложности, не только то что может провайдер (а он конечно весьма ограничен в
возможностях :) )

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33813460
Alexey-M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж 1000 раз твердили миру на счет TADOQuery...
Все у него правильно. Просто забыл он ставить вместо '\' '\\'

Например так :
Код: plaintext
1.
2.
CREATE TABLE C:\\as.dbf (id n( 10 ), k_nb n( 2 ), hran n( 3 ), state_id n( 2 ), type_id n( 2 ), objtype c( 30 )) CODEPAGE= 1251 
А  лучше:
"CREATE TABLE AS.DBF (ID N(10), K_NB N(2), HRAN N(3), STATE_ID N(2), TYPE_ID N(2), OBJTYPE C(30)) CODEPAGE=1251"

Зачем C:\\as.dbf( в твоей реализации C:\as.dbf) ? Ты уже соеденился к
Data Source=' + <путь к Temp каталогу Windows> . И что это за путь к Temp каталогу Windows ? Это путь к твоему источнику.

Вот тут пример:
forum.vingrad.ru/index.php?showtopic=88025
Под 8.0 работает прекрасно.

Удачи.
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33813487
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey-M Уж 1000 раз твердили миру на счет TADOQuery...
Все у него правильно. Просто забыл он ставить вместо '\' '\\'

Например так :
Код: plaintext
1.
2.
CREATE TABLE C:\\as.dbf (id n( 10 ), k_nb n( 2 ), hran n( 3 ), state_id n( 2 ), type_id n( 2 ), objtype c( 30 )) CODEPAGE= 1251 
А  лучше:
"CREATE TABLE AS.DBF (ID N(10), K_NB N(2), HRAN N(3), STATE_ID N(2), TYPE_ID N(2), OBJTYPE C(30)) CODEPAGE=1251"

Зачем C:\\as.dbf( в твоей реализации C:\as.dbf) ? Ты уже соеденился к
Data Source=' + <путь к Temp каталогу Windows> . И что это за путь к Temp каталогу Windows ? Это путь к твоему источнику.
Вообще-то, если быть точным, то Microsoft рекомендует использовать UNC вместо имен устройств etc...
...
Рейтинг: 0 / 0
ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
    #33813518
Hex 00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Ch, вообще-то, приведите мне хоть намек на его использование в предыщущих постах.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ADO + OLEDB for Visual FoxPro + Создание DBF --> проблема
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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