Pdox DOS версии 4.0 использует ту же BDE-схему работы с сетью, что и таблицы Paradox. Необходимо учесть несколько важных моментов:
1. Убедитесь в том, что у вас включена опция BDE Local Share, если вы создаете таблицы с общим доступом для приложений Pdox DOS и BDE.
2. Из-за странного поведения при работе с сетевыми каталогами, пути в файле контроля сети Pdox DOS у ваших пользователей должны быть ИДЕНТИЧНЫ BDE путям (например, тот же каталог И та же буква диска). Это должно быть сделано в случае, если и Pdox DOS, и BDE делают общими одни и те же таблицы и запущены ОБА приложения. Это может создать некоторые проблемы с установкой peer-to-peer сетей.
3. Убедитесь в том, у вас выключена опция BDE Strict Integrity, если вы создаете таблицы с общим доступом для приложений Pdox DOS и BDE. В противном случае BDE заблокирует пользователей Pdox DOS для редактирования данных в таблицах Paradox (в любом каталоге), у которых установлена опция целостности данных (Referential Integrity).
4. Убедитесь в том, что номер версии Paradox, имеющийся в настройках BDE, совместим с OLDEST версией Pdox DOS для использования в вашей сети. Установить ее можно, выбрав соответствующий драйвер Paradox в BDE Config Utility и проверив значение в поле LEVEL. Установите номер версии Pdox DOS, округлив его до ближайшего МЕНЬШЕГО целого числа.
Единственный способ изменить размер поля или его тип — использовать DBIDoRestructure. Вот простой пример, который может вам помочь в этом:
functionBDEStringFieldResize(ATable: TTable; AFieldName: string; ANewSize: integer): boolean;
type TRestructStatus = (rsFieldNotFound, rsNothingToDo, rsDoIt);
var
hDB: hDBIdb;
pTableDesc: pCRTblDesc;
pFldOp: pCROpType; {фактически это массив array of pCROpType}
pFieldDesc: pFldDesc; {фактически это массив array of pFldDesc}
CurPrp: CurProps;
CSubType: integer;
CCbrOption: CBRType;
eRestrStatus: TRestructStatus;
pErrMess: DBIMsg;
i: integer;
begin
Result := False;
eRestrStatus := rsFieldNotFound;
AFieldName := UpperCase(AFieldName);
pTableDesc := nil;
pFieldDesc := nil;
pFldOp := nil;
withATable do try
{убедимся что имеем исключительный доступ и сохраним dbhandle:}
ifActive and( notExclusive) thenClose;
if( notExclusive) thenExclusive := True;
if( notActive) thenOpen;hDB := DBHandle;
{готовим данные для DBIDoRestructure:}
BDECheck(DBIGetCursorProps(Handle,CurPrp));
GetMem(pFieldDesc,CurPrp.iFields*sizeOf(FldDesc));
BDECheck(DBIGetFieldDescs(Handle,pFieldDesc));
GetMem(pFldOp,CurPrp.iFields*sizeOf(CROpType));
FillChar(pFldOp^,CurPrp.iFields*sizeOf(CROpType),0);
{ищем в цикле (через fielddesc) наше поле:}
fori:=1 toCurPrp.iFields do begin
{для ввода мы имеем серийные номера вместоPdox ID, возвращаемых DbiGetFieldDescs:}
pFieldDesc^.iFldNum := i;
if(Uppercase(StrPas(pFieldDesc^.szName)) = AFieldName) and(pFieldDesc^.iFldType = fldZSTRING) then begin
eRestrStatus := rsNothingToDo;
if(pFieldDesc^.iUnits1 <> ANewSize) then begin
pFieldDesc^.iUnits1 := ANewSize;
pFldOp^ := crModify;
eRestrStatus := rsDoIt;
end;
end;
inc(pFieldDesc);
inc(pFldOp);
end; {for}
{"регулируем" массив указателей:}
dec(pFieldDesc,CurPrp.iFields);
dec(pFldOp,CurPrp.iFields);
{в случае отсутствия операций возбуждаем исключение:}
caseeRestrStatus of
rsNothingToDo:
raiseException.Create('Ничего не сделано');
rsFieldNotFound:
raiseException.Create('Поле не найдено');
end;
GetMem(pTableDesc,sizeOf(CRTblDesc));
FillChar(pTableDesc^,SizeOf(CRTblDesc),0);
StrPCopy(pTableDesc^.szTblName,TableName);
{StrPCopy(pTableDesc^.szTblType,szPARADOX); {}
pTableDesc^.szTblType := CurPrp.szTableType;
pTableDesc^.iFldCount := CurPrp.iFields;
pTableDesc^.pecrFldOp := pFldOp;
pTableDesc^.pfldDesc := pFieldDesc;
Close;
BDECheck(DbiDoRestructure(hDB, 1, pTableDesc, nil, nil, nil, False));
finally
ifpTableDesc <> nil thenFreeMem(pTableDesc,sizeOf(CRTblDesc));
ifpFldOp <> nil thenFreeMem(pFldOp, CurPrp.iFields*sizeOf(CROpType));
ifpFieldDesc <> nil thenFreeMem(pFieldDesc, CurPrp.iFields*sizeOf(FldDesc));
Open;
end; {пробуем с table1}
Result := True;
end;
Reinhard Kalinke
Изменение конфигурации IDAPI
Возможно ли установить параметр MAXFILEHANDLES в IDAPI.CFG посредством Delphi?
Да. Следующий компонент показывает как это можно сделать (а также изменить другие параметры):
Читать дальше