Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

блокировка таблица   Найти похожие ветки 

 
Kein ©   (2004-03-05 15:42) [0]

люди, почему когда я делаю LockTable(ltReadLock), то всё равно могу читать данные из таблицы?


 
Vlad ©   (2004-03-05 15:50) [1]

А что говорит хелп по этому поводу ? :-)


 
Johnmen ©   (2004-03-05 15:51) [2]

Что же здесь не так ?
:)


 
Reindeer Moss Eater ©   (2004-03-05 15:51) [3]

А как должно быть по твоему?


 
Kein ©   (2004-03-05 15:53) [4]

2Vlad
говорит должно блокирнуться.
ещё вопрос: это дело блокирует таблицу на уровне файла или как?
скажем так - кто после такой блокировки не должен иметь к таблице доступа?


 
Vlad ©   (2004-03-05 15:54) [5]


> говорит должно блокирнуться.

Вот прям так и говорит ? :)))

Читаем внимательно
ltReadLock Other applications (or sessions) can not read from the table.


 
Kein ©   (2004-03-05 15:56) [6]

2Vlad
хорошо, давай ка я опубликую текст двух юнитов(два потока читают) и  запусти их у себя. а потом расскажи читается у тебя из другого потока или нет,ok?


 
Johnmen ©   (2004-03-05 15:58) [7]

>Kein ©   (05.03.04 15:56) [6]

В хелпе ни слова о потоках !!!


 
Vlad ©   (2004-03-05 15:59) [8]

Давно бы уж привел код.
Только можно я у себя запускать не буду ? :-)


 
Kein ©   (2004-03-05 16:01) [9]

2Johnmen
но для каждого потока должна быть отдельная сессия от  неё то блокируется
ltReadLock Other applications (or sessions) can not read from the table.
или я не прав?


 
Vlad ©   (2004-03-05 16:02) [10]


> Kein ©   (05.03.04 16:01) [9]

Ну наверное для того чтобы в потоке была отдельная сессия, ее нужно самому создать в этом потоке ? :-)


 
Johnmen ©   (2004-03-05 16:03) [11]

>Kein ©   (05.03.04 16:01) [9]

У тебя в каждом потоке своя сессия ?


 
Anatoly Podgoretsky ©   (2004-03-05 16:04) [12]

В справке ни о каких сессия речи не идет
Requesting a read lock prevents other applications from reading a table.


 
Kein ©   (2004-03-05 16:04) [13]

юнит раз

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Grids, DBGrids, Db, DBTables, Unit2, StdCtrls;

type
 TForm1 = class(TForm)
   Table1: TTable;
   DataSource1: TDataSource;
   DBGrid1: TDBGrid;
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 NewThread : TDBThread;
 S : TSession;
 T : TTable;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Form1.Table1.LockTable(ltReadLock);
 Form1.Table1.LockTable(ltWriteLock);
 S := TSession.Create(self);
 T := TTable.Create(self);
 NewThread := TDBThread.Create(S,T);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 NewThread.Suspend;
 NewThread.Destroy;
 Table1.Active := true;
 Table1.UnlockTable(ltReadLock);
 Table1.UnlockTable(ltWriteLock);
end;

end.

юнит два

unit Unit2;

interface

uses
 Classes, DBTables, SysUtils;

type
 TDBThread = class(TThread)
 private
   FThreadSession : TSession;
   FThreadTable : TTable;
 protected
   procedure Execute; override;
 public
   constructor Create(Session : TSession; Table : TTable); virtual;
   destructor Destroy; override;
 end;

implementation

uses
 Unit1;

constructor TDBThread.Create(Session : TSession; Table : TTable);
begin
 inherited Create(true);
 FThreadSession := Session;
 FThreadTable := Table;
 Resume;
end;

destructor TDBThread.Destroy;
begin
 FThreadSession.Free;
 FThreadTable.Free;
 inherited;
end;

procedure TDBThread.Execute;
var
 str1, str2 : string[10];
begin
 str1 := "";
 str2 := "";
 FThreadSession.SessionName := "1";
 FThreadTable.DatabaseName := "DBDEMOS";
 FThreadTable.TableName := "Animals.dbf";
 FThreadTable.SessionName := FThreadSession.SessionName;
 FThreadTable.Active := true;
 str1 := Form1.Table1.FieldByName("NAME").AsString;
 str2 := FThreadTable.FieldByName("NAME").AsString;
end;

end.


 
Kein ©   (2004-03-05 16:05) [14]

2Vlad
я сессию вручную создаю, в этом всё идело


 
Kein ©   (2004-03-05 16:09) [15]

кто-нибудь попоробовал, есть предложения?


 
Kein ©   (2004-03-05 16:09) [16]

кто-нибудь попоробовал, есть предложения?


 
Vlad ©   (2004-03-05 16:10) [17]


> Anatoly Podgoretsky ©   (05.03.04 16:04) [12]

в справке по TLockType об этом сказано


 
Kein ©   (2004-03-05 16:13) [18]

2Vlad
ты посмотрел код?что можешь сказать?


 
Vlad ©   (2004-03-05 16:21) [19]


> Kein ©   (05.03.04 16:13) [18]

где экземпляр TDataBase?


 
Kein ©   (2004-03-05 16:22) [20]

2Vlad
а зачем?
доступ к таблице я могу получить и через TTable


 
Vlad ©   (2004-03-05 16:31) [21]


> Kein ©   (05.03.04 16:22) [20]

Ты знаешь, мне сейчас просто лень настраивать БДЕ, создавать таблицы и проверять этот код, но подозреваю, что нужно создавать экземпляр TDataBase и уже к нему подключать сессию, а не к TTable. Проверь на досуге.


 
Kein ©   (2004-03-05 16:49) [22]

2Vlad
пасибо



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
1-1078935358
Александр1
2004-03-10 19:15
2004.04.04
Работа с Word


1-1079541387
fc
2004-03-17 19:36
2004.04.04
Расскрашиваем ноды в тривью...


1-1079208207
Volodya_
2004-03-13 23:03
2004.04.04
прокрутка combobox


7-1074495064
Serge
2004-01-19 09:51
2004.04.04
win.ini


3-1078933231
VitGun
2004-03-10 18:40
2004.04.04
Пара вопросов про Access...