Работа с DBF файлами через ADO
SYSDBA (обсуждение | вклад) (→При помощи ADO) |
SYSDBA (обсуждение | вклад) м (переименовал «Работа с DBF-файлами» в «Работа с DBF файлами через ADO») |
Версия 16:09, 10 марта 2011
Файлы DBF представляют собой таблицы файловой базы данных dBase. Часто используются для передачи данных от одного приложения к другому.
С использованием библиотеки gsdbquery.dll
Создание списка датасетов:
set gsql = CreateObject("gsdbquery.gsdb_rpQueryList")
Создание датасета и указание пути расположения файла DBF:
set qryDBF = gsql.Query(gsql.Add("qrydbf", 2)) qryDBF.Database = Path
Запрос к файлу DBF:
qryDBF.SQL = _ " SELECT " & _ " t.kod_plat, t.debet, t.kredit " & _ " FROM '" & _ Filename & "' t " & _ " ORDER BY " & _ " t.kod_plat " qryDBF.Open qryDBF.First do while not qryDBF.Eof FieldValue = qryDBF.FieldByName(“FIELDNAME”).AsString qryDBF.Next loop qryDBF.Close
При помощи ADO
Драйвер ADO уже встроен в систему Windows, и дополнительно устанавливать его не нужно. Он представляет собой всего лишь удобную Active-X оболочку для доступа к данным, которую можно использовать почти из любых языков и сред программирования.
Тот же самый драйвер ADO можно применять для доступа к самым разным источникам данных (например, к базе Oracle), с небольшими отличиями в строке подключения. Строки подключения для разных источников данных можно найти здесь: http://www.connectionstrings.com/
Создание подключения:
set ADOConnection = CreateObject("ADODB.Connection") call ADOConnection.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & FilePath & ";" & _ "Extended Properties=""dBASE IV;"";")
где FilePath – путь к папке с файлом DBF
Создание объекта-комманды:
set ADOCommand = CreateObject("ADODB.Command") ADOCommand.ActiveConnection = ADOConnection
Выполнение запроса и получение результата:
ADOCommand.CommandText = " SELECT COUNT(*) as c_all FROM [" & Filename & "]" set ADODataset = ADOCommand.Execute
Запрос на создание таблицы в папке указанной в подключении:
ADOCommand.CommandText = " CREATE TABLE NEW.DBF (kod_plat CHAR(4), debet decimal(10), kredit decimal(10))" ADOCommand.Execute
Пример работы:
' Создадим подключение к файлу DBF set ADOConnection = CreateObject("ADODB.Connection") call ADOConnection.Open("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=d:\;") ' Создадим объект ADODB.Command и подключим его к файлу DBF set ADOCommand = CreateObject("ADODB.Command") ADOCommand.ActiveConnection = ADOConnection ' Запрос на получение всех данных файла ADOCommand.CommandText = " SELECT * FROM [" & Filename & "]" set ADODataset = ADOCommand.Execute ADODataset.MoveFirst do while not ADODataset.EOF if ADODataset.Fields.Item("DEBET").Value = ADODataset.Fields.Item("KREDIT").Value then call MsgBox("Нулевое сальдо") end if ADODataset.MoveNext loop ' Закрыть подключение ADOConnection.Close
Схема используемых классов:
Connection = class методы: BeginTrans: Integer Cancel Close CommitTrans Execute(CommandText: String; RecordsAffected: Variant; Options: Integer): _Recordset Open(ConnectionString: String; UserID: String; Password: String; Options: Integer) OpenSchema(Schema: Integer(перечисление); Restrictions: Variant; SchemaID; Variant): _Recordset RollbackTrans свойства: Attributes: Integer CommandTimeout: Integer ConnectionString: String ConnectionTimeout: Integer CursorLocation: Integer(перечисление) DefaultDatabase: String Errors: Errors IsolationLevel: Integer(перечисление) Mode: Integer(перечисление) Properties: Properties Provider: String State: Integer Version: String
Command = class методы: Cancel CreateParameter(Name: String; Type: Integer(перечисление); Direction: Integer(перечисление); Size: Integer(перечисление); Value: Variant): Variant Execute(RecordsAffected: Variant; Parameters: Variant; Options: Integer): _Recordset свойтва: ActiveConnection: _Connection CommandStream: Variant CommandText: String CommandTimeout: Integer CommandType: Integer(перечисление) Dialect: String Name: String NamedParameters: Boolean Parameters: unknown Prepared: Boolean Properties: Properties State: Integer
Recordset = class методы: _xClone: _Recordset _xResync(AffectRecords: Integer(перечисление)) _xSave(FileName: String; PersistFormat: Integer(перечисление)) AddNew(FieldList: Variant; Values: Variant) Cancel CancelBatch(AffectRecords: Integer(перечисление)) CancelUpdate Clone(LockType: Integer(перечисление)): _Recordset Close CompareBookmarks(Bookmark1: Variant; Bookmark2: Variant): Integer(перечисление) Delete(AffectRecords: Integer(перечисление)) Find(Criteria: String; SkipRecords: Integer(перечисление); SearchDirection: Integer(перечисление); Start: Variant) GetRows(Rows: Integer; Start: Variant; Fields: Variant): Variant Move(NumRecords: Integer(перечисление); Start: Variant) MoveFirst MoveLast MoveNext MovePrevious NextRecordset(RecordsAffected: Variant): _Recordset Open(Source: Variant; ActiveConnection: Variant; CursorType: Integer(перечисление); LockType: Integer(перечисление); Options: Integer) Requery(Options: Integer) Resync(AffectRecords: Integer(перечисление); ResyncValues: Integer(перечисление)) Save(Destination: Variant; PersistFormat: Integer(перечисление)) Seek(KeyValues: Variant; SeekOption: Integer(перечисление)) Supports(CursorOptions: Integer(перечисление)): Boolean Update(Fields: Variant; Values: Variant) UpdateBatch(AffectRecords: Integer(перечисление)) свойства: AbsolutePage: Integer(перечисление) AbsolutePosition: Integer(перечисление) ActiveCommand: IDispatch ActiveConnection: Variant BOF: Boolean Bookmark: Variant CacheSize: Integer Collect: Variant CursorLocation: Integer(перечисление) CursorType: Integer(перечисление) DataMember: String DataSource: Неопределен EditMode: Integer(перечисление) EOF: Boolean Fields: _Fields Filter: Variant Index: String LockType: Integer(перечисление) MarshalOptions: Integer(перечисление) MaxRecords: Integer(перечисление) PageCount: Integer(перечисление) PageSize: Integer Properties: unknown RecordCount: Integer(перечисление) Sort: String Source: Variant State: Integer Status: Integer StayInSync: Boolean
Fields = class методы: _Append(Name: String; Type: Integer(перечисление); DefinedSize: Integer(перечисление); Attrib: Integer(перечисление)) Append(Name: String; Type: Integer(перечисление); DefinedSize: Integer(перечисление); Attrib: Integer(перечисление); FieldValue: Variant) CancelUpdate Delete(Index: Variant) Refresh Resync(ResyncValues: Integer(перечисление)) Update свойства: Count: Integer Item(Index: Variant): _Field default
Field = class методы: AppendChunk(Data: Variant) GetChunk(Length: Integer): Variant свойства: ActualSize: Integer(перечисление) Attributes: Integer DataFormat: Неопределен DefinedSize: Integer(перечисление) Name: String NumericScale: Unsigned char OriginalValue: Variant Precision: Unsigned char Properties: unknown Status: Integer Type: Integer(перечисление) UnderlyingValue: Variant Value: Variant
Properties = class методы: Refresh свойства: Count: Integer Item(Index: Variant): Property default
Property = class свойства: Attributes: Integer Name: String Type: Integer(перечисление) Value: Variant