powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / CREATE PROC в Acess 2000
63 сообщений из 63, показаны все 3 страниц
CREATE PROC в Acess 2000
    #32231778
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаю с базой *.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 - это просто заранее подготовленный результирующий набор, но как его можно подготовить не зная параметров???
Как бы я хотел ошибаться!!! Помогите, кто может!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231880
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С базой MDB работаешь, выполняя хранимые процедуры? Может все-таки речь идет о проекте ADP?
А почему собственно откомпилированная хранимая процедура должна выполняться медленне, чем переданный запрос (еще следует учесть время передачи на сервер текста запроса и последующей компиляции в отличие от ссылки на хранимку). Может в этом собака порылась?
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231892
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Желательно также увидеть текст SP
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231900
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот текст 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)
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231902
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял как ответить конкретному автору в этом форуме.
Для Витал отвечаю:
работаю с файловой базой *.MDB, но Access у меня нет, и не предвидится.
Все делается как принято в SQL Server, операторами CREATE TABLE, CREATE PROC, и т.п. Вынужден так делать, т.к. закзчик хочет иметь "чистую" настольную СУБД.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231903
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не понял так же, как редактироавать свои сообщения. Извините,
и подскажите пожалуйста.
Для Витал:
откомпилированная SP выполняется очень быстро (см текст), в этом вся ее
прелесть! Вот только "компилируется" она очень долго. Примерно столько же,
сколько выполняется простой SQL запрос.
Проблема в в том, что уже откомпилировнная процедура иногда!!!, не всегда,
не возвращает все имеющиеся в базе записи, в то время как SQL запрос возвращает все как полагается, только работает неприемлемо долго.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231906
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sha - так обращаются к конкретному автору
Редактировать свой сообщения после нажатия кнопки Опубликовать -невозможно,до-сколько угодно.Кнопка Предварительный просмотр позволяет увидеть как будет выглядеть сообщение
ЗЫ По существу отвечу позже
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231910
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 To VIG
Thanks to VIG for explanation.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231925
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Не "1 To", а "2". Читается "To". :^)
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231929
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 Владимир Саныч.
Как-то читается неудобно ('to' всё-таки, необходимая вещь).
М.б. что-то знаешь по теме. Поделись, опытом.
Профиль твой, конечно посмотрел.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231931
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
10 Sha:

Увы. Прошу прощения, что влез в топик, не зная ответа. Если бы знал ответ, влез бы с ним.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231935
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 to Владимир Саныч
Охотно верю, судя по количеству постов.
Пожалуйста, подумай, вспомни м.б. что-то придёт.
Я же не рецепт прошу, а просто совет!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231938
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sha
Пиши так,как тебе больше нравится (to VIG -например) .Мы тут полиглоты -разберемся
По существу сказать пока нечего. Могу поделиться только некоторыми соображениями
1. Мне кажется происходит некоторая путаница в определениях.
Термин SP относится к серверным базам данных.В аксесе нет SP,а есть
query-которые можно рассматривать как аналог представлений (view)
(кстати как ты создаешь в аксесе sp/query командой CREATE PROC- насколько мне известно в Jet Sql такой команды нет)
2. Хотелось бы увидеть также как ты коннектишься к базе,и как запускаешь sp на исполнение.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231945
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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!!!
Уважаемые ГУРУ, ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231948
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно выход вот в чем:
взять 1 из 2 SQL Server, или 1 из 16 MSDE (см. профиль Shа) использовать его в качестве настольной БД для этого приложения. Это гораздо более быстрый способ, чем искать хранимую процедуру в файле .mdb и тем более без установленного Acces
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231953
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to progist
Да, но!!!
Я же не могу, и не хочу заставлять клиента иметь MSDE или что иное
(InterBase, или, не приведи Господи ORACLE).
Мне надо оттелаться простой установкой MDAC, и ничего больше!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231954
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Зашел в профиль Sha, прочитал про пневматическое оружие. Это убеждает. Мне нечего этому противопоставить, кроме преподавания иврита. И все равно - ничавошеньки посоветовать не могу...
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231955
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то я в первые слышу что в .mdb файле существует ХП
Скорее всего их там нет

файл .mdb можно использовать как файл-сервер но работать с ним придется путем SQL - запросов, через Connection

А почему бы не поставить клиенту MSDE? Это же бесплатно и намного удобнее.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231957
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как же Саныч?
А галиль или там на худой конец М-16 в мелуиме?
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231959
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Да, как раз послезавтра мне в милуиме выдадут глилон... Надо обдумать эту идею.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231960
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как, отстоим наш .mdb чтоб без ХП?
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231961
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to progist
Да не об этом же прения!!!
В User Interface Access 2000 их нет, конечно же, но средствами ADO
можно создавать не только SP, но и View, и это было бы круто,

если бы..................................................................................
заяц белый, куда бегал, трыды-брынды, что поклал, пид колоду закопал......

Меня интересуют мнения о механизме реализации
SP в машине JET 4.0 (см первый пост)
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231966
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
View -то в .mdb есть, но они называются здесь Query - запрос.
А вот SP - как раз нет, а есть они только в Клиент-серверной СУБД, Аксесс коей не является, а может быть только клиентом для серверной БД, но как правило, это делается в файле .ADP, в котором есть возможность создавать ХП для SQL SERVER, но никак для аксес.
Через VisualDataTools можно увидеть в файле .mdb Views, но, на самом деле это запросы (Queries) по терминологии Аксес
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231967
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Владимир Саныч (к одному из них).
"Зашел в профиль Sha, прочитал про пневматическое оружие"
Это оттяжка, и ерунда. За целкость не платят!!!
Дай совет, Уважаемый Саныч!
Т.к. вся логика реализована в программе (иначе с *.MDB не подлучается)
кроме этого, основного для проги запроса в виде SP,
м.б. проще переехать на другой базис?
Sovety, Sovety, Sovety, Sovety!!!!!!!!!!!!!!!!!!!!!!
Или пошлите меня на......другой форум.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231972
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Progist
Неужели Вы мне не верите, есть в JET 4.0 хранимые процедуры, и View тоже есть. Я этим пользуюсь уже два года. И рельная польза тоже есть
(см первый пост). Еще раз отмечаю, что через User Interface самого Access
эти возможности недоступны (поправь меня Саныч, если я ошибся в орфографии). Вся эта байда доступна через ADO и ADOX.
Упёрся я в дурь какую-то, и прошу совета, как из этой дури выбраться!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231974
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sha, прости меня, пожалуйста, я тебе совета не могу дать. Даже не могу посоветовать другой форум. Запасись терпением, мы вытянем из тебя больше информации и, может быть, сможем помочь ;)

Например, я хотел бы видеть твой сишный код, но не весь , а именно:
1. строку, где ты делаешь подключение к базе mdb,
2. как ты делаешь CREATE PROC (ты это делаешь в си, я так понимаю)
3. как ты вызываешь эту PROC
4. как ты достаешь записи, которые это все возвращает
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231976
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где они хранятся в .mdb, ХП?
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231986
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sha
> но средствами ADO можно создавать не только SP, но и View
Это все самообман.Нет в аксесе sp ,a то что создается "средствами ADO"-это обычный query c параметрами.
Вот пример использования ADO (в VB)
Код: plaintext
1.
2.
3.
Dim ssql As String
ssql =  "CREATE PROC my_test_proc (@par1 int) as "  & _
      "Select * from departments where id_dep=@par1" 
cnTran.Execute ssql

A вот то ,что было создано
Код: plaintext
1.
2.
3.
PARAMETERS par1 Long;
SELECT *
FROM departments
WHERE (((departments.id_dep)=[@par1]));

В Jet query не компилируются,а сохраняется сравнительно простой план выполнения таких запросов, менее оптимизированный,чем например в SqlServer
P.S. Присоединяюсь к fedd по пп 1,2,4
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231988
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пожалуйста, ничего особенного тут нет
Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!Хочу!
Совета, как мне выкрутиться из этого дурацкой ситуации,
пока заказчик не заметил дури!!!!!!!!!!!!!!!!!!!!!!!!!!!

