Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.055 c
14-1078836708
wild_arg
2004-03-09 15:51
2004.04.04
Глюки


14-1078480768
Оля
2004-03-05 12:59
2004.04.04
Чтение байтов из текстового файла


4-1075135534
-Serg-
2004-01-26 19:45
2004.04.04
HWND


4-1074959994
ESER
2004-01-24 18:59
2004.04.04
Уважаемые, мастера. Прошу о помощи! Реестр и API


7-1074071934
KokWASP
2004-01-14 12:18
2004.04.04
Из-под NT, W2K не работает FindFirst на NetWare вских дисках.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский