Текущий архив: 2004.12.19;
Скачать: CL | DM;
Вниз
Как избежать зависания при SQL из таблицы. Найти похожие ветки
← →
Dmitriy O. © (2004-11-18 12:43) [0]Если ее меняет конкурирущий пользователь.
Т.е. если пытаешься сделать SQL запрос во время как транзакция другого пользователя не завершена прога зависает как этого избежать ?.
← →
Polevi © (2004-11-18 12:51) [1]уровень изоляции поменять
← →
Dmitriy O. © (2004-11-18 13:04) [2]Я так понял что SQL зависает только если другой пользователь в это время добовляет новые записи. Если просто редактирует то не зависает.
Так вот как избежать зависания SQL во время добовления другим пользователем новых записей ?.
> уровень изоляции поменять
Чтот пока непонятно.
← →
Digitman © (2004-11-18 13:41) [3]
> Polevi © (18.11.04 12:51) [1]
> уровень изоляции поменять
уровень изоляции т/акций не имеет к "вису" никакого отношения
> Dmitriy O. © (18.11.04 13:04) [2]
> SQL зависает
SQL не может "зависать" по определению, SQL - это терминологическая аббревиатура, переводимая ка "язык структурированных запросов"
некое же подобие "виса" в IB может наблюдаться лишь при старте/подтверждении транзакции, следующей после исполнения запроса, но никак не при исполнении запроса.
иди на ibase.ru и читай теорию до полного просветления.
← →
Johnmen © (2004-11-18 13:46) [4]>Digitman © (18.11.04 13:41) [3]
>иди на ibase.ru и читай теорию до полного просветления.
Дмитирий О. не читатель, он - писатель. Очень плодовитый, между прочим...
:)
← →
Digitman © (2004-11-18 13:51) [5]
> Johnmen © (18.11.04 13:46) [4]
ты про Автошему ?)
ну эт да, согласен)
← →
Dmitriy O. © (2004-11-18 15:04) [6]
> 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;// вот сдесь вис
← →
Johnmen © (2004-11-18 15:24) [7]>SQL запрос "select * from table" из таблицы куда добавляется
>запись конкурируещем пользователем.
>Зависает конкретно TIBSQL
Такого не м.б. потому, что не м.б. никогда !
Но если вам это удалось, то поделитесь - как !
:)))
← →
Dmitriy O. © (2004-11-18 16:06) [8]
> Johnmen © (18.11.04 15:24) [7]
Может . Если не может тогда почему ?
← →
Digitman © (2004-11-18 16:21) [9]
> Dmitriy O
т/акцией, надо понимать, неявно управляешь ?
> query1.Open;// вот сдесь вис
хочешь сказать, что если юзер, выполняющий эту строчку, - единственный в дан.момент активный юзер данной базы, то запрос выполняется чуть ли не мгновенно ?
← →
Vemer © (2004-11-18 19:06) [10]Вот тут, много..
http://www.sql.ru/forum/actualthread.aspx?tid=133250&hl=%ef%ee%eb%e5+%f1%f2%e0%f2%f3%f1%e0
← →
Vlad © (2004-11-18 19:22) [11]
> Dmitriy O. © (18.11.04 15:04) [6]
Хочешь сказать что ты с помощью компонента TIBSql выполняешь select запрос??? Ну-ну. Флаг тебе в руки.
← →
Polevi © (2004-11-19 09:39) [12]>Digitman © (18.11.04 13:41) [3]
очень даже имеет
достаточно для читающего запроса установить READ UNCOMMITTED
← →
Polevi © (2004-11-19 09:41) [13]хотя сорри, IB версионник, я имел в виду MS SQL
← →
Digitman © (2004-11-19 11:52) [14]> Именно Команда "Open" и вызывает вис.
в момент Open() у тебя происходит неявный старт читающей транзакции, о чем ты, очевидно, и не подозреваешь .. или вообще не понимаешь, что любой запрос в IB может быть стартован ТОЛЬКО в контексте успешно стартовавшей перед этим транзакции
попробуй выполни перед Open() ЯВНЫЙ старт транзакции
query1.Transaction.StartTransaction
убедись, что "вис" у тебя именно в этот момент происходит
← →
Johnmen © (2004-11-19 12:01) [15]Вобщем, Vlad уже сказал [11], в чем дело.
Open у него не метод, а св-во, никакого отношения не имеющее к Open у TIBQuery.
Дмитрий О. просто забыл про кнопу F1
← →
Digitman © (2004-11-19 12:43) [16]
> Johnmen © (19.11.04 12:01) [15]
так-то оно так, но "вис"-то откуда у него берется ? ну прочитал он булево св-во "вхолостую" и тут же дальше поехал ..
скорей всего у него или в совершенно другом месте "вис" или у него все-таки TIBQuery .. шут его знает, что и как он там у себя трассирует пошагово, якобы выясняя строчку с "висом", но в любом случае мозги он нам тут конопатит по полной программе)
← →
Dmitriy O. © (2004-11-19 13:29) [17]ТАк проблема с висом проясняется. Дело в том что Вис образуется если перед этим в таблицу другим пользователем были добавленны записи методом 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 зависает потому что есть не "утвержденные записи" в табле.
Как этого избежать ?
← →
Johnmen © (2004-11-19 13:32) [18]Да-а-а, Дмитрий..... Ты не читатель, это однозначно....
← →
Anatoly Podgoretsky © (2004-11-19 13:41) [19]Он художник
← →
Digitman © (2004-11-19 13:43) [20]
> Dmitriy O. © (19.11.04 13:29) [17]
занялся бы ты лучше Автошемой что ли ...
уж такую галиматью несносную городишь - слов нет просто ..
и на ibase.ru, куда тебя уже неоднократно посылали, ну никак не хочешь сходить ... или буквы там сплошь и рядом незнакомые тебе ...
← →
Digitman © (2004-11-19 13:47) [21]
> Вот сдесь Query зависает потому что есть не "утвержденные
> записи" в табле
ГДЕ ?
ну ГДЕ ты этой хрени набрался ?
на основании ЧЕГО ты сделал свое гениально-безапелляционное "потому что"-умозаключение ?
← →
Dmitriy O. © (2004-11-19 14:03) [22]
> Digitman © (19.11.04 13:47) [21]
И почему тогда "Open" не выполняется до тех пор пока записи вставленные методом "Insert" не потвердятся или не будут отвергнуты Транзакцией ???
И как избежать виса кто нить конкретно ответит ???
← →
Digitman © (2004-11-19 14:26) [23]
> Dmitriy O. © (19.11.04 14:03) [22]
> И почему
да по кочану.
тебе же сказали уже - лапшу ты на уши здесь вешаешь.
TIBSQL.Open - это не метод, а свойство.
и единственное что происходит при обращении по чтению к этому св-ву - считывается значение булева поля объект FOpen. А эта простейшая операция, не может привести к "вису".
Страницы: 1 вся ветка
Текущий архив: 2004.12.19;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.034 c