Автор | Сообщение |
|
| |
Пост N: 2962
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.13 15:28. Заголовок: ADS error 5023
Ошибка на ровном месте. Открыта куча баз со связями через set relation При выдаче команды Dbcloseall() вываливается ошибка 5023. Долго пытался понять что ему надо Помог следующий трюк Перед Dbcloseall() , делаем вот так hb_waEval( {|| (Alias())->(DbClearRelation())} )
|
|
|
Новых ответов нет
[см. все]
|
|
|
| Администратор
|
Пост N: 2839
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.04.13 16:03. Заголовок: 5023 AE_INVALID_TABL..
5023 AE_INVALID_TABLE_HANDLE Advantage does not have a table open with the specified handle. dbCloseAll последовательно закрывает все таблицы Пусть для Т2 установлена связь к Т1 Закрывается Т1 Закрывается Т2. У нее есть незавершенные операции. Для их завершения реализуются relations, т.е идет обращение к уже закрытой Т1. ACE поднимает ошибку 5023. Т.е причина та же самая - незавершенные операции. Надо либо избегать этого, т.е. после каждого изменения обязательно выдавать dbCommit() dbUnlock() либо перед dbCloseAll() выдать: dbCommitAll() dbUnlockAll() и может быть что-то еще, сразу не скажу, что может быть.
|
|
|
|
| |
Пост N: 2963
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.13 16:15. Заголовок: Pasha Дело в том чт..
Pasha Дело в том что я и в базу то ни чего не писал. Попробую Dbcommitall() спасибо
|
|
|
|
| |
Пост N: 2966
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.13 16:35. Заголовок: Pasha пишет: либо п..
Pasha пишет: цитата: | либо перед dbCloseAll() выдать: dbCommitAll() dbUnlockAll() |
| Не помогло (в базу ни чего не пишется ) Странно но только вот работает hb_waEval( {|| (Alias())->(DbClearRelation())} ) а потом dbCloseAll() Вероятно глюк ADS , в DBFCDX и в LetoDB такого нет.
|
|
|
|
| |
Пост N: 3274
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.07.13 15:28. Заголовок: Снова косяк и весьма..
Снова косяк и весьма не приятный , хорошо свежий архив был. Слетела база прав пользователей , просто обнулилась (ни одной записи). В ADS_ERR вижу ошибки 7008 и затем 7038 Сторонние проги базу не юзают. Либо это не понятный глюк ADS , либо какой то глюк при копировании открытой базы (для создания архива) с помощью Hb_fcopy. А может причина в SSD винте и софтовых ошибках ...... Скрытый текст SMART READ DATA Revision: 10 Attributes List 1: (SSD Raw Read Error Rate) Normalized Rate: 110 Sectors Read: 28022135 Read Errors: 0 5: (SSD Retired Block Count) Spare blocks remaining 100% Retired Block 0 9: (SSD Power-On Hours) Value 0 Total 1882 hrs 55 mins 12: (SSD Power Cycle Count) Power Cycle Life Remaining 100% Number of power cycles 21 171: (SSD Program Fail Count) Program Error Count 0 172: (SSD Erase Fail Count) Erase Error Count 0 174: (SSD Unexpected power loss count) Unexpected power loss Count 12 177: (Wear Range Delta) Wear Range Delta 1% 181: (Program Fail Count) Program Error Count 0 182: (Erase Fail Count) Erase Error Count 0 187: (SSD Reported Uncorrectable Errors) Normalized Value 100 lifetime URAISE Errors 0 189: (Unrecognized Attribute) Value: 30 Raw Data: 1e 00 4c 00 12 00 00 194: (SSD Temperature Monitoring) Normalized temp 30 Current 30 High 76 Low 18 195: (SSD ECC On-the-fly Count) Normalized Value 120 Sectors Read 28022135 UECC Count 0 196: (SSD Reallocation Event Count) Normalized Value 100 Reallocation Event Count 0 201: (SSD Uncorrectable Soft Read Error Rate)Normalized Value 120 Sectors Read 28022135 Uncorrectable Soft Error Count 0 204: (SSD Soft ECC Correction Rate (RAISE) Normalized Value 120 Sectors Read 28022135 Soft ECC Correction Count 0 230: (SSD Life Curve Status) Normalized Value 100 231: (SSD Life Left) Life Remaining 100% 233: (SSD Internal Reserved) 302 234: (SSD Internal Reserved) 37 241: (SSD Lifetime writes from host) lifetime writes 37 242: (SSD Lifetime reads from host) lifetime reads 21
|
|
|
|
|
| |
Пост N: 3277
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.07.13 21:38. Заголовок: Есть пара интересных..
Есть пара интересных мыслей по этому поводу и думаю что винт и ADS тут не при чем. Завтра чекану и отпишу.
|
|
|
|
| |
Пост N: 3278
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.07.13 09:23. Заголовок: В проге при входе в ..
В проге при входе в нее стоит проверка наличия баз данных. Если базы нет , она создается. Код примерно таков if !HB_fileexists(PathUNC+"test.dbf") // PathUNC UNC путь к файлу dbcreate(..........) endif Единственное объяснение почему обнулилась база это вероятный сбой сети до HB_fileexists и ее восстановление после HB_fileexists и вот тут и произошло обнуление ну если конечно файл не был кем то открыт по сети , в этом случае обнуления не произойдет и прога выпадет с 32 ошибкой. Возможно такой мой подход не совсем верный и не нужно каждый раз проверять наличие баз данных и есть какой то другой подход. Готов выслушать советы. Спасибо.
|
|
|
|
| постоянный участник
|
Пост N: 221
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.07.13 11:02. Заголовок: Dima пишет: Готов вы..
Dima пишет: Проверку перенести в NETIO
|
|
|
|
| |
Пост N: 3279
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.07.13 11:21. Заголовок: SergKis пишет: Пров..
SergKis пишет: цитата: | Проверку перенести в NETIO |
| Да вариант , спасибо. А пока что проверку наличия баз (*.dbf) отрубил совсем (за исключением пары файликов) так как на живой рабочей базе она ни к чему.
|
|
|
|
| |
Пост N: 74
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.07.13 11:52. Заголовок: А если попытаться проверить средствами ADS
на вскидку два варианта: 1 попытаться проверить через ADS. Например используя AdsCheckExistence() , проверяя возвращаемое значение и возможную последнюю ошибку ADS AdsGetLastError() 2 не проверяя , цепляться через ADSConnect внутри begin sequence, если код ошибки вернет что такого файла нет - создать его в обработчике и выполнить повтор. Вроде как сетевые ошибки должны игнорироваться т.к. все происходит на сервере
|
|
|
|
| |
Пост N: 3280
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.07.13 12:04. Заголовок: Haz Тоже вариант , ..
Haz Тоже вариант , сенкс !
|
|
|
|
| |
Пост N: 3556
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.09.13 16:12. Заголовок: Тоже самое случилось..
Тоже самое случилось тут , мой рецепт помог. Странный глюк однако.
|
|
|
|
|
| Администратор
|
Пост N: 2984
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.09.13 16:40. Заголовок: Я сначала грешил на ..
Я сначала грешил на rddads, см. 2-й пост в этой теме. Но, поскольку незавершенных операций нет, виноват скорее всего ace. Он тоже хранит информацию о relations, и у него наверняка есть свои незавершенные операции, и при последовательном закрытии файлов могут быть такие конфликты из-за relations. Но это только догадки, ace это черный ящик. У ace есть своя функция для закрытия всех таблиц одним вызовом - AdsCloseAllTables(), и в rddads есть даже обертка для нее. Но использовать ее нельзя, так как ace то таблицы закроет, а rddads об этом не знает, и будет пытаться закрыть уже закрытые таблицы, на что уже будет матюкаться ace. В этом случае надо использовать такой же прием, как в letodb: установить флаг закрытия, и в adsClose не выдавать запросы к ace, а только освободить соответствующие структуры данных для рабочей области.
|
|
|
|
| |
Пост N: 3557
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.09.13 16:43. Заголовок: Pasha пишет: В этом..
Pasha пишет: цитата: | В этом случае надо использовать такой же прием, как в letodb: установить флаг закрытия, и в adsClose не выдавать запросы к ace, а только освободить соответствующие структуры данных для рабочей области. |
| Ты имеешь в виду немного допилить RDDADS ?
|
|
|
|
| Администратор
|
Пост N: 2985
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.09.13 16:47. Заголовок: Dima пишет: Ты имее..
Dima пишет: цитата: | Ты имеешь в виду немного допилить RDDADS ? |
| Ну да. Попробуй выдать много use, и затем: AdsCloseAllTables() dbCloseAll() Последний вызов даже необязателен, он будет по quit Какая ошибка выскочит ?
|
|
|
|
| |
Пост N: 3558
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.09.13 16:51. Заголовок: Pasha пишет: Ну да...
Pasha пишет: Хорошо бы. Pasha пишет: цитата: | Последний вызов даже необязателен, он будет по quit Какая ошибка выскочит ? |
| Упало с виндовой ошибкой ;) Хорошо хоть без синьки обошлось.
|
|
|
|
| Администратор
|
Пост N: 2986
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.09.13 20:18. Заголовок: Дима, с днем програм..
Дима, с днем программиста ! Меня к вечеру поздравили, иначе я бы и не вспомнил. Я как раз трошки по-про-грамм-ировал. Насчет пакетного закрытия. Есть 2 проблемы. Первая: AdsCloseAllTables закрывает только таблицы, а для закрытия sql-запросов такой функции нет. Но на нет и суда нет. Это вопрос sybase, а не наш. Их придется закрывать отдельно. Вторая касается rddads. К сожалению, rddads до сих пор не содержит структуры вроде AdsConnection, которая бы хранила бы параметры соединения. Добавить эту структуру - фигня вопрос. Но это сейчас не для меня, у меня давно нет установленного Ads, не могу проверить. А без проверки делать что-то в таком серьезном проекте как харбор не хочется. Поэтому сделать так красиво, как в letodb не получится. А именно: в rdd leto можно корректно работать с многими letodb-серверами. Поэтому сделал пока из расчета коннекта с одним сервером. Проверь по возможности пожалуйста. Функция AdsCloseAll(), ее достаточно просто вызвать перед закрытием программы. Я тебе на ящик скинул измененные сырцы.
|
|
|
|
| |
Пост N: 3559
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.09.13 21:00. Заголовок: Pasha пишет: Я тебе..
Pasha пишет: цитата: | Я тебе на ящик скинул измененные сырцы. |
| Получил , ответил. Pasha пишет: цитата: | Дима, с днем программиста ! |
| Точно ;) Я и забыл. Спасибо и всех нас с праздничком ! Pasha пишет: цитата: | А именно: в rdd leto можно корректно работать с многими letodb-серверами. |
| ADS разве не может ? Думаю может ведь по IP адресу стучим к серваку все же. Не проверял конечно , так как пока нет такой необходимости.
|
|
|
|