Як уникнути зависання при SQL з таблиці
Якщо її змінює конкуруючий користувач. Тобто. якщо намагаєшся зробити SQL запит під час як транзакція іншого користувача не завершена прога зависає як цього уникнути?
рівень ізоляції поміняти
Я так зрозумів що SQL зависає тільки якщо інший користувач у цей час додає нові записи. Якщо просто редагує, то не зависає. Так ось як уникнути зависання SQL під час додавання іншим користувачем нових записів?.> рівень ізоляції помінятиЩо поки що незрозуміло.
рівень ізоляції т/акцій не має до "вису" жодного відношення
SQL не може "зависати" за визначенням, SQL - це термінологічна абревіатура, що перекладається як "мова структурованих запитів"
така собі подібність "виса" в IB може спостерігатися лише пристарті/підтвердження транзакції, наступної після виконання запиту, але ніяк не при виконанні запиту.
йди на ibase.ru та читай теорію до повного просвітлення.
Дмитро О. не читач, він – письменник. Дуже плідний, між іншим. :)
ти про Автошему ?) ну це так, згоден)
> SQL не може "зависати" за визначенням, SQLSQL запит "select * from table" з таблиці куди додається запис конкуруючим користувачем. Зависає саме TIBSQL> але ніяк не при виконанні запитуСаме Команда "Open" і викликає вис. query1.Close; query1.SQL.Clear; query1.SQL.Add(" SELECT DVIG, COUNT( DVIG ) як KVO FROM ZAIAV"); query1.SQL.Add("where data>="+""""+edvig1.Text+""""+"and data """" GROUP BY DVIG"); query1.Prepare; query1.Open;// ось тут вис
>SQL запит "select * from table" з таблиці куди додається >запис конкуруючим користувачем. >Зависає саме TIBSQL
Такого не м.б. тому, що не м.б. ніколи ! Але якщо вам це вдалося, то поділіться - як ! :)))
т/акцією, треба розуміти, неявно керуєш?
хочеш сказати, що якщо користувач, який виконує цей рядок, - єдиний в даний момент активний користувач цієї бази, то запит виконується мало не миттєво?
хоча соррі, IB версійник, я мав на увазі MS SQL
> Саме Команда "Open" і викликає вис.
в момент Open() у тебе відбувається неявний старт транзакції, що читає, про що ти, очевидно, і не підозрюєш .. або взагалі не розумієш, що будь-який запит в IB може бути стартований ТІЛЬКИ в контексті транзакції, що успішно стартувала перед цим.
спробуй виконай перед Open() ЯВНИЙ старт транзакції
переконайся, що "вис" у тебе саме в цей момент відбувається
Втім, Vlad вже сказав [11], в чому справа. Open у нього не спосіб, а св-во, ніякого відношення не має до Open у TIBQuery. Дмитро О. просто забув про кнопку F1
так воно так, але "вис"-то звідки у нього береться? ну прочитав він бульова св-во "вхолосту" і тут же далі поїхав ..
Швидше за все в нього або в зовсім іншому місці "вис" або в нього все-таки TIBQuery .. блазень його знає, що і як він там у себе трасує покроково, нібито з'ясовуючи рядок з "висом", але в будь-якому випадку мізки він нам тут конопатит за повною програмою)
Так проблема з висом прояснюється. Справа в тому, що Віс утворюється якщо перед цим в таблицю іншим користувачем були додані записи методом INSERT. А ні Commint ні Rollback викликані не були тобто дані начебто є а начебто ні. Ось Query і не знає що з ними робити толі включати в Select толі не включати. І чекає поки дана ситуація проясниться. Як тільки користувач визначиться зі своїм вибором Запит відразу ж поспішновиконується.
Ось схема: Тут користувач додає записи в таблу але транзакцію не завершує. query1.close; query1.SQL.Clear; query1.SQL. 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,автом,vladel,adres,nomzav,data"); query1.SQL.Add("from zaiav where nomzav="+dzaiav.Text+"and data >="+"" "+myform.edata1.Text+""""+"and data ="+""""+edvig1.Text+""""+"and dataprot
Та-а-а, Дмитре. Ти не читач, це однозначно.
зайнявся б ти краще Автошемой чи що.
вже таку нісенітну нісенітну городиш - слів немає просто.
і на ibase.ru, куди тебе вже неодноразово посилали, ну ніяк не хочеш сходити. або літери там суцільно і поряд незнайомі тобі.
> Ось тут Query зависає тому, що є не "затверджені > записи" в таблі
ДЕ? ну ДЕ ти цієї хроні набрався ? на підставі ЧОГО ти зробив своє геніально-безапеляційне "тому що"-розум?
тобі ж сказали вже - локшину ти на вуха тут вішаєш.
TIBSQL.Open - це не метод, авластивість.
і єдине що відбувається при зверненні читання до цього св-ву - зчитується значення булева поля об'єкт FOpen. А ця найпростіша операція,не можепризвести до "вису".