Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DBF-файл: программное изменение его структуры. / 18 сообщений из 18, страница 1 из 1
26.02.2021, 19:59
    #40049106
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
До сегодняшнего дня приходилось программировать
работу с DBF-файлами при помощи Visual Studio 2010 Ultimate
(из-под Windows XP SP3):
- через присоединение (Linked Table) - чтение данных при помощи ADOX/ADODB
(MS ACCESS 2003) или Linked Server (MS SQL SERVER);
- через OLEDB - чтение / INSERT / UPDATE / DELETE.

И тут вдруг понадобилось программно менять структуру DBF-файла:
- добавлять поля;
- менять параметры поля. Например, изменить разрадность поля типа Numeric.
и т.д. и т.п.

Вопросы:
- Какие библиотеки нужно оспользовать в Visual Studio 2010 Ultimate,
чтобы добиться нужного результата ?
- Если этого нельзя сделать при помощи Visual Studio 2010 Ultimate,
то с помощью каких сред программирования это можно сделать.
В INTERNET-е много готовых десктоп Windows-приложений для работы с
DBF-файлами, но они меня не устраивают. А к старине CLIPPER-у и к
старушке FoxPro так не хочется возвращаться ...

Спасибо.
...
Рейтинг: 0 / 0
26.02.2021, 20:03
    #40049107
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
SQL поизучай. ALTER TABLE ...
...
Рейтинг: 0 / 0
26.02.2021, 20:22
    #40049110
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Dima T
SQL поизучай. ALTER TABLE ...


Через OLEDB ?
Для DBF-файла в команде ALTER TABLE наверно есть какие-то нюансы ?
...
Рейтинг: 0 / 0
26.02.2021, 21:34
    #40049120
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Vakho
Dima T
SQL поизучай. ALTER TABLE ...


Через OLEDB ?
Для DBF-файла в команде ALTER TABLE наверно есть какие-то нюансы ?


Да.

В Unsupported Visual FoxPro Commands and Functions in OLE DB Provider нет Alter table.

Синтаксис почти MS SQL
...
Рейтинг: 0 / 0
26.02.2021, 22:16
    #40049123
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
PaulWist
Vakho
пропущено...


Через OLEDB ?
Для DBF-файла в команде ALTER TABLE наверно есть какие-то нюансы ?


Да.

В Unsupported Visual FoxPro Commands and Functions in OLE DB Provider нет Alter table.

Синтаксис почти MS SQL


Я не понял "Да" к чему относится.
...
Рейтинг: 0 / 0
26.02.2021, 23:59
    #40049135
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
VakhoЯ не понял "Да" к чему относится.

Vakho

Через OLEDB ?


Да.
...
Рейтинг: 0 / 0
27.02.2021, 20:55
    #40049255
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Vakho
Dima T
SQL поизучай. ALTER TABLE ...


Через OLEDB ?
Для с-файла в команде ALTER TABLE наверно есть какие-то нюансы ?

Откуда инфа что DBF это FoxPro? Это не так
...
Рейтинг: 0 / 0
01.03.2021, 10:41
    #40049476
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Тип файла определяется по значению нулевого (физически самого первого) байта файла DBF. FoxPro использовал следующие значения

0x02 FoxBASE
0x03 FoxBASE+/Dbase III plus, нет memo
0x30 Visual FoxPro
0x31 Visual FoxPro, поддержка свойства autoincrement
0x32 Visual FoxPro, поддержка полей типа Varchar, Varbinary, или Blob
0x43 dBASE IV SQL табличный файл, нет memo
0x63 dBASE IV SQL системный файл, нет memo
0x83 FoxBASE+/dBASE III PLUS, с memo
0x8B dBASE IV с memo
0xCB dBASE IV SQL табличный файл, с memo
0xF5 FoxPro 2.x (или младше) с memo
0xFB FoxBASE

Посмотрите, какое значение в нулевом байте у Ваших таблиц DBF. Если значение не из этого списка, то это не таблица FoxPro

Следует еще иметь в виду, что если Вы будете изменять структуру DBF, то может автоматически произойти изменение 0 байта заголовка DBF в соответствии с новой структурой или из-за использованного драйвера. Как следствие, либо из Visual Studio перестанет открываться таблица, либо из приложения, где используется этот DBF станет невозможна работа с ним

Для Visual FoxPro 9 был выпущен драйвер OLE DB (VfpOleDB.dll). Его можно использовать для изменения структуры таблиц. Но с учетом выше сказанного. Для младших версий FoxPro был только драйвер ODBC, а его для изменения структуры таблиц использовать нельзя.
...
Рейтинг: 0 / 0
01.03.2021, 11:18
    #40049484
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
ВладимирМ,
У меня DBF-файлы, сделанные при помощи CLIPPER в 1995г.

