Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как отследить, занят ли файл другим приложением
|
|||
|---|---|---|---|
|
#18+
У меня такая проблема: средствами SQL-сервера нужно делать выборку в .dbf файлах я пытаюсь это реализовать используя Linked Server но бывают ситуации, когда .dbf файл эксклюзивно занят другим пользователем, другим приложением - Как в таком случае я могу отследить это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2001, 10:09 |
|
||
|
Как отследить, занят ли файл другим приложением
|
|||
|---|---|---|---|
|
#18+
на сайте http://www.gvu.newmail.ru/ Уфимцев Глеб выложил пример "Создание Extended Stored Procedure для MSSQL средствами Delphi". на его основе, используя функцию _lopen можно проверять состояние любого файла. XPSMPDLL.DPR: --------------------------------- library XPSMPDLL; uses SysUtils, Classes, Windows; {Заголовки API, которые нам понадобятся в примере} function srv_paraminfo(srv: pointer; num: Integer; var typ, maxlen, len: Integer; data: pointer; var isnull: boolean): Integer; cdecl; external 'Opends60.dll' name 'srv_paraminfo'; function srv_sendmsg(srv: pointer; msgtype: Integer; msgnum: Integer; severity_class: byte; state: byte; rpcname: pchar; rpcnamelen: Integer; linenum: word; message_str: pchar; msglen: Integer): Integer; cdecl; external 'Opends60.dll' name 'srv_sendmsg'; {возвращает первый параметр - имя файла (с полным путем)} function GetFileName(srv: pointer): string; var Typ, MaxLen, Len: Integer; IsNull: boolean; Data: pointer; begin GetMem(Data, 255); try srv_paraminfo(srv, 1, Typ, MaxLen, Len, Data, IsNull); SetLength(Result, Len); MoveMemory(pointer(Result), Data, Len); finally FreeMem(Data); end; end; {Собственно, сама расширенная хранимая процедура} function xpMain1(srv: pointer): Integer; cdecl; var FileName: string; AFile: HFILE; begin FileName := GetFileName(srv); AFile := _lopen(PChar(FileName), OF_READ or OF_SHARE_EXCLUSIVE); if AFile <> HFILE_ERROR then begin _lclose(AFile); srv_sendmsg(srv, 1, 0, 0, 0, nil, 0, 0, 'Файл не занят', -1); Result := 1; {Все OK, т.е. SUCCEED} end else begin srv_sendmsg(srv, 2, 0, 16, 1, nil, 0, 0, 'Файл эксклюзивно занят другим пользователем', -1); Result := 0; {Дело FAIL, т.е. хреново} end; end; exports xpMain1 name 'xpSample'; begin end. --------------------------- set nocount on DECLARE @Result int DECLARE @Catalog varchar(12 CREATE TABLE #tTable (CATALOG_NAME sysname, DESCRIPTION nvarchar(255)) insert into #tTable exec sp_catalogs 'DBDEMOS' select TOP 1 @Catalog = CATALOG_NAME from #tTable Set @Catalog = @Catalog + '©lients.dbf' EXECUTE @Result = master..xpSample @Catalog --@Result = 1 - OK --@Result = 0 - Fail DROP table #tTable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2001, 15:55 |
|
||
|
Как отследить, занят ли файл другим приложением
|
|||
|---|---|---|---|
|
#18+
А у DTS-паккейджов джобы могут завязываться друг на друга. Причем, можно сделать так, что Job2 будет выполняться только при успешном выполнении Job1 (в котором можешь попытаться открыть DBF-файл). И никаких изворотов через расширенные процедуры. Или тебе нужно в онлайне с клиента на все это завязаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2001, 16:03 |
|
||
|
Как отследить, занят ли файл другим приложением
|
|||
|---|---|---|---|
|
#18+
Да, мне действительно нужно это реализовать в онлайне и с использованием SP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2001, 07:37 |
|
||
|
Как отследить, занят ли файл другим приложением
|
|||
|---|---|---|---|
|
#18+
Можно проще поступить, чтобы долго не мудрить. Достаточно попытаться переименовать файл через xp_cmdshell. Если удалось, значит, не залочен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2001, 08:03 |
|
||
|
Как отследить, занят ли файл другим приложением
|
|||
|---|---|---|---|
|
#18+
Можно, конечно, но .dbf-ка всего то 17 метров....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2001, 10:41 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1826634]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 394ms |

| 0 / 0 |
