|
|
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
Интересно чего это Фокс так удерживает dbf-ники, созданные (и закрытые!!!) в теле цикла? Даже если установлено SET EXCLUSIVE OFF и таблица создается через CREATE TABLE или через SELECT-SQL, то все равно доступ (на запись или удаление файла) к такому dbf-нику (даже после его закрытия командой USE!) из другого VFP-процесса (или с другого компьютера) ЗАПРЕЩЕН. И этот запрет действует на dbf-ник до завершения цикла, в процессе которого он был создан. Такое впечатление, что команда USE для таких таблиц просто не действует! Никакие формы, библиотеки и объекты при этом не задействованы. И самое главное - такое неоправданное "удержание" касается только таблиц, а вот созданные и закрытые в цикле низкоуровневые файлы ведут себя вполне прилично - с ними из-вне можно проделывать все, что угодно. Ну не создавать же и впрямь dbf-таблицы низкоуровневыми командами (это в Фоксе-то!)? Вот и хотелось бы узнать, это - устранимо, или это - фишка такая у Фокса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 21:26 |
|
||
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
Пример кода в студию! Хочется воспроизвести проблему у себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 22:00 |
|
||
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
А если так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 22:58 |
|
||
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
To MFoxer: Спасибо, завтра попробую разобраться. Может, сработает. To Urri: Код подобен тому, что приведен в http://www.sql.ru/forum/actualfile.aspx?id=3004841 Что-то типа {Клиентский процесс на Компьютере1}: SET DEFAULT TO "c:\program files\vfp\prg\0_klnt_srvr" Home_bd="c:\program files\vfp\prg\0_klnt_srvr\" CName=SUBSTR(SYS(2015),4) cmd="Набор значений обусловленных переменных для запросов" WAIT WINDOW [Command: ]+cmd NOWAIT fh=FCREATE(Home_bd+CName+'.zzz') =FPUTS(fh,cmd) =FCLOSE(fh) Start=Seconds() Fnd=.F. DO WHILE(SECONDS()-Start)<15 IF FILE(Home_bd+CName+'.DBF') Fnd=.T. a=inkey(0.2) EXIT ENDIF ENDDO WAIT CLEAR IF !Fnd =MessageBox("Никаких данных из сервера не поступило!",64) RETURN ENDIF SELECT (CName) USE IF FILE(Home_bd+CName+'.DBF') DELETE FILE (Home_bd+CName+'.DBF') ENDIF ************************************** {Серверный процесс на Компьютере2}: SET DEFAULT TO "c:\program files\vfp\prg\0_klnt_srvr" SET EXCLUSIVE OFF FileList = .F. DO WHILE .T. RELEASE FileList =ADIR(FileList,"*.zzz") IF TYPE ([FILELIST(1,1)])<> namDBF=FileList[1,1] namDBF=LEFT(namDBF,AT(".",namDBF)-1) fh=FOPEN(namDBF+'.zzz') cmd=FGETS(fh) =FCLOSE(fh) CREATE TABLE &namDBF (a c(40)) INSERT INTO &namDBF (a) VALUES (cmd) SELECT(namDBF) ? DBF()+"created." USE && или: CREATE TABLE proba (a c(40)) INSERT INTO proba (a) VALUES (cmd) IF _Tally > 0 SELECT * from proba INTO TABLE &namDBF ? DBF()+"created." ENDIF USE IF FILE(namDBF+'.zzz') DELETE FILE (namDBF+'.zzz') ENDIF ELSE ? "Никаких запросов не поступило в "+TIME() ENDIF a=INKEY(1) IF LASTKEY()=27 EXIT ENDIF ENDDO Возможно, где-то и допустил "грамматическую ошибку" - воспроизвожу примерно, т.к. сам код сейчас находится на компе на работе, а я пишу сейчас из дому. Но, думаю, сам смысл - понятен. Это, кажется, то от чего предостерегал меня Sergey Ch в предыдущем моем топике, но - партизаны не сдаются :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 01:01 |
|
||
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
Ну дык это inkey чудит. Еще одно подтверждение: не надо его использовать, т.е. вообще. Вот так попробуй, а еще лучше создай классы таймера. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 02:44 |
|
||
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
To Urri: Не уверен, что вся загвоздка в Inkey... У меня были проблемы и без него, правда - в другом коде, но тоже - с циклами. Хотя в данной ситуации - может именно Inkey и является "засланным казачком". Ладно попробую Ваш вариант. А вообще, если можно - добавьте чуток подробностей или ссылочку насчет особенностей работы Inkey’я, т.к. в Хелпе, вроде, ничего такого зазорного о нем - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 09:19 |
|
||
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
Я когда-то имел удовольствие поддерживать программу на FPD с INKEY-ами. Так вот, в неактивных окнах эта команда вела себя не вполне адекватно (т.е. приходилось окно, в котором было запущено серверное приложение, держать всегда активным, поверх других окон, в которых также были запущены приложения). Когда идет проверка Вашей клиент-серверной системы на одном ПК в разных процессах, поневоле окно сервера уходит вниз, тогда-то злобная сущность INKEY и проявляется. Кроме того, INKEY очень грузит процессор - это даже можно промониторить. Единственное существенное отличие моего кода от Вашего - это замена INKEY на WAIT TIMEOUT (это самое простое, можно также READ TIMEOUT, а в VFP - объект таймер). Я точных тестов не проводил, но, судя по всему, в VFP алгоритм работы команды INKEY существенно не отличается от FPD, так как проявились траблы, очень похожие на те, с которыми прежде приходилось иметь дело. Алгоритмы работы WAIT и READ совершенно иные. Они одинаково хорошо работают в активном и неактивном окнах и не грузят процессор. Конечно, мое замечание в прошломпосте по поводу "не надо использовать INKEY" надо немного поправить. Не надо использовать INKEY для организации задержки. Для этого есть гораздо лучшие способы. Иногда INKEY можно использовать для получения ответа пользователя. Но и тут есть много альтернативных способов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 12:04 |
|
||
|
VFP7: "Незаконное" удержание закрытых таблиц...
|
|||
|---|---|---|---|
|
#18+
To Urri: Спасибо, убедительно. Тем более - после избавления моего кода от INKEYя мне удалось практически полностью наладить черновой (но достаточно стабильно работающий) вариант клиент-серверного обмена. Правда, пришлось сей обмен организовать через низкоуровневое создание/доступ к "обменным" файлам т.к. с редактированием записи в "зацикленной" таблице не совсем хорошо получается - задолбался подбирать временнЫе настройки VFP7 для обновления/буферизации записей и таблицы в целом: нутром чую, что если их задать в правильном соотношении, то все должно заработать, а так - через раз или два... В конце концов, остановился на "низкоуровневом текстовом" варианте посылки параметров запроса серверу - более "универсально" получается, и работает. Так что - еще раз спасибо. Прошу считать тему исчерпанной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2006, 15:35 |
|
||
|
|

start [/forum/topic.php?fid=41&tid=1590864]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 511ms |

| 0 / 0 |
