Навигация сайта

  • Главная
  • Статьи
  • Учебники
  • Программы
  • Друзья сайта
Программирование access в delphi

Можно ли отлавливать событие "Добавление новой записи" в БД Access, если
новую запись в таблицу добавляет другой пользователь?
В моем варианте ниже при добавлении новой записи события не возникает,
возникает оно только если вызывать Requery() для recordset, получаемого с
помощью CreateRecordSet, что в общем то и хотелось бы делать уже просыпаясь
по событию. Что я делаю не так?

Код

TMyClass = class(TInterfacedObject, RecordsetEventsVt)
private
...
FEventsID: integer;
protected
...
{ RecordsetEventsVt }
// здесь объявление функций интерфейса RecordsetEventsVt
...
function RecordChangeComplete(adReason: EventReasonEnum; cRecords: Integer;
const pError: ADODB_TLB.Error; var adStatus: EventStatusEnum;
const pRecordset: Recordset15): HResult; stdcall;
public
...
function CreateRecordSet: ADODB_TLB.Recordset;
procedure AddRecord(Value1, Value2: String);
end;

...
function CreateADOObject(const ClassID: TGUID): IUnknown;
var
Status: HResult;
FPUControlWord: Word;
begin
asm
FNSTCW  FPUControlWord
end;
Status := CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IUnknown, Result);
asm
FNCLEX
FLDCW FPUControlWord
end;
if (Status = REGDB_E_CLASSNOTREG) then raise Exception.CreateRes(@SADOCreateError)
else OleCheck(Status);
end;

function TMyClass.RecordsetChangeComplete(adReason: EventReasonEnum;
const pError: ADODB_TLB.Error; var adStatus: EventStatusEnum;
const pRecordset: Recordset15): HResult;
begin
...
Result := S_OK;
end;

function TMyClass.CreateRecordSet: ADODB_TLB.Recordset;
var
ICPC: IConnectionPointContainer;
ICP: IConnectionPoint;
begin
Result := CreateADOObject(CLASS_Recordset) as ADODB_TLB._Recordset;
OleCheck(Result.QueryInterface(IConnectionPointContainer, ICPC));
OleCheck(ICPC.FindConnectionPoint(DIID_RecordsetEvents, ICP));
OleCheck(ICP.Advise(Self as IUnknown, FEventsID));
Result.Open('table1', FCnn, adOpenKeyset, adLockReadOnly, adCmdTable);
end;

procedure TMyClass.AddRecord(Value1, Value2: String);
var
rst: ADODB_TLB._Recordset;
begin
rst := CreateADOObject(CLASS_Recordset) as ADODB_TLB._Recordset;
rst.Open('table1',FCnn,adOpenForwardOnly,adLockOptimistic,adCmdTableDirect);
rst.AddNew(EmptyParam,EmptyParam);
rst.Fields[1].Value := Value1;
rst.Fields[2].Value := Value2;
rst.Update(EmptyParam,EmptyParam);
rst.Close;
rst := nil;
end;

...

 

Техническая поддержка и аудит сайта.

    • где купить фрукты из тайланда
    • fruitique.ru