С данными в них работаю через OLEDB ( System.Data.OleDb ,
Visual Studio 2010 Ultimate ) при помощи SQL-запросов типа
SELECT, INSERT, UPDATE, DELETE.
Теперь вот понадобился ALTER TABLE ...
...
Рейтинг: 0 / 0
01.03.2021, 11:39
    #40049492
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Пока что с ALTER TABLE ничего не выходит.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   ' Создаем объект "соединение" с базой данных.
    Conn = New OleDbConnection(ConnectionString)
   
   ' Создаем объект команду.
    cmd = Conn.CreateCommand
    cmd.CommandText = "ALTER TABLE MATER ALTER COLUMN COD_MAT Numeric(6,0)"

    Try
      Conn.Open() ' Подключение к базе данных.
      Try ' Исполнение команды.
        cmd.ExecuteNonQuery()
      Catch e As OleDbException
         .....



Система сообщает: "Operation is not supported for this type of object."
...
Рейтинг: 0 / 0
01.03.2021, 12:12
    #40049503
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Строка соединения:
Код: vbnet
1.
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\G_APTEKA\;Extended Properties=dBASE IV
...
Рейтинг: 0 / 0
01.03.2021, 12:52
    #40049520
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
1. Ну, так Вы и получили сообщение, что этот драйвер не может использовать ALTER TABLE. Не поддерживает такие команды
2. Надо искать специализированный драйвер для Clipper, если такой вообще есть. В 1995 году с OLE DB мало кто связывался, а со старшими версиями возможны другие проблемы

На всякий случай, структура DBF для Clipper отличается от структуры для FoxPro. Совпадение тоже есть, но для "базовых" структур. Т.е. когда количество полей, количество символов в поле меньше определенного значения. С индексами будет беда, если они есть по изменяемым полям. В общем, использовать не "родные" драйверы для модификации структур таблиц или прямое изменение на низком уровне крайне не рекомендуется.

Возможно, Вам проще будет сделать какое-то приложение на Clipper для изменения структуры и запускать это приложение из Visual Studio
...
Рейтинг: 0 / 0
01.03.2021, 13:08
    #40049521
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
ВладимирМ,
Я посмотрел в нулевой байт файла.
Там, в соответствии с вашей таблицей:
0x03 FoxBASE+/Dbase III plus, нет memo

Вобщем, грустно, конечно.
Мне нужно пробежаться по сотне DBF-файлов, найти
в них определённые числовые поля и увеличить из разрядность.
Вручную при помощи имеющихся приложений сделать это нереально.
...
Рейтинг: 0 / 0
01.03.2021, 13:15
    #40049523
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Попробуй CREATE TABLE с новой структурой и перелить туда данные.
...
Рейтинг: 0 / 0
01.03.2021, 13:17
    #40049524
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Или скачай фокс, немного поизучай и напиши на нем. Строк 10 кода.
...
Рейтинг: 0 / 0
01.03.2021, 13:29
    #40049528
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Или спросить в форуме по C# , раз уж на нем пишешь, может там что подскажут.
Тема к фокспро не имеет никакого отношения.
...
Рейтинг: 0 / 0
01.03.2021, 14:15
    #40049543
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
Vakho
ВладимирМ,
Я посмотрел в нулевой байт файла.
Там, в соответствии с вашей таблицей:
0x03 FoxBASE+/Dbase III plus, нет memo

Вобщем, грустно, конечно.
Мне нужно пробежаться по сотне DBF-файлов, найти
в них определённые числовые поля и увеличить из разрядность.
Вручную при помощи имеющихся приложений сделать это нереально.


Если речь идет только об увеличении размерности поля типа NUMERIC, то FoxPro, теоретически, не должен изменить значение нулевого байта, поскольку остается корректная структура с точки зрения этой версии DBF. Но могут быть проблемы с индексами, поскольку в FoxPro индексы строились по другому чем в Clipper

Т.е. можно попробовать использовать драйвер OLE DB для VFP9, если поля не использовались в индексах

Хотя, конечно, сама по себе задача странная. Менять структуру таблиц некоего приложения из-вне этого самого приложения. Даже если все будет сделано корректно, то не факт, что само приложение не сломается. Мало ли, может в нем какие-то ограничения по длине поля "зашиты" напрямую в коде
...
Рейтинг: 0 / 0
01.03.2021, 14:54
    #40049557
Vakho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF-файл: программное изменение его структуры.
ВладимирМ,
Попробуем на копии. "Попытка - не пытка" ©
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DBF-файл: программное изменение его структуры. / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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