![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как избежать зависания при SQL из таблицы. [D6, IB6.x]
Dmitriy O. © (2004-11-18 12:43:00)Если ее меняет конкурирущий пользователь.
Т.е. если пытаешься сделать SQL запрос во время как транзакция другого пользователя не завершена прога зависает как этого избежать ?.
Digitman (2004-11-19 14:26:00) [1]
> Dmitriy O. © (19.11.04 14:03) [22]
> И почему
да по кочану.
тебе же сказали уже - лапшу ты на уши здесь вешаешь.
TIBSQL.Open - это не метод, а свойство.
и единственное что происходит при обращении по чтению к этому св-ву - считывается значение булева поля объект FOpen. А эта простейшая операция, не можетпривести к "вису".
Dmitriy O. (2004-11-19 14:03:00) [2]
> Digitman © (19.11.04 13:47) [21]
И почему тогда 'Open' не выполняется до тех пор пока записи вставленные методом 'Insert' не потвердятся или не будут отвергнуты Транзакцией ???
И как избежать виса кто нить конкретно ответит ???
Digitman (2004-11-19 13:47:00) [3]
> Вот сдесь Query зависает потому что есть не "утвержденные
> записи" в табле
ГДЕ ?
ну ГДЕ ты этой хрени набрался ?
на основании ЧЕГО ты сделал свое гениально-безапелляционное "потому что"-умозаключение ?
Digitman (2004-11-19 13:43:00) [4]
> Dmitriy O. © (19.11.04 13:29) [17]
занялся бы ты лучше Автошемой что ли ...
уж такую галиматью несносную городишь - слов нет просто ..
и на ibase.ru, куда тебя уже неоднократно посылали, ну никак не хочешь сходить ... или буквы там сплошь и рядом незнакомые тебе ...
Anatoly Podgoretsky (2004-11-19 13:41:00) [5]Он художник
Johnmen (2004-11-19 13:32:00) [6]Да-а-а, Дмитрий..... Ты не читатель, это однозначно....
Dmitriy O. (2004-11-19 13:29:00) [7]ТАк проблема с висом проясняется. Дело в том что Вис образуется если перед этим в таблицу другим пользователем были добавленны записи методом INSERT. НО ни Commint ни Rollback вызваны небыли то есть данные вроде есть а вроде нет. Вот Query и незнает что с ними делать толи включать в Select толи не включать.
И ждет пока данная ситуация проеснится. Как только пользователь определится со своим выбором Запрос сразу же кспешно выполняется.
Вот схема: Сдесь пользователь добавляет записи в таблу но транзакцию не завершает.
query1.close;
query1.SQL.Clear;
query1.SQL.Add('Insert into dan (np,razmer,model,cexizgot,dataizg,marka,probeg,defect,cexvin,prim,avtom,vladel,adres,nomzav,datazav)');
query1.SQL.Add('select np,razmer,model,cexizgot,marka,markasb,probeg,defect,cexizgot,cexizgot,avtom,vladel,adres,nomzav,data');
query1.SQL.Add('from zaiav where nomzav='+dzaiav.Text+'and data >='+''''+myform.edata1.Text+''''+'and data<='+''''+myform.edata2.Text+'''');
query1.Prepare;
query1.Open;
Сдесь другой пользователь собирается сделать Select из этой таблы
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('SELECT RECHEN, COUNT( RECHEN ) as kvo FROM DAN');
query1.SQL.Add('where dataprot>='+''''+edvig1.Text+''''+'and dataprot<='+''''+edvig2.Text+''''+ 'GROUP BY RECHEN');
query1.Prepare;
query1.Open;// Вот сдесь Query зависает потому что есть не "утвержденные записи" в табле.
Как этого избежать ?
Digitman (2004-11-19 12:43:00) [8]
> Johnmen © (19.11.04 12:01) [15]
так-то оно так, но "вис"-то откуда у него берется ? ну прочитал он булево св-во "вхолостую" и тут же дальше поехал ..
скорей всего у него или в совершенно другом месте "вис" или у него все-таки TIBQuery .. шут его знает, что и как он там у себя трассирует пошагово, якобы выясняя строчку с "висом", но в любом случае мозги он нам тут конопатит по полной программе)
Johnmen (2004-11-19 12:01:00) [9]Вобщем, Vlad уже сказал [11], в чем дело.
Open у него не метод, а св-во, никакого отношения не имеющее к Open у TIBQuery.
Дмитрий О. просто забыл про кнопу F1
Digitman (2004-11-19 11:52:00) [10]> Именно Команда 'Open' и вызывает вис.
в момент Open() у тебя происходит неявный старт читающей транзакции, о чем ты, очевидно, и не подозреваешь .. или вообще не понимаешь, что любой запрос в IB может быть стартован ТОЛЬКО в контексте успешно стартовавшей перед этим транзакции
попробуй выполни перед Open() ЯВНЫЙ старт транзакции
query1.Transaction.StartTransaction
убедись, что "вис" у тебя именно в этот момент происходит
Polevi (2004-11-19 09:41:00) [11]хотя сорри, IB версионник, я имел в виду MS SQL
Polevi (2004-11-19 09:39:00) [12]>Digitman © (18.11.04 13:41) [3]
очень даже имеет
достаточно для читающего запроса установить READ UNCOMMITTED
Vlad (2004-11-18 19:22:00) [13]
> Dmitriy O. © (18.11.04 15:04) [6]
Хочешь сказать что ты с помощью компонента TIBSql выполняешь select запрос??? Ну-ну. Флаг тебе в руки.
Vemer (2004-11-18 19:06:00) [14]Вот тут, много..
http://www.sql.ru/forum/actualthread.aspx?tid=133250&hl=%ef%ee%eb%e5+%f1%f2%e0%f2%f3%f1%e0
Digitman (2004-11-18 16:21:00) [15]
> Dmitriy O
т/акцией, надо понимать, неявно управляешь ?
> query1.Open;// вот сдесь вис
хочешь сказать, что если юзер, выполняющий эту строчку, - единственный в дан.момент активный юзер данной базы, то запрос выполняется чуть ли не мгновенно ?
Dmitriy O. (2004-11-18 16:06:00) [16]
> Johnmen © (18.11.04 15:24) [7]
Может . Если не может тогда почему ?
Johnmen (2004-11-18 15:24:00) [17]>SQL запрос 'select * from table' из таблицы куда добавляется
>запись конкурируещем пользователем.
>Зависает конкретно TIBSQL
Такого не м.б. потому, что не м.б. никогда !
Но если вам это удалось, то поделитесь - как !
:)))
Dmitriy O. (2004-11-18 15:04:00) [18]
> SQL не может "зависать" по определению, SQL
SQL запрос 'select * from table' из таблицы куда добавляется запись конкурируещем пользователем.
Зависает конкретно TIBSQL
> но никак не при исполнении запроса
Именно Команда 'Open' и вызывает вис.
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('SELECT DVIG, COUNT( DVIG ) as KVO FROM ZAIAV');
query1.SQL.Add('where data>='+''''+edvig1.Text+''''+'and data<='+''''+edvig2.Text+''''+'and dvig<>'''' GROUP BY DVIG');
query1.Prepare;
query1.Open;// вот сдесь вис
Digitman (2004-11-18 13:51:00) [19]
> Johnmen © (18.11.04 13:46) [4]
ты про Автошему ?)
ну эт да, согласен)
Johnmen (2004-11-18 13:46:00) [20]>Digitman © (18.11.04 13:41) [3]
>иди на ibase.ru и читай теорию до полного просветления.
Дмитирий О. не читатель, он - писатель. Очень плодовитый, между прочим...
:)