Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) "Хранимые процедуры" для vfpoledb (число прочтений - 16707 )
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
"Хранимые процедуры" для vfpoledb
04. Июля 2007 :: 12:48
Печать  
В vfpoledb есть возможность создавать подобие хранимых процедур.
Необходимо только создать "PRG"-файл.
Может кто этим занимался - в каком виде должен быть оформлен такой файл и где его необходимо размещать?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #1 - 04. Июля 2007 :: 12:58
Печать  
Он должен находится в каталоге, который ты прописал в строке подключения.
Вот пример текста ХП (автор - steban):
Код
Выбрать все
FUNCTION quarter
	LPARAMETERS d
	RETURN INT((MONTH(d)-1)/3)+1
endfunc 


А вот тут можешь немножко почитать про это
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #2 - 04. Июля 2007 :: 12:59
Печать  
То есть должна быть одна основная процедура с именем как и файл реализации?
И какие ограничения языка в этих процедурах?

ЗЫ... тогда будем вспоминать фокса.
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #3 - 04. Июля 2007 :: 13:03
Печать  
Иди по ссылке. Там почти всё написано.
Цитата:
Процедура может принимать при ее вызове параметры от вызывающей программы. Параметры могут объявляться как частные переменные (ключевое слово PARAMETERS) или как локальные переменные (ключевое слово LPARAMETERS). Как именно объявлять параметры дело Вашего вкуса. Число передаваемых параметров может быть меньше, чем число объявленных параметров. В этом случае "лишние" параметры процедуры инициализируются в значение false (.F.). Пример оформления процедуры:

Procedure MyProc
parameter nScope
? "Число pi="+str(nScope)
return


Соответственно вызов этой процедуры выглядит так:

Do MyProc with 3.14

Программа, дойдя до оператора Do MyProc, произведет поиск файла myproc.prg (или откомпилированного myproc.fxp) и произведет вызов этой процедуры. При вызове переменной-параметру nScope будет передано значение 3.14, и начнет исполняться процедура, пока не будет достигнут конец файла myproc.prg или не будет встречен оператор RETURN. При этом управление будет передано на следующий оператор после Do MyProc.

Наборы процедур можно хранить в одном файле, что дает нам процедурный файл. В этом случае вызов выглядит так:

Do MyProc with 3.14 in MyProcFile,

где MyProcFile имя процедурного файла.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #4 - 04. Июля 2007 :: 13:06
Печать  
Понятно, а как насчет ограничения языка?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #5 - 04. Июля 2007 :: 13:14
Печать  
Не знаю, т.к. не было надобности. Но можно ж опытным путём...  Подмигивание
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #6 - 04. Июля 2007 :: 13:17
Печать  
Ладно, буду пробовать
  
Наверх
ICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #7 - 04. Июля 2007 :: 13:20
Печать  
Не работают команды и функции Фокса связанные с визуализацией. Типа BROWSE, EDIT. Все, что касается работы с данными, а также ввод-вывод в файлы работает. Я лично не понял как получить рекордсет как результат работы функции. Поэтому сохранял в ДБФ и потом открывал запросом.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #8 - 06. Августа 2007 :: 12:48
Печать  
Еще мысля появилась - в справке написано, что для OleDB можно использовать команду "SET PROCEDURE"
Команда отрабатывает, но в запросе его функции не получается использовать...

Может кто опытом поделится?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: "Хранимые процедуры" для vfpoledb
Ответ #9 - 06. Августа 2007 :: 14:45
Печать  
Chieftain писал(а) 06. Августа 2007 :: 12:48:
Еще мысля появилась - в справке написано, что для OleDB можно использовать команду "SET PROCEDURE"
Команда отрабатывает, но в запросе его функции не получается использовать...

Может кто опытом поделится?

А что хочется получить?
Рабочий пример :
http://www.1cpp.ru/forum/YaBB.pl?num=1180606447
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #10 - 07. Августа 2007 :: 05:55
Печать  
kiruha писал(а) 06. Августа 2007 :: 14:45:
Chieftain писал(а) 06. Августа 2007 :: 12:48:
Еще мысля появилась - в справке написано, что для OleDB можно использовать команду "SET PROCEDURE"
Команда отрабатывает, но в запросе его функции не получается использовать...

Может кто опытом поделится?

А что хочется получить?
Рабочий пример :
http://www.1cpp.ru/forum/YaBB.pl?num=1180606447


Просто по аналогии с фоксом хотелось получить единый процедурный файл, в котором хранились бы все необходимые функции
  
