|
|
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
авторCa.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data/arhiv/" + strSur + ";Jet OLEDB:Database Password=" + MainForm.Pas + ";" Ca.Open 'Чистим таблицу Mconn.Execute ("DELETE arh_rep.* FROM arh_rep") ' ДОБАВЛЯЕМ ДАННЫЕ ИЗ ДРУГОГО mdb ВО временную таблицу для СОЗДАНИЯ отчетов ЗА архивныЕ ЕРИОДЫ Ca.Execute ("INSERT INTO arh_rep IN'" + App.Path + "\Data\kvartplata.amd' SELECT Adding.* FROM Adding WHERE (((Adding.KodKv)=" + Номер + "));") . . . потом 'Открываем Рекордсет rsLg.Open ("SELECT arh_rep.DataT AS Дата, arh_rep.NameKat AS Категория, arh_rep.KodN AS Код, arh_rep.NameN AS Начисление, arh_rep.ObPl AS Площадь, arh_rep.Propis AS Прописано, arh_rep.Tarif AS [Тариф(осн)], arh_rep.TarifI AS [Тариф(доп)], arh_rep.Shc_new AS Счетчик, IIf([arh_rep]![Tip]='-',[arh_rep]![SummaI],0) AS Начислено, IIf([arh_rep]![Tip]='+',[arh_rep]![SummaI],0) AS Оплачено, IIf([arh_rep]![Tip]='s',[arh_rep]![SummaI],0) AS Субсидии FROM arh_rep ORDER BY arh_rep.DataT, arh_rep.NameKat, arh_rep.KodN"), Mconn СУТЬ ПРОБЛЕМЫ: ИМХО Пока срабатывет Ca.Execute rsLg.Open забирает данные с пустой таблицы предврительно очищенной при помощи Mconn.Execute ("DELETE arh_rep.* FROM arh_rep") Ставил задержки в циклах, выводил ProgressBar-ы не помогает. Если убрать предварительную очистку таблицы срабатывет после 2-3-го запуска(иногда и после первого). Как убедиться что Ca.Execute отработал полностью и можно двигаться дальше. Или МОЖЕТ подскажите кто знает какой тип курсора надо поставить, что бы все работало по порядку? Всем зараннее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 17:58 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13 Как убедиться что Ca.Execute отработал полностью и можно двигаться дальше. Или МОЖЕТ подскажите кто знает какой тип курсора надо поставить, что бы все работало по порядку? 1) Попробуйте серверный курсор 2) А почему бы не работать с одним и тем же коннекшном? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:01 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Один конэкт "Ca" в цикле переберает кучу архивных баз т.е. Cn.Open Execute(копирует нужные данные во временную таблицу всегда открытую при помощи Mconn) потом Cn.close и новый цикл. Изначально структура хранения данных прошлых периодов была мною задумана в отдельных файлах что бы не раздувать и не чистить базу Access. Данныеуспешно копились, и Теперь остро стоит вопрос собирать отчеты за год или 2-3. Возможно я придумал не лучший способ но все работает заисключением описанной выше проблемы. Не открывал исходники года два, какой курсор если не трудно напишите пожалуйста конкретно, ели нет буду читать и вспоминать все снова. ))) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:16 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Execute() не вернет управление до тех пор пока сервер не закончит обрабатывать команду (не важно успешно или с ошибкой). У тебя там явно два коннекта, Ca и Mconn - не надо такое делать. Одного-единственного коннекта хватает для 99.(9)% задач. И уж явно хватит для описаной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:17 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13какой курсор если не трудно напишите пожалуйста конкретно, ели нет буду читать и вспоминать все снова. ))) adUseServer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:22 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Спасибо буду копать, результат напишу. Но как можно скопирвать таблицу из одной базы mdb в другую при помощи одного коннекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:25 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13Спасибо буду копать, результат напишу. Но как можно скопирвать таблицу из одной базы mdb в другую при помощи одного коннекта? Так вы же это и делаете с помощью одного коннекта: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:26 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13Но как можно скопирвать таблицу из одной базы mdb в другую при помощи одного коннекта? Есть еще один интересный способ, но он годится, если файлы постоянные и в одних и тех же местах. Я тоже когда-то разбивал базу на несколько файлов, а данные шарил через связанные таблицы . То есть добавлял к файлу связанную таблицу из другого файла и работал с ней, как с локальной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:28 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Точно прошу прщения, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:29 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13Один конэкт "Ca" в цикле переберает кучу архивных баз т.е. Cn.Open Execute(копирует нужные данные во временную таблицу всегда открытую при помощи Mconn) потом Cn.close и новый цикл.В какую такую временную таблицу? Или у тебя не ADO, или у тебя волшебные временные таблицы. Настоящие временные таблицы (или данные в них) живут только на период сессии, потом автоматически умирают. Передавать их данные между двумя разными сессиями в принципе невозможно. Иначе это уже не временные таблицы, а вполне себе стандартные. Andrey13Изначально структура хранения данных прошлых периодов была мною задумана в отдельных файлах что бы не раздувать и не чистить базу Access. Данныеуспешно копились, и Теперь остро стоит вопрос собирать отчеты за год или 2-3.Вариантов работы с сегментированием данных два: 1) Делать все на клиенте. Клиент по очереди подключается ко всем сегментам, вытаскивает из них полусырые данные, копирует их в свои собственные массивы, потом строит итоговый отчет на основе массивов. В плюсах - полный контроль, в минусах - много работы на клиенте. 2) В базе содержащей текущий сегмент делаются прокси таблицы указывающие на сегменты со старыми данными. Клиент соответсвенно всегда работает только с одной базой и обращается к старым через прокси. 2а) Делаешь представление охватывающее все таблицы (одну реальную и все прокси) получаешь виртуальную таблицу с полной историей. Ни один из вариантов не требует нескольких коннектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:31 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Каждый раз когда необходимо собрать отчет я планирую в эту "Временную" таблицу собирать данные из скажем 12 архивных баз со схожей структурой предварительно удаляя все старые данные из "arh_rep". потом на основании "arh_rep" собираю отчет и больше она мне не нужна пока не дается команда на сбор нового отчета. Да таблица постоянная данные временные. если можно то подробнее что такое прокси таблицы и как их делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:51 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13если можно то подробнее что такое прокси таблицы и как их делать? Если я правильно понял, это как раз связанные таблицы, про которые я говорил. Новая таблица => Связь с таблицами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:53 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
White Owl2а) Делаешь представление охватывающее все таблицы (одну реальную и все прокси) Наверное вообще можно сделать представление типа Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:58 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Можно ли программно из VB создать таблицу связанную с другой базой MDB, т.е. как? В access просто "создать таблицу" "связь с таблицами" а программно не умею. Возможно для меня это будет вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 18:59 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, буду работать. только что делает "union all" для меня пока загадка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 19:02 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13Большое спасибо, буду работать. только что делает "union all" для меня пока загадка. Попробуйте F1... UNION "склеивает" две таблицы в одну. То есть создав представление ("запрос" по аксессовскому), вы сможете работать с двумя таблицами (даже находящимися в разных файлах), как будто это одна таблица. Только набор полей должен быть абсолютно одинаковым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 19:04 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13 Код: plaintext Andrey13если можно то подробнее что такое прокси таблицы и как их делать?У тебя Access? Тогда "связаные" или "linked". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 20:56 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Shocker.ProWhite Owl2а) Делаешь представление охватывающее все таблицы (одну реальную и все прокси) Наверное вообще можно сделать представление типа Код: plaintext 1. 2. 3. 4. 5. 6. Можно вообще сделать например так: Оставить сегментированые базы как есть. Добавить к ним "объединяющую" базу которая будет состоять целиком из прокси-таблиц и представлений объединяющих эти прокси в общие таблицы. Получится что для работы внутри сегмента данных надо будет подключяться к базе содержащей соотвествующий сегмент. А для работы с несколькими сегментами разом просто переключить клиента на объединяющую базу. Хотя по хорошему, уходить надо с Access на нормальные базы данных способные работать с большими объемами. Многие из них и сами умеют делать прозрачное сегментирование, да еще и на разные физические устройства при нужде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 21:04 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
White OwlExecute() не вернет управление до тех пор пока сервер не закончит обрабатывать команду (не важно успешно или с ошибкой). Если у Exxecute указать что он выполняется асинхронно, то управление вернет как миленький... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 23:37 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
AndrFWhite OwlExecute() не вернет управление до тех пор пока сервер не закончит обрабатывать команду (не важно успешно или с ошибкой).Если у Exxecute указать что он выполняется асинхронно, то управление вернет как миленький...В данном случае, это к делу не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 23:42 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за советы но проблема остаеться. код тот жэ что приводил раньше. Снова склоняюсь к мнению что Код: plaintext 1. содержит 13 записей(проверяю открывая в access. запрос Код: plaintext указл Код: plaintext rsLg.RecordCount дает 13. В гридпопадает все. НО остался осадок, вдруг при работе на рабочихбазах будет сбоить т.е. терять строки, это будет очень, очень плохо. Может кэширование диска отключить, я уже не знаю что делать. Если есть мысли рад любому совету. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 21:21 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Можо ли при выполнении Код: plaintext подсчитать сколько строк добавлено? тогда мог хотя бы сделать проверку по количеству записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 21:48 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13Спасибо всем за советы но проблема остаеться. Так вы же ими не воспользовались а) Один коннекшн б) Серверный курсор какой смысл советовать дальше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 23:20 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13Спасибо всем за советы но проблема остаеться. код тот жэ что приводил раньше.Ну так! Естественно, проблема останется если код не изменять. Andrey13Снова склоняюсь к мнению что Код: plaintext 1. содержит 13 записей(проверяю открывая в access. И к какому же мнению ты склоняешься? Тебе сколько раз говорить: Один коннект! Ну или хотя бы транзакции закрывай. У тебя один юзер удаляет данные, потом десяток добавляет, а потом первый пытается прочитать их. Чтобы один юзер мог прочитать исправления сделанные в базе другим, надо чтобы этот самый другой свои исправления закоммитил. И не надейся на автокоммит! Никогда-никогда-никогда. Andrey13Может кэширование диска отключить, я уже не знаю что делать.Использовать один коннект и прокси таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 23:57 |
|
||
|
ADO - Как убедиться что Execute отработал
|
|||
|---|---|---|---|
|
#18+
Andrey13Можо ли при выполнении Код: plaintext подсчитать сколько строк добавлено?Да можно... Но не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 23:59 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=133&tid=2159982]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 397ms |

| 0 / 0 |
