Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.025 c
8-1095737837
Ктото
2004-09-21 07:37
2004.12.19
Как вывести картинку или 3D-объект на форму на OpenGL ?


4-1099669306
Torin
2004-11-05 18:41
2004.12.19
Проверка наличия FTP сервиса у удалнного компьютера


3-1100598738
Explorer
2004-11-16 12:52
2004.12.19
DBGridEh - выделение ячейки


3-1100751112
Julia
2004-11-18 07:11
2004.12.19
Передача данных по модему


14-1101909282
Koala
2004-12-01 16:54
2004.12.19
Windows Server 2003 Security Guide