Наверх
ICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #11 - 07. Августа 2007 :: 15:00
Печать  
Читай внимательнее справку. Там написано, что эту команду можно использовать внутри хранимых процедур, триггеров, пользовательских функций и т.д. В тексте запроса эта команда не выполняется.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #12 - 15. Августа 2007 :: 07:41
Печать  
Короче выкрутился как всегда с извратами.
Сделал единый "_getdata.prg" в который первым параметром всегда передаю имя функции для выполнения, а там уже анализирую...

Код
Выбрать все
PARAMETERS Func,Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8,Param9,Param10
IF Func="GetSertificate" THEN
	RETURN GetSertificate(Param1,Param2)
ENDIF 



ЗЫ..ну не люблю я большого скопления файлов
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #13 - 15. Августа 2007 :: 08:07
Печать  
А вот так:
Цитата:
Наборы процедур можно хранить в одном файле, что дает нам процедурный файл. В этом случае вызов выглядит так:

Do MyProc with 3.14 in MyProcFile,

где MyProcFile имя процедурного файла.

не пробывал?
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #14 - 15. Августа 2007 :: 08:15
Печать  
JohnyDeath писал(а) 15. Августа 2007 :: 08:07:
А вот так:
Цитата:
Наборы процедур можно хранить в одном файле, что дает нам процедурный файл. В этом случае вызов выглядит так:

Do MyProc with 3.14 in MyProcFile,

где MyProcFile имя процедурного файла.

не пробывал?


В самом фоксе это работает, а в запросе маловероятно...

Сейчас получается вполне красиво

Код
Выбрать все
SELECT
  Спр.ID as [ТекущийЭлемент $Справочник.Номенклатура],
  Спр.CODE as Код,
  Спр.Descr as Наименование,
  _GetData(""GetSertificate"",$Серт.ДатаКонца,:ТекущаяДата~~) as Сертификат 

  
Наверх
ICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #15 - 15. Августа 2007 :: 08:35
Печать  
JohnyDeath писал(а) 15. Августа 2007 :: 08:07:
А вот так:
Цитата:
Наборы процедур можно хранить в одном файле, что дает нам процедурный файл. В этом случае вызов выглядит так:

Do MyProc with 3.14 in MyProcFile,

где MyProcFile имя процедурного файла.

не пробывал?


Кстати такая конструкция для OleDB у меня не сработала.

Даже если MyProcFile указать как "КаталогИБ()+MyProcFile"

Цитата:
Execute(): Произошла одна или несколько ошибок во время обработки команды


А в самом фоксе всё нормально.
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #16 - 16. Августа 2007 :: 05:45
Печать  
Я храню процедуры в фоксовой базе, расположенной в каталоге ИБ.
Там же можно хранить и вьюхи Подмигивание
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #17 - 16. Августа 2007 :: 05:49
Печать  
steban писал(а) 16. Августа 2007 :: 05:45:
Я храню процедуры в фоксовой базе, расположенной в каталоге ИБ.
Там же можно хранить и вьюхи Подмигивание


а вызов через DO у тебя проходит ?
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: "Хранимые процедуры" для vfpoledb
Ответ #18 - 16. Августа 2007 :: 06:59
Печать  
steban писал(а) 16. Августа 2007 :: 05:45:
Я храню процедуры в фоксовой базе, расположенной в каталоге ИБ.
Там же можно хранить и вьюхи Подмигивание


Про вьюхи не  понял.
Можно использовать представления ??
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #19 - 16. Августа 2007 :: 07:16
Печать  
steban писал(а) 16. Августа 2007 :: 05:45:
Я храню процедуры в фоксовой базе, расположенной в каталоге ИБ.
Там же можно хранить и вьюхи Подмигивание

1. Т.е. на каждую процедуру отдельный файл в каталоге ИБ, верно?
т.е. есть стандартный способ?
2. Про вьюхи подробнее можешь рассказать?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #20 - 16. Августа 2007 :: 08:31
Печать  
lustin писал(а) 16. Августа 2007 :: 05:49:
а вызов через DO у тебя проходит ?

не пробовал, не было необходимости

kiruha писал(а) 16. Августа 2007 :: 06:59:
[Про вьюхи не  понял.
Можно использовать представления ??

можно Улыбка

artbear писал(а) 16. Августа 2007 :: 07:16:
1. Т.е. на каждую процедуру отдельный файл в каталоге ИБ, верно?

неверно.
Все процедуры/функции/вьюхи находятся в одной фокспрошной базе (3 файла: .dbc, .dct и .dcx)

artbear писал(а) 16. Августа 2007 :: 07:16:
2. Про вьюхи подробнее можешь рассказать?

А чего там рассказывать, самые обычные фокспрошные вьюхи. Создаются при помощи View Designer в фоксе.
При написании текстов запросов для вьюх можно обращаться по имени к DBF-таблицам, лежащим в одном каталоге с базой.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: "Хранимые процедуры" для vfpoledb
Ответ #21 - 16. Августа 2007 :: 08:57
Печать  
К файлу базы-dbc нужно подключать таблицы 1С dbf ?
При подключении Fox хочет обновить таблицы dbf -
это влияет на работу 1С?
Что происходит с dbc при внутреннем изменении таблиц в 1С?

Пример работы с представлениями, самы простой, нельзя здесь привести?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #22 - 16. Августа 2007 :: 09:02
Печать  
kiruha писал(а) 16. Августа 2007 :: 08:57:
К файлу базы-dbc нужно подключать таблицы 1С dbf ?

нет
kiruha писал(а) 16. Августа 2007 :: 08:57:
При подключении Fox хочет обновить таблицы dbf -
это влияет на работу 1С?

Первый раз слышу. Приведешь точное сообщение?

kiruha писал(а) 16. Августа 2007 :: 08:57:
Что происходит с dbc при внутреннем изменении таблиц в 1С?
ничего.

kiruha писал(а) 16. Августа 2007 :: 08:57:
Пример работы с представлениями, самы простой, нельзя здесь привести?

может вечером.....
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: "Хранимые процедуры" для vfpoledb
Ответ #23 - 16. Августа 2007 :: 09:14
Печать  
Цитата:
Первый раз слышу. Приведешь точное сообщение?


Это происходит только при включении таблиц дБФ к базе FoxPro . Команда Add Table.
Т.к.  Цитата:
К файлу базы-dbc нужно подключать таблицы 1С dbf ?
нет
то этого сообщения соответственно нет.

Т.е. я так понял -
1. Создается файл "пустой" бызы данных (без файлов ДБФ)- dbc.
2. Создаются представления и хранимые процедуры.
3. Файлы кидают в каталог ИБ.
4. В запросах можно теперь использовать представления.

С нетерпением будем ждать рабочего примера Улыбка
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #24 - 16. Августа 2007 :: 10:50
Печать  
А Степан молодец! Пришёл, раздразнил всех и ушёл!  Очень довольный
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #25 - 16. Августа 2007 :: 12:16
Печать  
kiruha писал(а) 16. Августа 2007 :: 09:14:
Т.е. я так понял -
1. Создается файл "пустой" бызы данных (без файлов ДБФ)- dbc.
2. Создаются представления и хранимые процедуры.
3. Файлы кидают в каталог ИБ.
4. В запросах можно теперь использовать представления.

правильно понял.

kiruha писал(а) 16. Августа 2007 :: 09:14:
С нетерпением будем ждать рабочего примера Улыбка

В приложенной базе определена функция quarter и View Номенклатура.
Это представление - UNION справочников Номенклатура и Материалы из типовой бухгалтерии.
  

dbc.rar ( 5 KB | Загрузки )

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: "Хранимые процедуры" для vfpoledb
Ответ #26 - 16. Августа 2007 :: 13:07
Печать  
Т.е.
5. Пусть имя файла базы dbc - data
             имя нашего view- View_nom

Тогда вызов представленя в прямом запросе :
Код
Выбрать все
Select * from data!Viewnom
 



Параметры можно указывать в скобках? (если параметризированное)
На лету создавать представления - видимо никак?
При трехкратном обращении к представлению в одном запросе - оно будет вычеслено один раз,
или 3 раза?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #27 - 16. Августа 2007 :: 13:23
Печать  
Код
Выбрать все
Select * from Viewnom 


и в строке подключения OLEDB указать вместо каталога с DBF-ками путь к dbc.

по остальным вопросам - хз.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: "Хранимые процедуры" для vfpoledb
Ответ #28 - 16. Августа 2007 :: 14:38
Печать  
Да, пожалуй это сильно! Улыбка

Наверно пора FAQ по ДБФ заводить Улыбка
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: "Хранимые процедуры" для vfpoledb
Ответ #29 - 17. Августа 2007 :: 07:45
Печать  
kiruha писал(а) 16. Августа 2007 :: 14:38:
Да, пожалуй это сильно! Улыбка

Наверно пора FAQ по ДБФ заводить Улыбка

Тока сначала изучить поподробнее
"О сколько нам открытий чудных..."
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать