Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

Дополнение от Mark Ostroff (Borland):

В дополнение к ИЗУМИТЕЛЬНОМУ ответу Richard'а, пожалуйста помните об одной ОЧЕНЬ важной вещи… НИКОГДА не допускайте ситуации (в ЛЮБОЙ сети), при которой вы имеете нескольких пользователей, имеющих доступ к одним и тем же таблицам, но использующих разные физические NET-файлы. Это создает ОГРОМНЫЕ проблемы, особенно в в корпоративных и peer-to-peer сетях.

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

Единственный способ изменить размер поля или его тип — использовать DBIDoRestructure. Вот простой пример, который может вам помочь в этом:

function BDEStringFieldResize(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;

 with ATable do try

{убедимся
что имеем исключительный доступ и сохраним dbhandle:}

if Active and (not Exclusive) then Close;

if (not Exclusive) then Exclusive := True;

if (not Active) then Open;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) наше поле:}

for i:=1 to CurPrp.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);

{в случае отсутствия операций возбуждаем исключение:}

case eRestrStatus of

rsNothingToDo:

raise Exception.Create('Ничего не сделано');

rsFieldNotFound:

raise Exception.Create('Поле не найдено');

Поделиться:
Популярные книги

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Газлайтер. Том 14

Володин Григорий Григорьевич
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 14

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.00
рейтинг книги
Ермак. Телохранитель

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Идеальный мир для Лекаря 19

Сапфир Олег
19. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 19

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV

Идеальный мир для Лекаря 22

Сапфир Олег
22. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 22

Попаданка в академии драконов 4

Свадьбина Любовь
4. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.47
рейтинг книги
Попаданка в академии драконов 4

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад