Работа с DBF файлами с помощью библиотеки gsdbquery.dll
Работа с DBF-файлами в Гедымине By Alexandra Для работы с DBF в Гедымине используется класс gsdb_rpQueryList, создаваемый средствами VBScript (обязательно должен быть установлен BDE): set gsql = CreateObject("gsdbquery.gsdb_rpQueryList") Дальше все очень похоже на IgsQueryList (к которому принадлежит BaseQueryList).
Методы Add(QueryName: String; MemQuery: Integer): Integer Добавляет объект IgsDBQuery с именем QueryName в список запросов, возвращает его индекс в списке (начиная с 0). MemQuery может иметь значения 0 и 1.
Если MemQuery = 0, то данные хранятся в объекте класса TQuery. Значит, добавленный IgsDBQuery может выполнять SQL-запросы.
Если же MemQuery = 1, данные хранятся в объекте класса TClientDataSet. В него можно добавлять поля и вставлять записи (см BaseQueryList). (И вряд ли кому-нибудь на практике это понадобится).
Clear Очищает список IgsDBQuery’в
Delete(Index: Integer) Удаляет IgsDBQuery с индексом Index. Индексы всех следующих за ним в списке запросов уменьшаются на 1 (см пример в BaseQueryList).
DeleteByName(AName: String) Удаляет запрос с именем AName из списка
Свойства Count: Integer Количество IgsDBQuery’в в списке
Query (Index: Integer): IgsDBQuery Возвращает IgsDBQuery по индексу в списке
QueryByName(Name: String): IgsDBQuery Возвращает IgsDBQuery по имени в списке.
После добавления нового IgsDBQuery с параметром MemQuery = 0 его можно использовать для создания файла DBF:
set gsql = CreateObject("gsdbquery.gsdb_rpQueryList")
set qryDoc = gsql.Query(gsql.Add("qryDoc", 0))
qryDoc.SQL = "CREATE TABLE '" + _
FileName + "'" + _
"(" +_
" FIELD1 CHAR(5), " + _
" FIELD2 DATE, " + _
" FIELD3 NUMERIC(5)," + _
" FIELD4 NUMERIC(5, 3), " + _
" FIELD5 BOOLEAN " + _
" )"
qryDoc.ExecSQL
qryDoc.Close
Здесь FileName – полный путь к файлу. Если такой файл существует – получим ошибку. Поэтому предварительно нужно проверить, существует ли файл с таким именем, и, например, удалить его. Тип NUMERIC(5, 3) означает, что размер поля – 5, из них 3 знака после запятой.
Можно вставлять записи в DBF. Пусть поля записи, которые нужно вставить в DBF, найдены с помощью q (TIBSQL):
qryDoc.SQL = _ "INSERT INTO '" + FileName + "'" + _ "(FIELD1, FIELD2, FIELD3, FIELD4, FIELD5) " + _ "VALUES" + _ "(:FIELD1, :FIELD2, :FIELD3, :FIELD4, :FIELD5) "
qryDoc.ParamByName("FIELD1").AsString = _
q.FieldByName("FIELD1").AsString
qryDoc.ParamByName("FIELD2").AsVariant = _
q.FieldByName("FIELD2").AsDateTime
qryDoc.ParamByName("FIELD3").AsFloat = _
q.FieldByName("FIELD3").AsDouble
qryDoc.ParamByName("FIELD4").AsFloat = _
q.FieldByName("FIELD4").AsDouble
qryDoc.ParamByName("FIELD5").AsInteger = _
q.FieldByName("FIELD5").AsInteger
qryDoc.ExecSQL
Параметры могут иметь тип AsInteger, AsFloat, AsString, AsVariant. Для булевых полей можно использовать AsInteger, для даты – AsVariant.
Делать выборку из DBF можно тоже через IgsDBQuery. qryDoc.SQL = _
“SELECT * FROM ‘” + _
FileName + “’” + _
“WHERE FIELD3 = :fld3”
qryDoc.ParamByName(“fld3”).As Float = 3 qryDoc.Open ‘ а не ExecSQL
Также можно удалять записи из DBF.