Проблема обнаружена под операционной системой Windows 2000 SP3, в среде Delphi6, Delphi7 (скорее всего не зависит от версии Delphi) с использованием Microsoft Jet DB Engine версия 4, SP3.

Некоторый, вполне типичный, код заполнения запроса в процессе выполнения вызывает Access Violation, притом, что согласно документации все должно работать корректно.

Пример кода:

Допустим, есть база данных в MS Access 2000, имеющая таблицу main и в ней целочисленное (INT) поле id в качестве главного ключа. Так же есть компонент ADOQuery1: TADOQuery, для доступа к базе данных. Максимальное значение поля id может быть получено следующим кодом:
Читать полностью…

//How to retrieve all database tables with ADO

unit dbTables;

interface

uses ADODb;

type
TTableType = (ttTable, ttView, ttSynonym, ttSystemTable, ttAccessTable);
Читать полностью…

Автор: de1phi | в 10:22 | Рубрики: ADO

В оконных приложениях инициализацию COM берет на себя строка в файле проекта:

Application.Initialize;

А вот в DLL и консольных программах обэекта Application нет, и при попытке работать с любыми ActiveX, включая широко используемые ADO компоненты генерится ошибка, которую исправить очень просто: достаточно в секцию Uses в DPR файле добавить модуль oleauto

Автор: de1phi | в 10:22 | Рубрики: ADO

Итак, хочу поделиться некоторыми достижениями… так на всякий случай. Если у вас вдруг потребуется сделать в своей программке доступ к базе данных, а BDE использовать будет неохота (или невозможно) - то есть довольно приятный вариант: использовать ActiveX Data Objects. Однако с их использованием есть некоторые проблемы, и одна из них это как передавать Optional параметры, которые вроде как можно не указывать. Однако, если вы работаете с ADO по-человечески, а не через тормозной IDispatch.Invoke то это превращается в головную боль. Вот как от нее избавляться:
Читать полностью…

Автор: de1phi | в 10:22 | Рубрики: ADO

CONECT_STR=’Provider=Microsoft.Jet.OLEDB.4.0;Password=” ” ;User ID=Admin;’+{Data Source=D:\ExBd\ТЕРМО\Bd0.mdb;}
‘Data Source=%s; Mode=Read|Write|Share Deny None;Extended Properties=” ” ;’+
‘Locale Identifier=1049;Persist Security Info=True;Jet OLEDB:System database=” ” ;’+
‘Jet OLEDB:Registry Path=” ” ;Jet OLEDB:Database Password=” ” ;Jet OLEDB:Engine Type=4;’+
‘Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;’+
‘Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=” ” ;’+
‘Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;’+
‘Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False’;

function TdmR3.GetCountForPeriod(LastDate: TDateTime; IsPlan: boolean): Integer;
var qu: TADOQuery;
S: String;
begin
qu:=TADOQuery.Create(nil);
try
S:=FormatDateTime(’dd.mm.yy’,LastDate);
qu.ConnectionString:=WideString(Format(CONECT_STR,[db_file]));
qu.SQL.Text:=’select count(*) from DecadaVal as d where d.LastDate=:LastDate and IsPlan=:IsPlan’;
qu.Parameters[0].Value:=LastDate;
qu.Parameters[1].Value:=IsPlan;
qu.Open;
Result:=qu.Fields[0].AsInteger;
finally
qu.Free;
end;
end;