Работа с DBF файлами через ADO

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(При помощи 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
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты