|
|
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Работаю с базой *.MDB средствами ADO из Visual C++. В базе создана SP с параметрами, возвращающая набор записей, зависящий, есс-но от параметров. Если выполнить SQL запрос, аналогичный телу SP, время отклика ~40 сек. Время отклика при обращении к SP оператором EXEC procname составляет 3 - 4 сек (ради чего все и делается). Может ли кто объяснить следующее: 1. Почему время генерации SP при выполнении CREATE PROC составляет 40 - 50 сек 2. Почему это время создания сильно зависит от количества LEFT JOIN в теле SP, хотя время исполнения от этого не зависит 3. Самое странное и неприятное то, что SP иногда!!! не возвращает только что добавленные записи, хотя эквивалентный SQL запрос - возвращает!!! Если SP пересоздать, возвращаются все записи. Создается впечатление, что SP - это просто заранее подготовленный результирующий набор, но как его можно подготовить не зная параметров??? Как бы я хотел ошибаться!!! Помогите, кто может!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 07:05 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
С базой MDB работаешь, выполняя хранимые процедуры? Может все-таки речь идет о проекте ADP? А почему собственно откомпилированная хранимая процедура должна выполняться медленне, чем переданный запрос (еще следует учесть время передачи на сервер текста запроса и последующей компиляции в отличие от ссылки на хранимку). Может в этом собака порылась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 16:04 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Желательно также увидеть текст SP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 16:46 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Вот текст SP, хотя без структуры базы он, наверное, мало что значит. Вопрос-то не по синтаксису, а в ппринципе, что есть SP в понимании Access. Access у меня нет, и не будет. Soft только лицензионный. CREATE PROC DEMO (@reg int, @typ int, @vid1 int, @vid2 int, @vid3 int, @status1 int, @status2 int, @status3 int, @prm1 int, @prm2 int, @prm3 int, @prm4 int, @prm5 int, @prm6 int, @prm7 int, @prm8 int, @prm9 int, @prm10 int) AS SELECT OBJ.OBJ_ID, OBJ.OBJ_REG, OBJ.OBJ_TYP, OBJ.OBJ_NAME, RG.NAME, VAL1.VAL_NAME, PRM1.PRM_VAL, PRM10.PRM_VAL, PRM2.PRM_VAL, PRM3.PRM_VAL, VAL2.VAL_NAME, VAL3.VAL_NAME, VAL4.VAL_NAME, VAL5.VAL_NAME, OBJ.OBJ_DTIN, VAL6.VAL_NAME, OBJ.OBJ_DTOUT, PRM4.PRM_VAL, PRM5.PRM_VAL, PRM6.PRM_VAL, PRM7.PRM_VAL, PRM8.PRM_VAL, PRM9.PRM_VAL FROM ((((((((((((((((OBJ INNER JOIN RG ON OBJ.OBJ_ZONE=RG.CODE) INNER JOIN VAL VAL1 ON (VAL1.VAL_REG = OBJ.OBJ_ZONE) AND (VAL1.VAL_CODE=OBJ.OBJ_PLACE) AND (VAL1.VAL_SPR = OBJ.[OBJ_#PLACE])) INNER JOIN VAL VAL2 ON (VAL2.VAL_REG = OBJ.OBJ_REG) AND (VAL2.VAL_CODE=OBJ.OBJ_TYP) AND (VAL2.VAL_SPR = OBJ.[OBJ_#TYP])) INNER JOIN VAL VAL3 ON (VAL3.VAL_REG = OBJ.OBJ_REG) AND (VAL3.VAL_CODE = OBJ.OBJ_VID) AND (VAL3.VAL_SPR = OBJ.[OBJ_#VID])) INNER JOIN VAL VAL4 ON (VAL4.VAL_REG = OBJ.OBJ_REG) AND (VAL4.VAL_CODE = OBJ.OBJ_STATUS) AND (VAL4.VAL_SPR = OBJ.[OBJ_#STATUS])) INNER JOIN VAL VAL5 ON (VAL5.VAL_REG = OBJ.OBJ_REG) AND (VAL5.VAL_CODE = OBJ.OBJ_PRIN) AND (VAL5.VAL_SPR = OBJ.[OBJ_#PRIN])) INNER JOIN VAL VAL6 ON (VAL6.VAL_REG = OBJ.OBJ_REG) AND (VAL6.VAL_CODE = OBJ.OBJ_PROUT) AND (VAL6.VAL_SPR = OBJ.[OBJ_#PROUT])) LEFT JOIN (SELECT PRM_REG, PRM_ID, PRM_VAL FROM PRM WHERE PARAM_CODE = @prm1) PRM1 ON (PRM1.PRM_REG = OBJ.OBJ_REG) AND (PRM1.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM_REG, PRM_ID, PRM_VAL FROM PRM WHERE PARAM_CODE = @prm8) PRM8 ON (PRM8.PRM_REG = OBJ.OBJ_REG) AND (PRM8.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM_REG, PRM_ID, PRM_VAL FROM PRM WHERE PARAM_CODE = @prm9) PRM9 ON (PRM9.PRM_REG = OBJ.OBJ_REG) AND (PRM9.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM_REG, PRM_ID, PRM_VAL FROM PRM WHERE PARAM_CODE = @prm10) PRM10 ON (PRM10.PRM_REG = OBJ.OBJ_REG) AND (PRM10.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM.PRM_REG, PRM.PRM_ID, VAL.VAL_NAME AS [PRM_VAL] FROM (PRM INNER JOIN PARAMS ON (PARAMS.REG = PRM.PRM_REG) AND (PARAMS.CODE = PRM.PARAM_CODE)) INNER JOIN VAL ON (VAL.VAL_REG = PRM.PRM_REG) AND (VAL.VAL_SPR = PARAMS.SPR) AND (VAL.VAL_CODE = PRM.PRM_VAL_SPR) WHERE PRM.PARAM_CODE = @prm2) PRM2 ON (PRM2.PRM_REG = OBJ.OBJ_REG) AND (PRM2.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM.PRM_REG, PRM.PRM_ID, VAL.VAL_NAME AS [PRM_VAL] FROM (PRM INNER JOIN PARAMS ON (PARAMS.REG = PRM.PRM_REG) AND (PARAMS.CODE = PRM.PARAM_CODE)) INNER JOIN VAL ON (VAL.VAL_REG = PRM.PRM_REG) AND (VAL.VAL_SPR = PARAMS.SPR) AND (VAL.VAL_CODE = PRM.PRM_VAL_SPR) WHERE PRM.PARAM_CODE = @prm3) PRM3 ON (PRM3.PRM_REG = OBJ.OBJ_REG) AND (PRM3.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM.PRM_REG, PRM.PRM_ID, VAL.VAL_NAME AS [PRM_VAL] FROM (PRM INNER JOIN PARAMS ON (PARAMS.REG = PRM.PRM_REG) AND (PARAMS.CODE = PRM.PARAM_CODE)) INNER JOIN VAL ON (VAL.VAL_REG = PRM.PRM_REG) AND (VAL.VAL_SPR = PARAMS.SPR) AND (VAL.VAL_CODE = PRM.PRM_VAL_SPR) WHERE PRM.PARAM_CODE = @prm4) PRM4 ON (PRM4.PRM_REG = OBJ.OBJ_REG) AND (PRM4.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM.PRM_REG, PRM.PRM_ID, VAL.VAL_NAME AS [PRM_VAL] FROM (PRM INNER JOIN PARAMS ON (PARAMS.REG = PRM.PRM_REG) AND (PARAMS.CODE = PRM.PARAM_CODE)) INNER JOIN VAL ON (VAL.VAL_REG = PRM.PRM_REG) AND (VAL.VAL_SPR = PARAMS.SPR) AND (VAL.VAL_CODE = PRM.PRM_VAL_SPR) WHERE PRM.PARAM_CODE = @prm5) PRM5 ON (PRM5.PRM_REG = OBJ.OBJ_REG) AND (PRM5.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM.PRM_REG, PRM.PRM_ID, VAL.VAL_NAME AS [PRM_VAL] FROM (PRM INNER JOIN PARAMS ON (PARAMS.REG = PRM.PRM_REG) AND (PARAMS.CODE = PRM.PARAM_CODE)) INNER JOIN VAL ON (VAL.VAL_REG = PRM.PRM_REG) AND (VAL.VAL_SPR = PARAMS.SPR) AND (VAL.VAL_CODE = PRM.PRM_VAL_SPR) WHERE PRM.PARAM_CODE = @prm6) PRM6 ON (PRM6.PRM_REG = OBJ.OBJ_REG) AND (PRM6.PRM_ID = OBJ.OBJ_ID)) LEFT JOIN (SELECT PRM.PRM_REG, PRM.PRM_ID, VAL.VAL_NAME AS [PRM_VAL] FROM (PRM INNER JOIN PARAMS ON (PARAMS.REG = PRM.PRM_REG) AND (PARAMS.CODE = PRM.PARAM_CODE)) INNER JOIN VAL ON (VAL.VAL_REG = PRM.PRM_REG) AND (VAL.VAL_SPR = PARAMS.SPR) AND (VAL.VAL_CODE = PRM.PRM_VAL_SPR) WHERE PRM.PARAM_CODE = @prm7) PRM7 ON (PRM7.PRM_REG = OBJ.OBJ_REG) AND (PRM7.PRM_ID = OBJ.OBJ_ID) WHERE OBJ.OBJ_REG = @reg AND OBJ.OBJ_TYP = @typ AND (OBJ.OBJ_VID = @vid1 OR OBJ.OBJ_VID = @vid2 OR OBJ.OBJ_VID = @vid3) AND (OBJ.OBJ_STATUS = @status1 OR OBJ.OBJ_STATUS = @status2 OR OBJ.OBJ_STATUS = @status3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 17:44 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Не понял как ответить конкретному автору в этом форуме. Для Витал отвечаю: работаю с файловой базой *.MDB, но Access у меня нет, и не предвидится. Все делается как принято в SQL Server, операторами CREATE TABLE, CREATE PROC, и т.п. Вынужден так делать, т.к. закзчик хочет иметь "чистую" настольную СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 17:54 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
И не понял так же, как редактироавать свои сообщения. Извините, и подскажите пожалуйста. Для Витал: откомпилированная SP выполняется очень быстро (см текст), в этом вся ее прелесть! Вот только "компилируется" она очень долго. Примерно столько же, сколько выполняется простой SQL запрос. Проблема в в том, что уже откомпилировнная процедура иногда!!!, не всегда, не возвращает все имеющиеся в базе записи, в то время как SQL запрос возвращает все как полагается, только работает неприемлемо долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 18:10 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
2 Sha - так обращаются к конкретному автору Редактировать свой сообщения после нажатия кнопки Опубликовать -невозможно,до-сколько угодно.Кнопка Предварительный просмотр позволяет увидеть как будет выглядеть сообщение ЗЫ По существу отвечу позже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 18:23 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
1 To VIG Thanks to VIG for explanation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 18:44 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Не "1 To", а "2". Читается "To". :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 19:52 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
1 Владимир Саныч. Как-то читается неудобно ('to' всё-таки, необходимая вещь). М.б. что-то знаешь по теме. Поделись, опытом. Профиль твой, конечно посмотрел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 20:07 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
10 Sha: Увы. Прошу прощения, что влез в топик, не зная ответа. Если бы знал ответ, влез бы с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 20:09 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
2 to Владимир Саныч Охотно верю, судя по количеству постов. Пожалуйста, подумай, вспомни м.б. что-то придёт. Я же не рецепт прошу, а просто совет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 20:26 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
2 Sha Пиши так,как тебе больше нравится (to VIG -например) .Мы тут полиглоты -разберемся По существу сказать пока нечего. Могу поделиться только некоторыми соображениями 1. Мне кажется происходит некоторая путаница в определениях. Термин SP относится к серверным базам данных.В аксесе нет SP,а есть query-которые можно рассматривать как аналог представлений (view) (кстати как ты создаешь в аксесе sp/query командой CREATE PROC- насколько мне известно в Jet Sql такой команды нет) 2. Хотелось бы увидеть также как ты коннектишься к базе,и как запускаешь sp на исполнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 20:45 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to VIG см. MSDN april 2001 ...\\Advanced Microsoft Jet SQL for Access 2000.htm Есть в Access 2000 понятие SP, слава тебе Microsoft, но очень слабо в сравнении с SQL Server. Невозможно (по моему опыту) создать SP более чем из одного SQL выражения. Теперь эмоции: уже 2 суток мучаюсь, м.б. лучше они этого и не обещали! SP и QUERY в Access 2000 не то же самое. Я пользуюсь только JET ENGINE 4.0, и не знаю как создать запрос используя ADO Весь проект летит нахрен!!! Думаю проверять количество записей, возвращаемых из SP сравнением с выражением типа SELECT COUNT и пересоздавать SP, если не совпадает. Но это-же 40-50 сек!!! И что я связался с этим грёбаным *.MDB!!! Уважаемые ГУРУ, ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 21:16 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Наверно выход вот в чем: взять 1 из 2 SQL Server, или 1 из 16 MSDE (см. профиль Shа) использовать его в качестве настольной БД для этого приложения. Это гораздо более быстрый способ, чем искать хранимую процедуру в файле .mdb и тем более без установленного Acces ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 21:45 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to progist Да, но!!! Я же не могу, и не хочу заставлять клиента иметь MSDE или что иное (InterBase, или, не приведи Господи ORACLE). Мне надо оттелаться простой установкой MDAC, и ничего больше!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 21:58 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Зашел в профиль Sha, прочитал про пневматическое оружие. Это убеждает. Мне нечего этому противопоставить, кроме преподавания иврита. И все равно - ничавошеньки посоветовать не могу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:03 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Вообще-то я в первые слышу что в .mdb файле существует ХП Скорее всего их там нет файл .mdb можно использовать как файл-сервер но работать с ним придется путем SQL - запросов, через Connection А почему бы не поставить клиенту MSDE? Это же бесплатно и намного удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:05 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Ну как же Саныч? А галиль или там на худой конец М-16 в мелуиме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:07 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Да, как раз послезавтра мне в милуиме выдадут глилон... Надо обдумать эту идею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:11 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
как, отстоим наш .mdb чтоб без ХП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:14 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to progist Да не об этом же прения!!! В User Interface Access 2000 их нет, конечно же, но средствами ADO можно создавать не только SP, но и View, и это было бы круто, если бы.................................................................................. заяц белый, куда бегал, трыды-брынды, что поклал, пид колоду закопал...... Меня интересуют мнения о механизме реализации SP в машине JET 4.0 (см первый пост) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:18 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
View -то в .mdb есть, но они называются здесь Query - запрос. А вот SP - как раз нет, а есть они только в Клиент-серверной СУБД, Аксесс коей не является, а может быть только клиентом для серверной БД, но как правило, это делается в файле .ADP, в котором есть возможность создавать ХП для SQL SERVER, но никак для аксес. Через VisualDataTools можно увидеть в файле .mdb Views, но, на самом деле это запросы (Queries) по терминологии Аксес ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:39 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to Владимир Саныч (к одному из них). "Зашел в профиль Sha, прочитал про пневматическое оружие" Это оттяжка, и ерунда. За целкость не платят!!! Дай совет, Уважаемый Саныч! Т.к. вся логика реализована в программе (иначе с *.MDB не подлучается) кроме этого, основного для проги запроса в виде SP, м.б. проще переехать на другой базис? Sovety, Sovety, Sovety, Sovety!!!!!!!!!!!!!!!!!!!!!! Или пошлите меня на......другой форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:42 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to Progist Неужели Вы мне не верите, есть в JET 4.0 хранимые процедуры, и View тоже есть. Я этим пользуюсь уже два года. И рельная польза тоже есть (см первый пост). Еще раз отмечаю, что через User Interface самого Access эти возможности недоступны (поправь меня Саныч, если я ошибся в орфографии). Вся эта байда доступна через ADO и ADOX. Упёрся я в дурь какую-то, и прошу совета, как из этой дури выбраться!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 22:56 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Sha, прости меня, пожалуйста, я тебе совета не могу дать. Даже не могу посоветовать другой форум. Запасись терпением, мы вытянем из тебя больше информации и, может быть, сможем помочь ;) Например, я хотел бы видеть твой сишный код, но не весь , а именно: 1. строку, где ты делаешь подключение к базе mdb, 2. как ты делаешь CREATE PROC (ты это делаешь в си, я так понимаю) 3. как ты вызываешь эту PROC 4. как ты достаешь записи, которые это все возвращает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:07 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
а где они хранятся в .mdb, ХП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:08 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
2 Sha > но средствами ADO можно создавать не только SP, но и View Это все самообман.Нет в аксесе sp ,a то что создается "средствами ADO"-это обычный query c параметрами. Вот пример использования ADO (в VB) Код: plaintext 1. 2. 3. A вот то ,что было создано Код: plaintext 1. 2. 3. В Jet query не компилируются,а сохраняется сравнительно простой план выполнения таких запросов, менее оптимизированный,чем например в SqlServer P.S. Присоединяюсь к fedd по пп 1,2,4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:33 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Да пожалуйста, ничего особенного тут нет Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу! Совета, как мне выкрутиться из этого дурацкой ситуации, пока заказчик не заметил дури!!!!!!!!!!!!!!!!!!!!!!!!!!! /*это тело файла Memory.udl [oledb] Provider=Microsoft.Jet.OLEDB.4.0;Data //это просто путь к моей базе Source=D:\MSDEV\Work_C++\Data\MemoBig.mdb;Persist Security Info=False */ //инициализируем глобальный объект Connection _bstr_t bstrConnStr = "File Name=Memory.udl"; hr = g_pConn.CreateInstance("ADODB.Connection"); if(FAILED(hr)) { ShowHResultError(hr, "CSGridDoc::OnNew\n Неудалось создать экземпляр Connection"); return FALSE; } try { g_pConn->Open(bstrConnStr, "", "", 0); } catch(_com_error pCE) { vDisplayError(pCE); return FALSE; } catch(CException e) { e.ReportError(); return false; } catch(...) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:36 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Извинитте, дал полный код, смотрится плохо! Да это всё не в тему! Вы говорите нет в Access SP, а ест только QUERY? Но почему тогда я не вижу SP как QUERY в самом Access (нелегально, чтобы никто не засёк меня за этим занятием) Нет, это что-то другое, но вот что, сам никак не пойму, хотя работает! Только вот плохо работает (см первый пост) но скорость - отличная! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:47 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
> Дай совет, Уважаемый Саныч! Мне остается только залезть на стол и вывернуть карманы, чтобы народ мне поверил, что у меня ничего нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:50 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
VIG, не знал этого! о как бывает.. тогда посоветуй человеку, как сделать, чтобы было не 40 секунд, а 4 ? кстати не заметил в коде вызова этой "процедуры". поэтому не могу понять, почему создание и вызов процедуры быстрее, чем выполнение запроса и почему иногда не возвращаются все записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:53 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
то есть не создание и вызов, а просто вызов. тоьлко постепенно понимать начал в чем вопрос ;) но ответить не могу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:56 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to Саныч. Саныч, тебе это конечно неинтересно, а мне надо за субботу и воскресенье устранить глюк. А я вот никак не пойму в чём он. Ты же видишь, я редко обращаюсь к форуму, но сейчас припёрло!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2003, 23:56 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to fedd дык вызов-то всего лишь навсего EXEC DEMO 1,2,3,4,5,......... параметры заданы по-умолчанию, т.е их можно не указывать. Последние, разумеется. Ну мужики, я же не о технике, а о сути!!!!! ЧТО ЕСТЬ ХРАНИМАЯ ПРОЦЕДУРА В СМЫСЛЕ ACCESS?????? Или мне пора на пенсию по инвалидности умственной!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:04 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Итак, выворачиваю карманы... 20 лет назад, когда меня учили программировать, не было ни Аксесса, ни... ну, в общем, жалко места на перечисление. Потом я действительно стал работать на Аксессе, каюсь, но так сложилось, что я не пользовался ни ADO (точнее, пользовался немножко, когда писал на VB, но мне сейчас это не помогает), ни SP (впрочем, на Оракле они у нас были, но это ж не то), ни C++. Никогда не пользовался mdb как сервером. У меня проблема даже понять вопрос. Я не знаю, что такое CREATE PROC. Я первый раз слышу, что хранимые процедуры бывают в Аксессе (ну, раз говоришь, значит бывают, хотя до сих пор я думал, что о них говорят только в контексте каких-то более нормальных серверов). Ща возьму и весь этот поток эмоций перекопирую к себе в профиль... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:13 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
В Accesse нет ХП. То, что создается командой CREATE PROC - обыкновенный сохраненный запрос. Возможно с параметрами. Из делфей с параметрами не создается, но я его прекрасно вижу на странице Запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:13 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Как сказал VIG, хранимая процедура в смысле Access есть запрос с параметрами. Настоящих ХП там нет. я думаю, можно делать g_pConn.OpenRecordset("select * from DEMO"); или пусть подскажут как без рекордсетов. как параметры передавать я забыл (или не знал никогда). в справке надо будет посмотреть, или тебе здесь подскажут. если эта конструкция будет делаться 40 секунд - значит, это и есть нормальная скорость выполнения этого запроса. а за 4 секунды тебе выдавали что-то закэшированное, поэтому кстати и не все туда попадало. попробуй оптимизировать запрос. используй индексы, используй их правильно. // посмотрел твой запрос - в глазах зарябило нафига столько лефт джоинов практически одинаковых таблиц?? тебе еще базу надо нормализировать. работать будет очень быстро. только не в понедельник ;) сори ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:15 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to VIG Спасибо за внимание! Но я ничего не понял, я в Access никогда не работал. Пожалуйста, более доходчиво изложите Ваше мнение!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:15 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Два мужика идут по улице. Один говорит: - А я телепат. Могу мысли передавать на расстоянии. Вот сейчас из вон того окна выбросят телевизор. Через несколько секунд из того окна вываливается торшер. - Э, то же сказал, что телевизор выбросят? - Сейчас, будет и телевизор, надо потелепатировать посильнее. Через несколько секунд из того же окна вываливается газовая плита. - Ну, а телевизор-то где? - Сейчас, будет телевизор. Через несколько секунд из окна вываливается хлолдильник. - Ну, в чем дело??? Из окна высовывается мужик и кричит: - Ну нет у меня телевизора!!! Это была присказка. Sha, мне грустно говорить об этом, но у меня нет телевизора... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:19 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
укради Access и посмотри на свою базу, смотри на вкладку query, там лежат сохраненные запросы (это типа view в SQL Serverе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:25 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to fedd Эти грёбаные LEFT JOIN - ы и портят мне жизнь (сегодня) Предполагается, что юзер может захотеть (чтоб его.......) увидеть в Grid-е некоторые из множества параметров объекта. Их (видимых) может быть столько, скольео LEFT JOIN -ов я пропишу в главном запросе. В этом суть. После 5-ти LEFT-ов процесс создания процедуры начинает тормозить. Хуже того, тормоза экспоненциальные!!! Вот это-то и наталкивает меня на мысль о суициде. Тестовый вариант базы не предусматривал более 3-х, яйца оторвал бы этим бабам, если бы они у них былм!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:27 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to fedd Есть, конечно у меня краденный Access, не видит он хранимых процедур! Да я же дал ссылку на MSDN, там всё честно написано, НО НЕ ВСЁЁЁЁЁЁЁЁ!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:32 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
2 Sha Но почему тогда я не вижу SP как QUERY в самом Access А я как раз увидел как QUERY ЧТО ЕСТЬ ХРАНИМАЯ ПРОЦЕДУРА В СМЫСЛЕ ACCESS см мой пост от 23:33 Разницу во времени объяснить можно. Во время первого выполнения QUERY создается план выполнения,а т.к запрос очень сложный -то это занимает относительно много времени. При последующих вызовах используется уже существующий план. Вот почему запрос не всегда отрабатывает правильно? Не знаю.Такое впечатление,что "слетает" план выполнения.Или не обновляется кэш,или ошибка в параметрах,или ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:33 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Sha, слушай. Даю совет на пределе идиотизма, но попробовать можно. Если не работает LEFT JOIN, поменяй порядок перечисления таблиц и напиши RIGHT JOIN. Чем хрен не шутит, может, так оно заработает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:39 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Sha. По пунктам 1-2. Jet проводит какую-то оптимизацию и делает план выполнения запросов. Как правило, запросы с LEFT JOIN тяжелы для оптимизации (и выполнения), отсюда и тормоза. А у ВАс еще вдобавок и LEFT JOIN по SELECT По п.3. Возможно разницы в выполнении сохраненного запроса и запроса сформированного прогой и нет, а есть совпадения? И дело в блокировках? Непонятно, зачем Вы делаете LEFT JOIN (SELECT PRM_REG, PRM_ID, PRM_VAL FROM PRM WHERE PARAM_CODE = @prm1) PRM1 ON (PRM1.PRM_REG = OBJ.OBJ_REG) AND (PRM1.PRM_ID = OBJ.OBJ_ID)) можно ведь LEFT JOIN PRM as PRM1 ON (PRM1.PRM_REG = OBJ.OBJ_REG) AND (PRM1.PRM_ID = OBJ.OBJ_ID) ... where PRM1.PARAM_CODE = @prm1 Селект по селекту всегда выполняется медленне, так как ядро базы не может задействовать индексы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:39 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
ты не ответил на мои вопросы 2 и 3, но я догадался ты делаешь CREATE PROC из своей программы налету, потом его све время перегенерируешь это неверно. в это момент у тебя и слетают и перестраиваются все планы. итак, совет! делай g_pConn.OpenRecordset(q); где q - твой длиннющий запрос, сгенерированный налету. прогнозирую время выполнения 6-7 секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:40 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to Владимир Саныч А вот ещё анекдот не в тему (из Internet, разумеется, они там появляются до того, как я их сочиню!!!) Один из ВУЗОВ России проводит день открытых дверей. Однако, вместо телефона деканата, опубликовали телефон морга. (разница была в одну цифру). Всё было спокойно в течении двух недель, но накануне этого дня... Звонок из морга в деканат. "У нас, конечно, всегда двери открыты, но не дако же степени, чтобы спрашивать 'а можно я приду и уточню подробности поступления'." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:44 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
а когда останешься в живых в понедельник, отдохнешь, а потом последуешь моему совету, нормализуешь базу, и по совету Cat2 перепишешь запрос, и через 2 недели этот запрос будет у тебя выполняться меньше чем за секунду! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:45 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
или постой, то что-то про грид говорил... с гридом сам разбирайся ;) тут я еще больший ламер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:48 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Про блокировки я туманно написал. В БД после добавления записей НЕ SQL-запросами, требуется сделать подтверждение изменений (в дельфях - функция Post). Если Post НЕ сделан, то запрос на выборку не видит новых вставленых записей. Возможно, у Вас не делается принудительного POST перед выполнением запроса, если вы добавляете запись в гриде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:53 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to Cat2 to Fedd Спасибо за участие, но: я наверное длжен опублуковать структуру базы, чтобы получить ответ по существу, но сделать я этого не могу! LEFT на RIGHT просто так не меняются никогда, хочешь анекдот про гомосеков. Над ответом Fedd думая, но думы мрачные. Мне хотелось бы рассмотреть гипотезы (или точные сведения) о том, что такое SP в терминах JET 4.0 (в JET 3.5x этого не было). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:54 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Анекдот не хочу, но мне всегда казалось, что A LEFT JOIN B и B RIGHT JOIN A - это как две пары в сапоги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 00:59 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to Cat2 Ну я уже отмечал, что простой SQL запрос, эквивалентный телу SP возвращает ВСЕ записи. Принял 100 г Gzhelka, вроде полегчало, но чувствую сидеть мне всю ночь, и результат неизвестен. Б......, всё же работало пока число параметров не перевалило за 5. Кажется мне, что JET не чисто играет!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:00 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Попробуй в udl написать так Provider=Microsoft.Jet.OLEDB.4.0;Data //это просто путь к моей базе Source=D:\MSDEV\Work_C++\Data\MemoBig.mdb;Persist Security Info=False;Use Procedure For Prepare=1 может поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:01 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
кажется, VIG дал точные сведения. Sha, думай! сухой остаток моего совета - не надо каждый пересоздавать "ХП" (в терминах mdb - Query), это сравнительно ресурсоемкая операция. Можно динамически менять SQL-запрос и задавать его этому Jetу. нормализация со структурой базы - потом, на следующей неделе. где ты вызываешь процедуру в своем коде? как ты фетчишь строки-то? или это визард грида твоего сам там куда-то вставил, непонятно куда? сори, я уже проголодался, в режиме чата не смогу уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:02 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to VIG Не помогло. to Саныч С точти зрения реляционной алгебры, да, если переставить так же и таблицы! По жизни - нет, тюк кюк не могу изменить порядок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:07 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Спасибо Всем!!! Появились идеи, хотя и не по теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:12 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
Все же. Каким способом добавляются записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:13 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
2 cat2 Тише! У человека появились идеи.Тут главное-не спугнуть. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:20 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
VIG, Cat2, а мне кажется, что мой совет был самый дельный! нечего на лету переделвать хранимую процедуру, даже если она всего лишь сохраненный запрос. правда, это я протелепатировал. он не признался, что налету это делает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:34 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to Cat2 Спасибо за за за за мечание, по телу запроса, думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:35 |
|
||
|
CREATE PROC в Acess 2000
|
|||
|---|---|---|---|
|
#18+
to fedd Постараюсь быть понятым. SP создается 1 (один) раз при выполнении CREATE PROC..... Это занимает 40-50 сек. Это время сильно (экспоненциально ) зависит от количества LEFTT JOIN. Первый вызов SP тоже выполняется 40-50 сек (об этом я забыл упомянуть в своих постах) Последующие вызовы этой SP выполняются быстро (3-4 сек) Никогда она пересоздаваться не должна. Это я, если захочу, могу её пересоздать. Структура запроса такова, что позволят извлекать N число затребованных юзверем параметров. Ещё раз отмечаю, что в этом суть!!! Если бы не эта переменность, я бы спал спокойно. Ну, вобщем, спокойной почи, Всем огромное спасидо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 01:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1680009]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
98ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 400ms |

| 0 / 0 |
