Форум: "Базы";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Внизблокировка таблица Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c