{codecitation class="brush: pascal; gutter: false;" width="600px"}
Оформил: DeeCo
Автор: Иванов Денис Михайлович
Данная статья
Подвигло меня
Надеюсь, что те сведения, которые
Причины перехода
Итак, чтобы было понятно что
Итак, для хранения атрибутивной информации был выбран формат MS Access, который
Вышел MS Access 2000.
2.
var
AStream: TBLOBStream;
Data: Integer;
begin
// Открываем таблицу (обычный TTable)
ATable.Open;
//
AStream:= TBLOBStream (ATable.CreateBLOBStream (ATable.FieldByName ('Поле')));
//
AStream.Read (Data, SizeOf (Data));
// Освобождаем поток
AStream.Free;
ATable.Close;
end;
Казалось
Плюс
Так что, господа, если Вы используете нечто подобное
Итак, этих двух причин оказалось достаточно для нашей фирмы, чтобы начать переход
ADO
— Учитель, почему
— Твой отец…
— С определенной точки зрения?
— Люк…
(Звездные войны. Эпизод 6.)
К чему
Итак, прежде всего, работа была ограничена условием разработки
ADO была взята
Итак, возьмем файл mdb формата MS Access 97.
Object_ID
Object_Description Text
Введем туда
А теперь давайте, вообразим себя пользователями
Ага. Интересно,
В данном случае мы
Что здесь интересного?
А пока мы
В результате
А вот почему
Ну
Проблемы закладок нет
'Recordset.Bookmark: Устанавливает или возвращает закладку, которая однозначно определяет текущую запись
После того как все заработало,
Итак, для нормальной работы
ADO
Итак,
Попробуем это сделать.
После примерно недельных поисков
Строка коннекта для этого случая будет выглядеть так:
{'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;
Extended Properties = dBase 5.0;
Mode = Read|Write|Share Deny None;
Persist Security Info = True';}
И это все. Самое интересное
Чтобы знать, что конкретно для разных форматов надо писать
HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\ISAM Formats
Там перечислены все поддерживаемые
После опытов над форматом dbf оказалось, что все выше сказанное для формата mdb совершенно
А вот формат
Хорошо, запускаем справку по MS Jet SQL
CREATE INDEX имя_индекса on название_таблицы (название_поля)with PRIMARY.
ALTER TABLE название_таблицы ADD CONSTRAINT имя_ограничения PRIMARY
KEY (название_поля)
Все далее сказанное абсолютно одинаково для обоих вариантов.
Предположим, что наша таблица называется ExpTbl.db
CREATE INDEX My_Index ON ExpTable (InternalID) WITH PRIMARY
Запустим
Неправильных символов нет, синтаксис правильный, длина названия ключа тоже нормальная.
Вывод
Исправляем SQL:
CREATE INDEX ExpTable ON ExpTable (InternalID) WITH PRIMARY
Запускаем,
Чтобы никто больше мучился
Для того, чтобы Вы имели возможность производить действия по добавлению, удалению записей или редактированию данных
Первичный ключ должен быть определен для первых 'n' полей таблицы.
Вы
Первый создаваемый для таблицы уникальный индекс будет создан как
Первичный ключ может быть создан для таблицы только
Действия по добавлению или удаления полей
Кстати, по моему опыту удалить однажды созданный первичный ключ для таблицы невозможно.
Итак, для работы через ADO
То,
Для добавления данных
Смотрим файл справки MS
SELECT поле_1[, поле_2[, …]]INTO новаяТаблица[in внешняяБазаДанных]
FROM источник
Ладно, пробуем. Пусть
SELECT * INTO[TestTable.DB] in 'D:\' FROM SourceTable
Нет, очередная ошибка. Вот, что
Ага, хорошо, давайте попробуем указать таблицу
SELECT * INTO[TestTable] in 'D:\ TestTable.DB' FROM SourceTable
Получим очередное сообщение
Ага, стало быть, файл для экспорта должен уже существовать? Ладно,
Ну,
SELECT * INTO[Paradox 7. x; DATABASE = D: \]. [TestTable#0DB]FROMSourceTable
Создавать таблицу
Единственная
Самое потрясающее это название раздела MSDN, где
Вот,
При написании статьи использовались следующие материалы:
Материалы Королевства Delphi.
Справочные файлы Delphi
Исходные коды
MS ADO SDK
{/codecitation}