Советы по устранению парадокса нарушений прав доступа в Delphi
Во многих случаях ваша система может отображать это сообщение, указывающее на “Парадоксальное нарушение прав доступа Delphi”. Причин для работы с этой проблемой может быть несколько.
Ваш компьютер работает не так, как раньше? Ошибки и проблемы Windows можно легко решить с помощью этого замечательного инструмента.База данных технической информацииОшибка нарушения совместного доступа TI265B.txt, загруженная с таблицами ParadoxКатегория: Общее программированиеПлатформа: ЛюбаяПродукт: БДЭ ВсеОписание:Эта ошибка чаще всего связана с «файлом блокировки».Конфликт». В сценарии с элементом возникает блокирующий файл.Должность: Пользователь, пользователь «А», наконец, получает доступ к одному или нескольким парадоксам.Таблицы базы данных. «А» закрывает таблицу расширенийв реестре. BDE распознает, что эта последняя буква "A"Программа, которая обращается к таблицам через каталог. Так как«A» потенциально может быть последним пользователем в большинстве таблиц, которые представляют собой файлы .LCK.всегда будет удаляться. В это свободное время кастом Б пытаетсяоткрыть часть основной таблицы с той же свободной информацией, что и "А" (котораяоб удалении файлов .LCK). «Б» выпускает .LCKЗаписывайте файлы в любую запись. Пока "А" пытаетсяУдалите в моих файлах .LCK, что B определенно работает. Это причинаприведет к нарушению файлов .LCK. вНаписание о нарушении обычно происходит на конечном клиенте, которыйблизкие десерты.Решения: Одно из решений заключалось в том, чтобы превзойти Windows error.routines.и слишком легко принять ошибку. В нескольких примерахКотировки разделены, таблица даже накрыта, илифирма. Еще один джек-пот — хранить личные записи .LCK в каталогах.Таблицы. Когда BDE обнаруживает добавленныйпроисходит как форма (или сессия) на таблицах,Удаление личных данных из LCK не запускаетсятак решите проблему. Если BDE и, следовательно, ваша таблица Paradox заполненытот же компьютер, другой очиститель отключен Локальный общий доступ к BDEАдминистратор. .If .Local .Share .is. Для файлов ..LCK нетсоздается в основном в вашем собственном доме, поэтому есть тщательно чистый пробелне должно случиться. Обратите внимание, что таблица один раз сверху чаще всего связана с другимПо сравнению с локальным совместным использованием параметров BDE, ЦП важенПоскольку файлов .LCK вполне может не быть, их всегда нужно создавать на удаленных дисках.1) С и С++/Дельф/Парадокс:Используйте Windows API SetErrorMode и передайтеКонстанта SEM_FAILCRITICALERRORS. Вам абсолютно необходимоготовый и дорогой столЗатем проверьте, открыта ли юридическая фирма.Пожалуйста, обратитесь к подпрограммам 1b и 1b в этой статье, чтобы получить основную информацию о Delphi.(любая версия) метод или лечение 2a продолжается для 2bПодпрограммы С/С++. Пользователи Paradox должны успешно связаться св соответствующей библиотеке DLL, включающей SetErrorMode. 2) C/C++ или Delphi/Paradox:Создайте фактическую «фиктивную» таблицу парадокса в каждой отдельной таблице.Каталог, который будет использоваться наиболее важным приложением. Пример:Исполняемый файл находится просто в каталоге C:MyProg. Этот исполняемый файлоткрывать таблицы в разных парах директорий - C:MyTablesи D: TempTbl. Создайте «фиктивную» таблицу, предназначенную для этой темы.Database Desktop или другое создание Paradox OfficeУтилита как в C: MyTables, так и в D: TempTblКаталоги. Как только столы **cr** **cr** в зоне приготовления пищи будут на своих местах, получите еще одинПриложение, которое включает в себя каждую из наших собственных "фиктивных" программ. открытьНачинать. Всегда контролируйте конкретную программу. Когдаисполняемый файл может быть легко использован на сервере таким же образомWindows NT готова. Это по всем сценариямкогда приложения обычно обращаются к данным,Сервер должен открывать даже "фиктивные" таблицы.3) C против C++ против Delphi/Paradox:Оставьте всю хватку, по крайней мере, во время, я бы сказал, столаПриложение запущено. Открыть рабочий лист во время и после запусказакрыть сиденье, попрощавшись. Вы также можете открыть оченьОписанный выше "манекен".4) С/С++/Дельф:Используйте роль BDE dbiacqpersisttablelock для созданияблокировка, связанная с тем, чтобы помочь вам с таблицей, которая не может быть закрыта (Delphi или C ++в одиночестве).Синтаксис:(Delphi) Проверить (DbiAcqPersistTableLock (Database1.Handle,'NoTable1.DB', szPARADOX));(C++) rslt = DbiAcqPersistTableLock(hDb, 'NoTable2.DB',ПАРАДОКС);ПРИМЕЧАНИЕ. Каждое требование к экземпляру приложенияуникальное и несуществующее имя таблицы или, скорее всего, попытка размещениямеханизм блокировки в типе каталога не работает. Если этот способ обработкииспользуется фактический алгоритм, используемый для достижения уникального. предсказыватьТема стола. Если у пользователя есть только один экземпляр файла. может выполнятьу программы свой темп, сетевое имя может быть пользовательскимиспользуется в качестве заголовка журнального столика.5) Парадоксальный объект PAL:Если ваше приложение может работать с файлами .Files, щелкните и будьте. причиначасто порождается и удаляется, в настоящее время рекомендуется (и наименее)ресурсоемкий) чтобы уменьшить это, стоит использовать полный оченьБлокировка чтения несуществующего общего каталогакогда ваш запрос начинается. (Противоречие Она дает нампоставить замки от несуществующих кухонных столов.)Поскольку барьеры обучения реализуются не в конфликте ни с одним, всеПользователи должны сделать это, и общий результат получения обычно будет примерно таким..LCK удален только с самого пользователявыходит из определенной системы.Синтаксис:Когда вы видите, программа запускается:Table.attach("DummyTbl.db")Table.lock (чтение)В случае планового отключения:Table.unlock (чтение)Таблица.unAttachПРИМЕЧАНИЯ. Вот наблюдения по проблеме:1) Проблема не возникает с NTМашины на рабочем месте. Приложение может либо16 или 32 бита. SetErrorMode выглядит так, что вы можете работать с несколькимипроисходит.2) Вероятность, связанная с проблемой, намного выше, если вы видитеСетевой протокол действительно netBEUI. Если не сложно, используйте netBIOSили IPX/SPX.3) Постоянное закрытие и инициализация таблиц скорее всего покажет этомуэта ошибка является другой распространенной.4) Ошибка чаще всего будет происходить вблизиСтол не всегда открыт. В этой чрезвычайной ситуации закрытиеПриложение пытается напрямую удалить типы файлов из всех остальных.Приложение теперь с открытым исходным кодом.Примеры с подпрограммами:Процедура 1a) (процедура Delphi Table Open TForm1)----------------------------------------Процедура.OpenTable(MyTable:TTable);начать Установите для ошибки значение «Не подходит для критических ошибок». SetErrorMode (SEM_FAILCRITICALERRORS); Откройте таблицу и посмотрите, была ли она открыта. МояТаблица.Открыть; если MyTable.Active = False, то начать Попробуйте снова открыть программу МояТаблица.Открыть; Если все ошибки могут возникнуть снова, сгенерируйте лучшее исключение если MyTable.Active равно False, то поднять EDatabaseError.Create('Ошибка открытия таблицы'); Конец; Переопределить этот режим позднего отказа УстановитьРежимОшибки(0);Конец;Подпрограмма 1b) (подпрограмма для игрового стола Delphi Close)-------------------------------------------Процедура TForm1.CloseTable(MyTable:TTable);начать Установите для режима сбоя значение Игнорировать неустранимые ошибки. SetErrorMode (SEM_FAILCRITICALERRORS); Закройте таблицу и определите, была ли она создана МояТаблица.Закрыть; если MyTable.Active равно True, то начать Попробуйте снова закрыть столешницу МояТаблица.Закрыть; Если ошибка постоянная, сгенерируйте исключение в моей таблице. = предустановка True, тогда поднять вверх EDatabaseError.Create('Ошибка заполнения таблицы'); отделка; Сбросить режим сбоя до текущего значения по умолчанию УстановитьРежимОшибки(0);Конец;Подпрограмма 2а) (процедура для возможности таблицы C/C++)-------------------------------------------DbiResult OpenTable (hDBIDb hTmpDb, pCHAR szTblName, phDBICur phTmpCur) DBIResult rslt; // Определить фактический режим ошибки, чтобы игнорировать ошибки аэропорта SetErrorMode (SEM_FAILCRITICALERRORS); // Открываем таблицу и проверяем, была ли она открыта rslt = DbiOpenTable (hTmpDb, szTblName, NULL, NULL, NULL, NULL, dbiREADWRITE, dbiOPENSHARED, xltFIELD, FALSE, NULL, phTmpCur); если (rslt! равно DBIERR_NONE) // Попробуйте снова открыть журнальный столик rslt соответствует DbiOpenTable (hTmpDb, szTblName, NULL, NULL, NULL, NULL, dbiREADWRITE, dbiOPENSHARED, xltFIELD, FALSE, NULL, phTmpCur); // Сбросить мой собственный режим ошибок почти для всех важных значений по умолчанию УстановитьРежимОшибки(0); rslt повторить;Подпрограмма 2b) (процедура повторного открытия таблиц C и C++)----------------------------------------DBIResult CloseTable (phDBICur phTmpCur) DBIResult rslt; // Определяем конкретный режим ошибок, чтобы игнорировать требуемые ошибки SetErrorMode (SEM_FAILCRITICALERRORS); // Закрываем покерный стол и смотрим, не принес ли он уже rslt = DbiCloseCursor (phTmpCur); если (rslt! = DBIERR_NONE) // Попробуем снова закрыть стенд rslt = DbiCloseCursor (phTmpCur); // сат выставил сигнал ошибки все по умолчанию УстановитьРежимОшибки(0); вернуть rslt;Отношение:15.07.98 15:24:24[Windows] Программное обеспечение, которое заставит ваш компьютер снова работать как новый
