|
|
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Дано: - БД на Fox Pro 6 с несколькими таблицами, на которые навешены триггеры на Insert, Update, Delete (для ведения журнала) - XML файл с записями для таблиц, которые нужно загрузить в БД - Программа на VB, которая это делает с помощью ADO Уточнение: Программе на VB триггеры не нужны, т.к. она сама делает записи в журнал, поэтому я их отключаю, с помощью переменной в настроечной таблице, и они работают в холостую, т.е. сразу RETURN. Проблема: Оказалось, что если эти триггеры прикреплены к таблице, то при загрузке больших объемов данных (см. пример кода) начинается жуткое пожирание процессора, как следствие ADO все медленнее и медленнее вставляет записи и весь этот процесс идет по нарастающей до полного калапса (ощущается уже при 1000 записях 8_( ). Если же их отключить из дизайнера, т.к. в run time это невозможно, то все идет очень быстро (проверял на 10000 записях) Вопрос: Как поступить в этом случае не пойму, прогу на Fox Pro переписывать не охота, т.к. не моя она, но делать что-то надо. Как эти триггеры отключить???? Пример кода: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. P.S. Последний крик утопающего. Хелп!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:16 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Вот этот кусок написан очень плохо: автор l_objRst.AddNew For Each l_XMLAttribute In l_XMLRecNode.Attributes l_objRst.Fields(l_XMLAttribute.Name).Value = l_XMLAttribute.Value Next l_objRst.Update Нельзя ли его заменить чем-то более современным - типа INSERT SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:31 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Pr0teus ...Программе на VB триггеры не нужны, ... поэтому я их отключаю... .... Как эти триггеры отключить???? Вот эти места как-то противоречат друг-другу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:33 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
От этого скорость не увеличиться, в моем случае, т.к. записей не много (да и код будет менее читабельным). Самая главная проблема в триггере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:34 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Вот эти места как-то противоречат друг-другу... В чем? Просто есть две программы на Fox'е и VB. Обеим нужно записывать в журнал изменений нужные записи. Программе на Fox'е это делают триггеры, т.к. прога уже была сделана до журналирования, а VB это делает сама, т.к. из ADO с ними (триггерами) вообще не понимаю как работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:38 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Pr0teusОт этого скорость не увеличиться, в моем случае, т.к. записей не много (да и код будет менее читабельным). Самая главная проблема в триггере. В этом случае Вам не надо будет Код: plaintext 1. Триггеры в FoxPro отключить нельзя, кроме указанными Вами способами... Нет аналога BulkCopy... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:41 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Pr0teus т.к. из ADO с ними (триггерами) вообще не понимаю как работать.А зачем понимать? Достаточно как я написал выше - использовать Insert SQL и триггеры сами добавят записи куда надо согласно их логики работы... Вы пытаетесь нарушить одно из главных правил баз данных - обойти правила добавления в базу данных, которые до Вас определил другой программист... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:44 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Этот программист я 8) А с триггерами через ADO гемор, не правильно они работают, во всяком случае я пробовал через них, но не получилось. Другой вопрос, как правильно проверить флаг в таблице из триггера. Делал выборку, но именно она и есть этот краеугольный камень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:59 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Пока остановился на таком решении. Т.е. до выборки дело не доходит, а следовательно и утечки нет. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 08:51 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Pr0teusА с триггерами через ADO гемор, не правильно они работают, во всяком случае я пробовал через них, но не получилось... Это странно... А если попробовать последнюю версию OLE DB Provider VFP 9.1 ? Вам не обязательно использовать для VB старый драйвер FoxPro... Хотя я почти никогда не применял триггеры с базами данных FoxPro по нескольким причинам... Я обычно применяю хранимые процедуры, которые уже пишут журнал, если надо (но проверял на широкой практике это только на FoxPro начиная с 8 версии)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 09:08 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Конечно надо 8) Хотя бы в целях самообучения. Скинь на mikerub@yandex.ru. Посмотрим как на шестерке будут похать. А вариант с USED('nastr_table') нормальный или... ??? Просто, если да, то по скорости меня это устраивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 09:21 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Pr0teus Скинь на mikerub_yandex.ru. Посмотрим как на шестерке будут похать...Вот этого сделать не могу, так как противоречит правилам форума :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 10:11 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Сорри за повтор. Но очень хочется услышать мнение по поводу использования в триггере такой конструкции для определения источника поступления данных - из Fox'а или же из ADO. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 08:44 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Сам себе отвечаю ))) Неправильно. Почему-то на разных машинах дает разный ответ. И вообще, что видно из области триггера. Попробовал в проге на Fox Pro создавать курсор cur_stub_ триггер его видит. Может так делать проверку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 10:10 |
|
||
|
Fox Pro 6 + ADO + triggers
|
|||
|---|---|---|---|
|
#18+
Окончательно остановился на такой конструкции в триггере Код: plaintext 1. 2. 3. 4. 5. Скорость при этом увеличилась на порядок, да и утечка памяти прекратилась 8) И каждая запись обрабатывается за фиксированное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34092613&tid=1590445]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
202ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 505ms |

| 0 / 0 |
