Как удалить строки из dbf файла
Пожалуй, самый удобный редактор баз DBF.
CDBF для Windows с графическим интерфейсом это наиболее мощный и гибкий просмотрщик и редактор, который дает возможность работать с dbf файлами не программируя через знакомый интерфейс Windows. Эта небольшая и удобная утилита поддерживает практически все, что вам нужно для работы с dbf файлами. CDBF может просматривать и редактировать мемо поля в форматах dBase III, dBase IV, FoxPro, Visual FoxPro и dBase Level 7.
Просмотр, редактирование и исправление dbf файлов (включая мемо-поля), печать dbf таблиц и экспортирование информации в разнообразные форматы (TXT, CVS, PRG, XLS, SQL, DBF, XML). Встроенный дизайнер дает вам возможность легко и быстро создавать профессиональный отчеты, базирующиеся на информации в базе данных.
Все функции CDBF работают на порядок быстрее аналогичных программ. Уникальные возможности могут быть расширены благодаря поддержке плагинов.
Это и вьювер и редактор в одной оболочке. В отличие от различніх подобных программ, CDBF не делает различия между режимами просмотра и редактирования - и в том и другом режиме вам доступны любые операции с базой данных. Все функции программы CDBF работают быстрее аналогичных программ.
Программа также позволяет просматривать и редактировать мемо-поля в форматах dBase III, dBase IV, FoxPro и VFP. Тип мемо-полей определяется автоматически.
Небольшое описание функций программы:
Меню Файл
- Открыть
Ctrl-O, F3
Открывает существующую базу данных. Допускается открыть несколько одновременно. Если база данных уже открыта, CDBF переключит вас на окно этой базы. - Последние файлы
Показывает список недавно открывавшихся файлов. - Закрыть
Ctrl-W
Закрывает открытую базу данных. - Создать
Ctrl-N, Ctrl-F3
Создает новую базу. - Изменить структуру
Ctrl-F4
Изменяет структуру открытой базы данных. - Обновить
Ctrl-R
Проверяет количество записей, перерисовывает главное окно, переустанавливает фильтр и пересортировывает при необходимости. - Информация о полях
Shift-F2
Показывает информацию о полях базы данных и позволяет вам редактировать заголовки колонок (алиасы). - Информация о базе даных
Alt-F2
Показывает информацию о текущей базе данных. - Сохранить установки
Shift-F9
Сохраняет установки колонок, вычисляемые поля и режимы просмотра базы данных: алиасы, реверсивный режим и т.п. - Печать
Ctrl-P
Позволяет распечатать содержимое базы данных. - Выход
Alt-X, Alt-F4
Выход из программы.
Меню Вид
- Таблица
F2
Просмотр базы данных в режиме "таблица". - Поля
F2
Просмотр базы данных в режиме "поля". - Обратный порядок
Просмотр базы данных в обратном порядке. Некоторые команды не доступны в этом режиме (Удалить, Усечение и т.п.) - Алиасы
Alt-A
Показывать определенные пользователем заголовки вместо реальный имен полей. - Колонки
Alt-F9
Настройка установок полей базы данных. - Мемо
Ctrl-M
Вызвать редактор мемо полей. - Прятать удаленные записи
Ctrl-D
Прятать или показывать записи, помеченные на удаление. - Только для чтения
Включает режим только для чтения. - Ansi кодировка
F12
Устанавливает кодировку ANSI для просмотра базы данных. - OEM кодировка
F12
Устанавливает кодировку OEM для просмотра базы данных. - Кодировка заголовков
Shift-F12- Устанавливает кодировку ANSI для полей.
- Устанавливает кодировку OEM для полей.
- Панель инструментов
Показывает или прячет панель инструментов, которая включает кнопки некоторых наиболее важных команд, такие как Файл-Открыть и т.п. - Настройка панели инструментов
Позволяет настроить панель инструментов по вашему вкусу. - Панель файлов
Показывает или прячет панель файлов, которая содержит имена всех открытых в данный момент файлов и позволяет вам переключаться между ними одним кликом мыши. - Строка состояния
Показывает или прячет строку состояния, которая отображает состояние текущей базы данных и показывает некоторую информацию о базе данных.
Меню Редактирование
Меню Команды
- Добавить
F5
Добавляет пустую запись в конец базы данных.
Shift-F5 добавляет запись без запроса. - Вставить
F6
Вставляет пустую запись перед текущей записью.
Shift-F6 вставляет запись без запросов. - Удалить
F8
Удаляет текущую запись из базы данных.
Shift-F8 удаляет запись без запросов. - Упауовать все
Alt-F8
Упаковывает базу данных: удаляет записи помеченные на удаление. Упаковывается и DBF файл и файл примечаний. - Очистить
Ctrl-F8
Удаляет все записи из базы данных. - Обрезать
Ctrl-F10
Удаляет все записи после текущей до конца абзы данных. - Дублировать текущую запись.
- ДобавитьCtrl-F5
Добавляет запись в конец базы данных и копирует в нее информацию из текущей записи. - ВставитьCtrl-F6
Добавляет запись перед текущей записью и копирует в нее информацию из текущей записи.
- DBF файл
Упаковывает базу данных: удаляет записи помеченные на удаление. Упаковывается только DBF файл. - Файл примечаний
Упаковывает базу данных: удаляет неиспользуемые блоки из файла примечаний.
Меню Инструменты
- Статистика
Ctrl-F2
Суммирует данные по текущему полю. - Калькулятор
Shift-F4
Вызывает калькулятор. Для получения более полной информации смотрите секцию Калькулятор. - Сортировка
Ctrl-S
Сортирует базу данных по одному или нескольким полям. Для получения более полной информации смотрите секцию Сортировка. - Фильтр
Alt-F3
Фильтрует базу данных по заданному критерию. Для получения более полной информации смотрите секцию Фильтр. - Заполнить
Ctrl-L
Заполняет указанное поле заданным значением. Для получения более полной информации смотрите секцию Заполнить. - Экспорт
Ctrl-F9
Экспортирует записи из базы данных в другие форматы. Модули экспорта содержаться во внешних DLL; вы можете написать ваш собственный экспорт в любой формат. Для получения более полной информации смотрите секцию Экспорт. - Шифрование
Позволяет вам зашифровать, расшифровать и работать с шифрованной базой как с обычной базой. Для получения более полной информации смотрите секцию Шифрование. - Все
Позволяет вам пометить на удаление, снять пометку на удаление или инвертировать пометку на удаление для всех записей базы данных. - Группа
Позволяет вам пометить на удаление, снять пометку на удаление или инвертировать пометку на удаление для группы записей базы данных. - Добавить из
Ctrl-A
Добавляет данные из дургого DBF файла или текстового файла. Для получения более полной информации смотрите секцию Добавить из. - Редактор заголовка
Вызывает шестнадцатеричный редактор заголовка текущей базы данных. Для получения более полной информации смотрите секцию Редактор заголовка. - Шестн. панель
Показывает содержимое поля как шестнадцатеричное значение.
Хитрости
- Вы можете выбрать более одного файла в диалоге открытия файлов.
- Каждая база имеет свою собственую кодировку.
- Вы можете изменять Ansi/OEM кодировку с помощью двойного щелчка в строке статуса.
- Вы можете устанавливать или снимать пароль с помощью двойного щелчка в строке статуса.
Внимание!
При работе с файлами DBF следует помнить, что имя файла должно удовлетворять ограничению 8.3.
Внимание!
Объект xBase доступен как на стороне клиента, так и на стороне сервера. Следует продумывать клиент-серверное взаимодействие при решении каждой конкретной задачи.
Чтение файла DBF
Чтение данных из файла DBF производится за несколько последовательных этапов:
- Создание объекта XBase;
- Открытие файла;
- Последовательный перебор всех строк файла и считывание значений полей;
- Закрытие файла.
Рассмотрим этот процесс на примере:
Можно использовать несколько измененный алгоритм перебора строк файла:
Выгрузка в файл DBF
Этапы выгрузки в файл DBF:
- Создание объекта XBase;
- Указание кодировки (если не указать, то будет использоваться кодировка ANSI);
- Описание полей;
- Создание файла;
- Цикл с добавлением и заполнением строк;
- Закрытие файла.
Рассмотрим этот процесс на примере:
При указании кодировки используется тип КодировкаXBase , который может принимать два значения:
Добавление нового поля при описании структуры имеет синтаксис
Доступны следующие типы:
Работа с индексами
Совместно с файлом DBF может использоваться индексный файл, в котором может содержаться информация об одном или более индексе. Наличие индексов делает возможным использование поиска, а не только последовательного перебора всех строк файла.
При создании индексного файла следует задать:
- Перечень индексов;
- Путь сохранения индексного файла (на этапе 4 выгрузки).
Пример создания индексного файла:
Процедура добавления нового индекса имеет синтаксис:
Для использования индексов при чтении из файла DBF следует:
- Указать путь к индексному файлу (на этапе 2 загрузки);
- Задать текущий индекс.
Пример открытия файла DBF с использованием индексного файла:
Внимание!
При открытии файла DBF позиционирование происходит на первой записи в файле. Первая запись в файле не соответствует первой записи в индексе. В связи с этим при использовании индексов перед тем, как последовательно обходить строки, необходимо спозиционироваться на первой строке индекса. Это можно сделать методом Первая () , например:
Для поиска может использоваться одна из двух функций:
- Найти (< Ключ >, < Режим >) ;
- НайтиПоКлючу (< Режим >) .
В результате работы обоих функций возвращается значение с типом булево (найдена запись с указанными условиями или нет). В случае успешного поиска текущий указатель устанавливается на найденной строке. В качестве режима поиска может использоваться одно из значений:
Рассмотрим поиск в файле DBF на примерах:
Удаление записей в файле DBF
Удаление записи производится методом Удалить () :
Но при использовании этого метода запись не удаляется из файла безвозвратно, ей присваивается пометка удаления. При переборе строк помеченные на удаление записи пропускаются. Если необходимо обойти весь файл, включая помеченные на удаление записи, необходимо присвоить значение Истина свойству ОтображатьУдаленные объекта xBase. Узнать помечена запись на удаление или нет можно с помощью функции ЗаписьУдалена () . Для снятия пометки удаления используется метод Восстановить () .
Для непосредственного удаления помеченных записей используется метод Сжать () :
Если необходимо удалить все записи в файле непосредственно, то можно использовать метод ОчиститьФайл () :
Загрузка из DBF при помощи ADO
Для работы с файлами DBF может использоваться технология ADO. Драйверы ADO входят в состав операционной системы Windows и дополнительно их устанавливать не надо.
Рассмотрим пример кода для чтения из файла DBF по технологии ADO:
- Provider – это используемый драйвер;
- Data Source – путь, где находится файл DBF. Путь указывается с точностью до каталога. Имя файла используется в качестве имени таблицы в запросах;
- Extended Properties – в случае обращения к файлам DBF является обязательным параметром. Можно указать формат файла
Внимание!
Остались вопросы?
Спросите в комментариях к статье.DBF – широко распространенный формат хранения данных, появившийся в 80-х годах прошлого века. Впервые формат применялся в семействе СУБД dBase. В связи с популярностью и широким распространением dBase, было создано множество dBase-подобных программных продуктов, получивших собирательное название xBase. Несмотря на значительный возраст формата, он до сих пор достаточно широко используется. В данной статье рассматриваются способы работы с DBF из «1С:Предприятие».
В «1С:Предприятие» для работы с файлами формата DBF(версия dBase III) применяется специальный программный объект – xBase. Работа с этим объектом обычно не вызывает трудностей.
Внимание!
При работе с файлами DBF следует помнить, что имя файла должно удовлетворять ограничению 8.3.
Внимание!
Объект xBase доступен как на стороне клиента, так и на стороне сервера. Следует продумывать клиент-серверное взаимодействие при решении каждой конкретной задачи.
Чтение файла DBF
Чтение данных из файла DBF производится за несколько последовательных этапов:
- Создание объекта XBase;
- Открытие файла;
- Последовательный перебор всех строк файла и считывание значений полей;
- Закрытие файла.
Рассмотрим этот процесс на примере:
Можно использовать несколько измененный алгоритм перебора строк файла:
Выгрузка в файл DBF
Этапы выгрузки в файл DBF:
- Создание объекта XBase;
- Указание кодировки (если не указать, то будет использоваться кодировка ANSI);
- Описание полей;
- Создание файла;
- Цикл с добавлением и заполнением строк;
- Закрытие файла.
Рассмотрим этот процесс на примере:
При указании кодировки используется тип КодировкаXBase , который может принимать два значения:
Добавление нового поля при описании структуры имеет синтаксис
Доступны следующие типы:
- «N» – число;
- «S» – строка;
- «D» – дата;
- «L» – булево;
- «F» – аналогично «N» – число.
Длина поля является обязательным для типов полей «N», «F» и «S».
Работа с индексами
Совместно с файлом DBF может использоваться индексный файл, в котором может содержаться информация об одном или более индексе. Наличие индексов делает возможным использование поиска, а не только последовательного перебора всех строк файла.
При создании индексного файла следует задать:
- Перечень индексов;
- Путь сохранения индексного файла (на этапе 4 выгрузки).
Пример создания индексного файла:
Процедура добавления нового индекса имеет синтаксис:
Для использования индексов при чтении из файла DBF следует:
- Указать путь к индексному файлу (на этапе 2 загрузки);
- Задать текущий индекс.
Пример открытия файла DBF с использованием индексного файла:
Внимание!
При открытии файла DBF позиционирование происходит на первой записи в файле. Первая запись в файле не соответствует первой записи в индексе. В связи с этим при использовании индексов перед тем, как последовательно обходить строки, необходимо спозиционироваться на первой строке индекса. Это можно сделать методом Первая () , например:
Для поиска может использоваться одна из двух функций:
- Найти ( Ключ >, Режим >) ;
- НайтиПоКлючу ( Режим >) .
В результате работы обоих функций возвращается значение с типом булево (найдена запись с указанными условиями или нет). В случае успешного поиска текущий указатель устанавливается на найденной строке. В качестве режима поиска может использоваться одно из значений:
Но при использовании этого метода запись не удаляется из файла безвозвратно, ей присваивается пометка удаления. При переборе строк помеченные на удаление записи пропускаются. Если необходимо обойти весь файл, включая помеченные на удаление записи, необходимо присвоить значение Истина свойству ОтображатьУдаленные объекта xBase. Узнать помечена запись на удаление или нет можно с помощью функции ЗаписьУдалена () . Для снятия пометки удаления используется метод Восстановить () .
Для непосредственного удаления помеченных записей используется метод Сжать () :
Если необходимо удалить все записи в файле непосредственно, то можно использовать метод ОчиститьФайл () :
Загрузка из DBF при помощи ADO
Для работы с файлами DBF может использоваться технология ADO. Драйверы ADO входят в состав операционной системы Windows и дополнительно их устанавливать не надо.
Рассмотрим пример кода для чтения из файла DBF по технологии ADO:
В приведенном примере используется строка подключения «Provider=Microsoft.Jet.OLEDB.4.0;Data Source= «D:»;Extended Properties=DBASE III». В этой строке:
- Provider – это используемый драйвер;
- Data Source – путь, где находится файл DBF. Путь указывается с точностью до каталога. Имя файла используется в качестве имени таблицы в запросах;
- Extended Properties – в случае обращения к файлам DBF является обязательным параметром. Можно указать формат файла
Внимание!
При чтении указанным способом кодировка по-умолчанию – OEM. Для того, чтобы изменить кодировку на ANSI необходимо в реестре Windows присвоить параметру HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftJet4.0EnginesxBaseDataCodePage значение «ANSI».
Остались вопросы?
Спросите в комментариях к статье.PressDev
Все об IT
Свежие записи
- Уведомляем пользователей о подтверждении комментариев WordPress
- Создаем бесплатно качественный логотип для сайта
- Запрещаем доступ к сайтам с локального компьютера
- Идентифицируем старые записи WordPress и уведомляем об этом пользователей
- Как сделать перенаправление страницы в WordPress
- Плагины для создания слайдеров и слайдшоу на WordPress
- Сбрасываем графический пароль на Android-устройстве
- Google Hangouts теперь и на рабочем столе
- Google отменяет PageRank навсегда
- Доступна бета-версия темы Twenty Fifteen
Свежие комментарии
- Дмитрий к записи Сохраняем и открываем DBF-файлы в Excel 2007 и 2010
- Мирон к записи Уменьшаем или увеличиваем количество выводимых тегов WordPress
- DuavidkeK к записи Что такое лиды в интернет-маркетинге?
- Елена к записи Получаем бесплатно инвайт для социальной сети PostPR
- Mixkino к записи Запрещаем доступ к сайтам с локального компьютера
Удаление дублирующих записей в DBF-файлах
Всем привет дорогие друзья. Тут столкнулся с такой проблемой, когда необходимо было мне удалить все повторяющие (дублирующие) записи в DBF-файле. Данную проблему я хотел решить без использования различных подключений и SQL-запросов, то есть без программирования и мне удалось ее решить.
Для этих целей я использовал всем известный Microsoft Office, а именно мне понадобился только лишь Microsoft Excel. Запускаем наш табличный процессор (Excel) и сразу же открываем в нем наш DBF-файл.
После того, как Вы открыли в Excel наш DBF-файл, необходимо определиться с полем, в котором будут повторяющие записи (дублирующие). Можно выбрать несколько полей, не обязательно одно. В итоге, на данном этапе, у нас получиться следующее:
Все, затем сохраняете файл и наслаждаетесь, что у Вас чистый файл, при этом Вы не использовали никакие запросы, языки программирования и так далее, только подручные средства. Кстати, хочется сказать, что сохранение из MS Excel 2007 и 2010 в DBF-файл – убрали (через Файл-Сохранить как…), поэтому, если у Вас версия ниже 2007, то вы сохраните без проблем, если версия 2007 и 2010, то я Вам расскажу в следующей статье, как в данных версиях можно сохранять очень просто и быстро в DBF-файлы.
Да, не забудьте прочитать статью о том, как можно поменять кодировку OEM на ANSI в DBF. Теперь Вы знаете, как удалить дубли в DBF-файле. Удачи Вам и до новых встреч!
Отзывы о программе Редактор DBF
Елена про Редактор DBF 1.75.1 [02-11-2020]
Я вообще не могу разобраться, как это программа работает.
| | ОтветитьАнтон про Редактор DBF 1.75.1 [01-02-2019]
Отличная программа. WinDbfView зависал надолго и вообще зависал в работе с файлами около 2 ГБ. Это программа справилась в считанные минуты.
2 | 2 | ОтветитьВладимир про Редактор DBF 1.75.1 [01-02-2018]
Александр про Редактор DBF 1.75.1 [14-12-2017]
Подскажите по работе в редакторе. Я заполнил строку и как перейти на другую
7 | 20 | ОтветитьИрина про Редактор DBF 1.75.1 [20-07-2017]
Программа супер! Спасибо,очень помогли.
3 | 2 | ОтветитьАнна Цокур про Редактор DBF 1.75.1 [05-07-2017]
работает, смог добавить 2 новых столбца, большего мне и надо было
отлично, даже под wine
2 | 6 | ОтветитьОлег про Редактор DBF 1.75.1 [14-06-2016]
Не понимает квадратные скобки в именах полей таблицы
Моментально вылетает при открытии файла с большим массивом данных (280 строк по 50 полей)
Дальше не тестил, удалил
2 | 3 | ОтветитьСергей про Редактор DBF 1.75.1 [13-12-2015]
Тупее проги еще не видел, не создает как надо, и даже ошибки не выдает просто возращает к исходнику и всё!!
3 | 5 | ОтветитьЯрослав про Редактор DBF 1.75.1 [07-10-2015]
Как удалить лишнюю строку в таблице? помогите(
9 | 5 | Ответитьhippelalex в ответ Ярослав про Редактор DBF 1.75.1 [02-12-2015]
hippelalex в ответ Ярослав про Редактор DBF 1.75.1 [02-12-2015]
Удобная, быстрая и простая программка. Спасибо!
Только не понял, как фильтровать по пустому значению? :(((
2 | 2 | ОтветитьАлександр про Редактор DBF 1.75.1 [09-06-2014]
Людддиии помогите. Что за красный фон во всей таблице. как убрать
Aleksandr про Редактор DBF 1.75.1 [27-11-2013]
Kotavr про Редактор DBF 1.75.1 [23-10-2013]
На xp открыл файл dbf, который не смог открыть с помощью DBF View-ера и кстати он на русском языке
2 | 3 | ОтветитьTi про Редактор DBF 1.75.1 [10-10-2013]
Абсолютно порадовал п.7 лицензионного соглашения)))) С удовольствием согласилась)))
2 | 2 | ОтветитьNV t про Редактор DBF 1.75.1 [22-05-2013]
По-моему , отличная программка, лично мне помогла вытянуть dbf-отчеты, Excel 2007 не смогла.
2 | 2 | Ответитьsss про Редактор DBF 1.75.1 [15-03-2013]
нифига не понятно много кнопок не активны
2 | 2 | Ответитьfashyk про Редактор DBF 1.75.1 [20-11-2012]
програма работает-но ничево не понятно, а нужна витягнуть прайс с бдф
2 | 2 | Ответитьплохо работает с кодировками
3 | 2 | ОтветитьКак удалить строку в DBF файле?
Разработчик Offline Client
Размер файла остаётся прежним потому, что нужно ещё выполнить сжатие базы. В DAO это метод CompactDatabase, в ADO нужно подключить ещё Microsoft Jet and Replication Objects X.X Library.
Вечный Юзер!
ICQ: [email protected]
Этого тебе могут не позволить. Например тот-же safe_updates.
Вечный Юзер!
ICQ: [email protected]
ICQ: 3132838
Оно самое, читал про такое, спасиб за наставление!
Господа, прошу простить мне моё незнание, но без объяснения на пальцах чувствую здесь не обойтись , у меня есть recordset подключенный к вышеуказанному файлу, куда его подставить ума не приложу, ежели пишу допустим:
оно ессесно ругается на последнюю строчку. Что в моем случае подставлять на место Table1? Направьте на путь истинный, где копать?
Ps. Прошу не отсылать меня читать умные книжки ибо сейчас такой возможности нет, спасибо за ответ!
Вечный Юзер!
ICQ: [email protected]
ICQ: 3132838
PS. При подключении через ADODC использую строку подключения(Connection string) может здесь чего?
Вечный Юзер!
ICQ: [email protected]
Подобные команды выполняются в ADO через
Вечный Юзер!
ICQ: [email protected]
ICQ: 3132838
Как удалить строку в DBF файле?
Первые 32 байта (00..31) заголовка DBF-файла описывают глобальные параметры, относящиеся ко всей таблице. Непосредственно за этим описанием следуют определения полей. Ниже в двух таблицах подробно рассмотрена структура заголовка DBF-файла.
По адресу 0x0032 (см. предыдущую таблицу 32..nn) начинаются определения полей (колонок) таблицы. Каждое определение занимает 32 байта. В следующей таблице описывается структура определения одного поля. Все определения следуют одно за другим без каких-либо разделителей.
По адресу 0x0008 (см. первую таблицу 08..09) хранится адрес начала области самих записей с данными таблицы dBASE. Каждая запись начинается с байта признака удаления. Если первый байт записи содержит значение 0x20 (символ пробела), то запись считается рабочей (не удалённой) и при запросах выдаётся пользователю. Когда пользователь удаляет запись (или набор записей), то для экономии времени и повышения быстродействия запись физически не удаляется, она просто помечается как удалённая. В первый байт записи (признак удаления) записывается значение 0x2A (символ «звёздочка»). Чтобы избавиться от записей, помеченных на удаление, нужно сделать паковку таблицы. Для этого, например, в среде FoxPro или Visual FoxPro существует команда PACK. Эта команда удаляет записи, помеченные «звёздочкой», физически. После этой процедуры файл становится меньше, отсюда и название: паковка.
В конце файла за последней записью данных записывается ещё один байт — байт завершения файла, его значение всегда 0x1A. Всегда, да не всегда. На следующих двух рисунках отображены два файла с одними и теми же данными открытые в HexEdit (шестнадцатеричный редактор). Посмотрите внимательно и сравните.
Рис. 1 — Пример DBF-файла в формате FoxPro 2.x Рис. 2 — Пример DBF-файла в формате Visual FoxPro 9
Два основных отличия:
- 263-х байтный блок у FoxPro 2.x dBase III просто отсутствует
- в Visual FoxPro 9 отсутствует байт завершения файла 0x1A
Ну действительно, зачем в FoxPro 2.x 263-х байтный блок, если FoxPro не поддерживает базу данных. В FoxPro 2.x этот блок всегда будет пустым. Хотя его можно организовать и всё прекрасно будет работать. Главное чтобы позиция первой записи данных была правильно определена — байты 08..09 в заголовке. Обратите внимание смещение позиции первой записи записано как бы «задом наперёд». Например, если первая запись начинается со смещения 0x01A8, то в заголовке в ячейках 08..09 сначала записан старший байт значения 0xA8, а потом младший — 0x01 (на рис 2. в этом можно убедиться). Почему? Это уже другая тема. Так исторически сложилось. (Если интересно, обратитесь к какому-нибудь пособию по ASSEMBLER, например, есть очень хорошая книга Питера Абеля «Язык Ассемблера для IBM PC и программирования». Прочитав первые две главы, я уверен, всё встанет на свои места!)
А вот почему у Visual FoxPro отсутствует завершающий байт 0x1A, честно говоря, мне не понятно. Узнал об этом чисто случайно. Причём, если его установить принудительно, Visual FoxPro сочтёт это ошибкой и не откроет такой файл. Так что в Visual FoxPro последний байт в файле — суть последний байт последней записи данных. Вот собственно и всё! Ниже показано как Visual FoxPro 9 отображает эти два примера в режиме BROWSE.
Рис. 3 — Окно VFP 9 в режиме BROWSE
Чёрный маркер (прямоугольник) слева на второй записи означает, что запись помечена на удаление. Посмотрите на рис. 2 по адресу 0x01DB установлена «звёздочка» (значение 0x2A). На рис. 1 та же запись начинается по адресу 0x00D4.
проставляет, если команда употреблена без опций, пометку удаления текущей записи или записей таблицы, отвечающих указанным в опциях значениям.
Опции и параметры команды описаны в табл. 1.7.
Записи, имеющие пометку удаления, физически не удаляются. Эту операцию выполняет команда PACK. Записи, удаленные командой PACK или ZAP, восстановлены быть не могут.
Пометку удаления можно снять. Это действие производится командой RECALL.
Пример. Из таблицы Authors удаляются все авторы, для которых в таблице BooksAuthors не указаны произведения.
&& Учитываем при поиске в Books также и записи с пометкой удаления
set deleted off
&& Перебираем записи таблицы Authors
&& Проставляем пометку удаления текущей записи таблицы Authors
&& Просматриваем записи с пометкой удаления
browse last for Deleted( ) save
Возможный результат приведен на рис. 15.7.
Рис. 15.7. Записи с пометкой удаления
Тот же результат можно получить, заменив цикл одной командой:
delete for Empty(Lookup(BooksAuthors.AuthorId, ;
AuthorId, ;
BooksAuthors.AuthorId, ;
"AuthorId")) in AuthorsКоманда DELETE – SQL
DELETE [Target]
FROM [FORCE] Table_List [[, Table_List . ] | [JOIN [ Table_List]]]
[WHERE FilterCondition1 [AND | OR FilterCondition2 . ]]проставляет пометку удаления записей указанной таблицы, отвечающим заданным условиям.
Смысл опций и параметров см. в описании команды UPDATE – SQL.
Число записей, получивших пометку удаления, заносится в системную переменную _TALLY.
В отличие от DELETE команда DELETE – SQL в процессе своего выполнения осуществляет блокировку записей таблицы. Это уменьшает уровень конфликтов в многопользовательском режиме, но может привести к снижению производительности. Наибольшая скорость достигается, когда таблица открыта монопольно или когда она заблокирована функцией FLOCK( ).
Пример 1.
delete from Authors where Authors.AuthorId > 50
Пример 2 (приводится в справке VFP). Пометку удаления получают все записи курсора MyProducts, отвечающие условию PriceList.ProdId = MyProducts.ProdId and PriceList.Discontinued.
close databases all
create cursor MyProducts (ProdId I , OurPrice Y NULL)
insert into MyProducts values (1, 1.10)
insert into MyProducts values (2, 2.20) && Получит пометку удаления
insert into MyProducts values (3, 3.30) && Получит пометку удаления
create cursor PriceList (ProdId I, ProdCategory I NULL, Price Y, Discontinued L)
insert into PriceList values (1, 9, 1.00, .F.)
insert into PriceList values (2, 8, 2.00, .T.)
insert into PriceList values (3, 7, 3.00, .T.)
where PriceList.ProdId = MyProducts.ProdId ;
RECALL [Scope] [FOR lExpression1] [WHILE lExpression2]
[NOOPTIMIZE] [IN nWorkArea | cTableAlias]снимает пометки удаления записей выбранной таблицы.
Опции и параметры команды описаны в табл. 1.7.
Пример. Снимается пометка удаления с записей таблицы Authors, для которых InputDate < .
set deleted off
recall for InputDate <
PACK [MEMO] [DBF] [Tablename ] [IN nWorkarea | cTableAlias]
удаляет все записи, имеющие пометку удаления, текущей или указанной таблицы и соответствующие данные memo-файла (FPT-файла), ассоциированного с таблицей. После упаковки размеры таблицы и memo-файла уменьшаются (если они содержали записи с пометкой удаления).
Опции и параметр:
MEMO – удаляет данные memo-файла, относящиеся к записям, имеющим пометку удаления; сами же помеченные записи в таблице сохраняются.
DBF – удаляет записи с пометкой удаления, сохраняя данные memo-файла.
Если опции MEMO и DBF опущены, то выполняется упаковка и FPT- и DBF-файлов.
Tablename – задет имя сжимаемой таблицы. VFP открывает указанную таблицу, упаковывает и затем закрывает. Если таблица уже открыта, то будет сгенерирована ошибка.
При упаковке VFP копирует записи, не имеющие пометку удаления, во временную таблицу. После завершения процесса копирования VFP удаляет исходную таблицу с диска и переименовывает временную таблицу, давая ей имя исходной. Если процесс упаковки прервать клавишей ESC, то удаляется временная таблица, а исходная сохраняется. Также она сохраняется, если в процессе работы PACK обнаружена недостача свободной памяти на диске.
Команда PACK может быть выполнена, если таблица открыта для монопольного доступа. Такой режим открытия таблицы задается либо в команде USE, либо в результате установки команды SET EXCLUSIVE в ON.
Все открытые индексы таблицы, подвергаемой упаковке, перестраиваются во время выполнения команды PACK.
Записи, удаленные командой PACK, пропадают навечно.
ZAP [IN nWorkArea | cTableAlias]
удаляет все записи таблицы, оставляя лишь ее структуру.
Действие команды эквивалентно выполнению команд
но ZAP работает гораздо быстрее.
Если SET SAFETY установлен в ON, то пользователю придется подтвердить свои намерения.
Читайте также:
- ДобавитьCtrl-F5