/*это тело файла 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
);
}
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231991
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извинитте, дал полный код, смотрится плохо!
Да это всё не в тему!
Вы говорите нет в Access SP, а ест только QUERY?
Но почему тогда я не вижу SP как QUERY в самом Access (нелегально, чтобы никто не засёк меня за этим занятием)
Нет, это что-то другое, но вот что, сам никак не пойму, хотя работает!
Только вот плохо работает (см первый пост) но скорость - отличная!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231992
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Дай совет, Уважаемый Саныч!

Мне остается только залезть на стол и вывернуть карманы, чтобы народ мне поверил, что у меня ничего нет...
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231993
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG, не знал этого! о как бывает..

тогда посоветуй человеку, как сделать, чтобы было не 40 секунд, а 4 ?

кстати не заметил в коде вызова этой "процедуры". поэтому не могу понять, почему создание и вызов процедуры быстрее, чем выполнение запроса и почему иногда не возвращаются все записи.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231994
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть не создание и вызов, а просто вызов.

тоьлко постепенно понимать начал в чем вопрос ;)
но ответить не могу!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231996
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Саныч.
Саныч, тебе это конечно неинтересно, а мне надо за субботу и воскресенье устранить глюк. А я вот никак не пойму в чём он.
Ты же видишь, я редко обращаюсь к форуму, но сейчас припёрло!!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32231998
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to fedd
дык вызов-то всего лишь навсего EXEC DEMO 1,2,3,4,5,.........
параметры заданы по-умолчанию, т.е их можно не указывать.
Последние, разумеется.


Ну мужики, я же не о технике, а о сути!!!!!
ЧТО ЕСТЬ ХРАНИМАЯ ПРОЦЕДУРА В СМЫСЛЕ ACCESS??????
Или мне пора на пенсию по инвалидности умственной!!!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232001
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Итак, выворачиваю карманы... 20 лет назад, когда меня учили программировать, не было ни Аксесса, ни... ну, в общем, жалко места на перечисление. Потом я действительно стал работать на Аксессе, каюсь, но так сложилось, что я не пользовался ни ADO (точнее, пользовался немножко, когда писал на VB, но мне сейчас это не помогает), ни SP (впрочем, на Оракле они у нас были, но это ж не то), ни C++. Никогда не пользовался mdb как сервером. У меня проблема даже понять вопрос. Я не знаю, что такое CREATE PROC.

Я первый раз слышу, что хранимые процедуры бывают в Аксессе (ну, раз говоришь, значит бывают, хотя до сих пор я думал, что о них говорят только в контексте каких-то более нормальных серверов).

Ща возьму и весь этот поток эмоций перекопирую к себе в профиль...
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232002
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Accesse нет ХП. То, что создается командой CREATE PROC - обыкновенный сохраненный запрос. Возможно с параметрами.
Из делфей с параметрами не создается, но я его прекрасно вижу на странице Запросы.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232003
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сказал VIG, хранимая процедура в смысле Access есть запрос с параметрами.

Настоящих ХП там нет.

я думаю, можно делать

g_pConn.OpenRecordset("select * from DEMO");

или пусть подскажут как без рекордсетов.

как параметры передавать я забыл (или не знал никогда). в справке надо будет посмотреть, или тебе здесь подскажут.

если эта конструкция будет делаться 40 секунд - значит, это и есть нормальная скорость выполнения этого запроса. а за 4 секунды тебе выдавали что-то закэшированное, поэтому кстати и не все туда попадало.

попробуй оптимизировать запрос. используй индексы, используй их правильно.

// посмотрел твой запрос - в глазах зарябило

нафига столько лефт джоинов практически одинаковых таблиц??

тебе еще базу надо нормализировать. работать будет очень быстро. только не в понедельник ;)

сори
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232005
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to VIG
Спасибо за внимание!
Но я ничего не понял, я в Access никогда не работал.
Пожалуйста, более доходчиво изложите Ваше мнение!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232006
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Два мужика идут по улице. Один говорит:
- А я телепат. Могу мысли передавать на расстоянии. Вот сейчас из вон того окна выбросят телевизор.
Через несколько секунд из того окна вываливается торшер.
- Э, то же сказал, что телевизор выбросят?
- Сейчас, будет и телевизор, надо потелепатировать посильнее.
Через несколько секунд из того же окна вываливается газовая плита.
- Ну, а телевизор-то где?
- Сейчас, будет телевизор.
Через несколько секунд из окна вываливается хлолдильник.
- Ну, в чем дело???
Из окна высовывается мужик и кричит:
- Ну нет у меня телевизора!!!

Это была присказка. Sha, мне грустно говорить об этом, но у меня нет телевизора...
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232009
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
укради Access и посмотри на свою базу, смотри на вкладку query, там лежат сохраненные запросы (это типа view в SQL Serverе)
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232010
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to fedd
Эти грёбаные LEFT JOIN - ы и портят мне жизнь (сегодня)
Предполагается, что юзер может захотеть (чтоб его.......)
увидеть в Grid-е некоторые из множества параметров объекта.
Их (видимых) может быть столько, скольео LEFT JOIN -ов я пропишу
в главном запросе. В этом суть.
После 5-ти LEFT-ов процесс создания процедуры начинает тормозить.
Хуже того, тормоза экспоненциальные!!!
Вот это-то и наталкивает меня на мысль о суициде.
Тестовый вариант базы не предусматривал более 3-х,
яйца оторвал бы этим бабам, если бы они у них былм!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232011
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to fedd
Есть, конечно у меня краденный Access, не видит он хранимых процедур!
Да я же дал ссылку на MSDN, там всё честно написано,
НО НЕ ВСЁЁЁЁЁЁЁЁ!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232012
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sha
Но почему тогда я не вижу SP как QUERY в самом Access
А я как раз увидел как QUERY
ЧТО ЕСТЬ ХРАНИМАЯ ПРОЦЕДУРА В СМЫСЛЕ ACCESS
см мой пост от 23:33

Разницу во времени объяснить можно. Во время первого выполнения QUERY создается план выполнения,а т.к запрос очень сложный -то это занимает относительно много времени. При последующих вызовах используется уже существующий план.
Вот почему запрос не всегда отрабатывает правильно? Не знаю.Такое впечатление,что "слетает" план выполнения.Или не обновляется кэш,или ошибка в параметрах,или ...
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232014
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sha, слушай. Даю совет на пределе идиотизма, но попробовать можно. Если не работает LEFT JOIN, поменяй порядок перечисления таблиц и напиши RIGHT JOIN. Чем хрен не шутит, может, так оно заработает?
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232015
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Селект по селекту всегда выполняется медленне, так как ядро базы не может задействовать индексы
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232017
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты не ответил на мои вопросы 2 и 3,
но я догадался
ты делаешь CREATE PROC из своей программы налету, потом его све время перегенерируешь
это неверно. в это момент у тебя и слетают и перестраиваются все планы.

итак, совет!

делай g_pConn.OpenRecordset(q);

где q - твой длиннющий запрос, сгенерированный налету.

прогнозирую время выполнения 6-7 секунд
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232020
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Владимир Саныч
А вот ещё анекдот не в тему (из Internet, разумеется, они там появляются
до того, как я их сочиню!!!)
Один из ВУЗОВ России проводит день открытых дверей.
Однако, вместо телефона деканата, опубликовали телефон морга.
(разница была в одну цифру).
Всё было спокойно в течении двух недель, но накануне этого дня...
Звонок из морга в деканат. "У нас, конечно, всегда двери открыты, но не дако же степени, чтобы спрашивать 'а можно я приду и уточню подробности поступления'."
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232021
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а когда останешься в живых в понедельник, отдохнешь, а потом последуешь моему совету, нормализуешь базу, и по совету Cat2 перепишешь запрос, и через 2 недели этот запрос будет у тебя выполняться меньше чем за секунду!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232024
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или постой, то что-то про грид говорил... с гридом сам разбирайся ;) тут я еще больший ламер
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232027
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про блокировки я туманно написал. В БД после добавления записей НЕ SQL-запросами, требуется сделать подтверждение изменений (в дельфях - функция Post). Если Post НЕ сделан, то запрос на выборку не видит новых вставленых записей. Возможно, у Вас не делается принудительного POST перед выполнением запроса, если вы добавляете запись в гриде.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232028
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Cat2
to Fedd
Спасибо за участие, но:
я наверное длжен опублуковать структуру базы, чтобы получить ответ по существу, но сделать я этого не могу!
LEFT на RIGHT просто так не меняются никогда, хочешь анекдот про гомосеков.
Над ответом Fedd думая, но думы мрачные.
Мне хотелось бы рассмотреть гипотезы (или точные сведения) о том, что такое
SP в терминах JET 4.0 (в JET 3.5x этого не было).
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232032
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Анекдот не хочу, но мне всегда казалось, что

A LEFT JOIN B

и

B RIGHT JOIN A

- это как две пары в сапоги.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232033
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Cat2
Ну я уже отмечал, что простой SQL запрос, эквивалентный телу SP
возвращает ВСЕ записи.
Принял 100 г Gzhelka, вроде полегчало, но чувствую сидеть мне всю ночь,
и результат неизвестен.
Б......, всё же работало пока число параметров не перевалило за 5.
Кажется мне, что JET не чисто играет!!!
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232034
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй в 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
может поможет
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232035
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажется, VIG дал точные сведения.

Sha, думай! сухой остаток моего совета - не надо каждый пересоздавать "ХП" (в терминах mdb - Query), это сравнительно ресурсоемкая операция. Можно динамически менять SQL-запрос и задавать его этому Jetу.

нормализация со структурой базы - потом, на следующей неделе.

где ты вызываешь процедуру в своем коде?
как ты фетчишь строки-то?
или это визард грида твоего сам там куда-то вставил, непонятно куда?

сори, я уже проголодался, в режиме чата не смогу уже.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232039
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to VIG
Не помогло.
to Саныч
С точти зрения реляционной алгебры, да, если переставить так же и таблицы!
По жизни - нет, тюк кюк не могу изменить порядок.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232041
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Всем!!!
Появились идеи, хотя и не по теме.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232043
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все же. Каким способом добавляются записи?
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232045
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 cat2
Тише! У человека появились идеи.Тут главное-не спугнуть. :)
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232047
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG, Cat2,

а мне кажется, что мой совет был самый дельный!

нечего на лету переделвать хранимую процедуру, даже если она всего лишь сохраненный запрос.

правда, это я протелепатировал. он не признался, что налету это делает
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232048
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Cat2
Спасибо за за за за мечание, по телу запроса, думаю.
...
Рейтинг: 0 / 0
CREATE PROC в Acess 2000
    #32232050
Фотография Sha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to fedd
Постараюсь быть понятым.
SP создается 1 (один) раз при выполнении CREATE PROC.....
Это занимает 40-50 сек.
Это время сильно (экспоненциально ) зависит от количества LEFTT JOIN.
Первый вызов SP тоже выполняется 40-50 сек (об этом я забыл упомянуть в своих постах)
Последующие вызовы этой SP выполняются быстро (3-4 сек)
Никогда она пересоздаваться не должна.
Это я, если захочу, могу её пересоздать.

Структура запроса такова, что позволят извлекать N число затребованных
юзверем параметров. Ещё раз отмечаю, что в этом суть!!!
Если бы не эта переменность, я бы спал спокойно.

Ну, вобщем, спокойной почи, Всем огромное спасидо!
...
Рейтинг: 0 / 0
63 сообщений из 63, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / CREATE PROC в Acess 2000
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]