powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Создание хранимой процедуры b триггера из C#
18 сообщений из 18, страница 1 из 1
Создание хранимой процедуры b триггера из C#
    #38517454
gudus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, подскажите, возможно ли из C# добавить в базу хранимую процедуру, а потом использовать её как триггер для таблицы!!
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38517517
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам сюда Supported Visual FoxPro Commands and Functions in OLE DB Provider
Из текста следует что CREATE TRIGGER не поддерживается
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38517597
gudus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch,
Спасибо, да я читал это. Но пока даже append procedure не срабатывает(. а про триггеры это печально(.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38518056
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFP9 helpAPPEND PROCEDURES is not available in a distributed executable file
Т.е. append procedure даже из родного EXE не сработает. Не говоря уже об OLE DB.

Если бы Вы описали саму задачу, а не выбранный Вами способ решения, возможно, Вам посоветовали бы другие способы решения. Модификация структуры данных "на лету", да еще и из стороннего приложения, крайне порочная практика. По возможности, такие решения следует избегать.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38518233
gudus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМVFP9 helpAPPEND PROCEDURES is not available in a distributed executable file
Т.е. append procedure даже из родного EXE не сработает. Не говоря уже об OLE DB.

Если бы Вы описали саму задачу, а не выбранный Вами способ решения, возможно, Вам посоветовали бы другие способы решения. Модификация структуры данных "на лету", да еще и из стороннего приложения, крайне порочная практика. По возможности, такие решения следует избегать.

Задача: есть база дынных fox pro, которая установлена на как минимум 50-ти компьютерах. В неё необходимо добавить одну таблицу, пару процедур, а также на уже существующие таблицы повесить триггеры на update, insert и delete. Вот и вся задача. т.к. я не очень разбираюсь в visual fox pro, да и разбираться особо времени нет, решил все сделать на C# через oledb.
Что получилось сделать на данных момент:
1. через EXECSCRIPT() добавить процедуру
2. создать таблицы(обычный create table)
3. Триггеры, с ними тяжко(... на рабочей машине где установлен vfp через VisualFoxpro.FoxApplicationClass из C# получилось всё,
но вот при тестах на другой машине, винда и программа(база для теста), ни чего не вышло. Ругается на не возможность использовать COM объект, и пока на 3-й день копаний результат хреновый..(

Если есть какие-нибудь предложения, буду очень рад, любая идея(нормальная=)), обязательно опробую и отпишусь!
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38518305
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gudus3. Триггеры, с ними тяжко(... на рабочей машине где установлен vfp через VisualFoxpro.FoxApplicationClass из C# получилось всё,
но вот при тестах на другой машине, винда и программа(база для теста), ни чего не вышло. Ругается на не возможность использовать COM объект, и пока на 3-й день копаний результат хреновый..(
VisualFoxpro.FoxApplicationClass есть только там где установлен vfp. Но он стоит только у разработчика, у пользователя его обычно нет, т.к. для работы фоксового EXE он не нужен, кроме того на установку VFP нужна лицензия от MS, а для запуска EXE - нет.

За три для мог бы уже на фоксе свой EXE написать и его использовать. Как я понимаю VisualFoxpro.FoxApplicationClass нужен чтоб родные команды VFP выполнить. Тоже самое что вписать их в PRG файл и запустить в фоксе.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38518313
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
APPEND PROCEDURES можно заменить на прямое лазанье в контейнер БД
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Close data all
USE 'MyBase.DBC'
Locate FOR Objectname = 'StoredProceduresSource'
If FOUND() .and. file([stored.src])
	append MEMO Code from [stored.src] overwrite
	delete file stored.src
Endif
Locate FOR Objectname = 'StoredProceduresObject'
If FOUND() .and. file([stored.srb])
	append MEMO Code from [stored.srb] overwrite
	delete file stored.srb
Endif
close data all


Код должен быть в файлах
stored.src - исходный код (аналог .PRG) (необязательно если руками из IDE никто не полезет)
stored.srb - откомпилированный код (аналог .FXP)

PS Метод нездоровый, но взят из примеров MS генерации базы (утилита GenDBC). Иногда пользовался, проблем не было.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38518323
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь позапускать gendbc.prg (в подпапке фокса Tools\Gendbc\)
Он генерит код для создания базы. Правда там много чего лишнего пишется, для начинающего непонятно будет.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38518532
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gudusЗадача: есть база дынных fox pro, которая установлена на как минимум 50-ти компьютерах. В неё необходимо добавить одну таблицу, пару процедур, а также на уже существующие таблицы повесить триггеры на update, insert и delete. Вот и вся задача. т.к. я не очень разбираюсь в visual fox pro, да и разбираться особо времени нет, решил все сделать на C# через oledb.
Что получилось сделать на данных момент:
1. через EXECSCRIPT() добавить процедуру
2. создать таблицы(обычный create table)
3. Триггеры, с ними тяжко(... на рабочей машине где установлен vfp через VisualFoxpro.FoxApplicationClass из C# получилось всё,
но вот при тестах на другой машине, винда и программа(база для теста), ни чего не вышло. Ругается на не возможность использовать COM объект, и пока на 3-й день копаний результат хреновый..(

Если есть какие-нибудь предложения, буду очень рад, любая идея(нормальная=)), обязательно опробую и отпишусь!
1. На компьютере, где установлен рабочий FoxPro для разработки делаете все необходимые модификации непосредственно в среде разработки FoxPro
2. На клиентские компьютеры копируете измененные файлы DBC, DCT, DCX (это контейнер базы данных с "телом" хранимых процедур и настройках триггеров) и одну новую таблицу - файлы с расширением DBF, CDX, FPT (DBF- таблица, CDX - индексы, FPT - мемо-поля, может не быть). В данном случае как-то изменять все прочие файлы DBF - не надо, поскольку сделанные изменения их никак не затрагивают

Все. Никаких модификаций "на лету" делать не надо. Все сводится к банальной замене файлов, поскольку информация о триггерах хранится вовсе не в файле DBF, а в контейнере базы данных (DBC).

Да, на всякий случай, разумеется, перед модификацией и копированием сделайте резервную копию всех файлов.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38518693
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ2. На клиентские компьютеры копируете измененные файлы DBC, DCT, DCX (это контейнер базы данных с "телом" хранимых процедур и настройках триггеров) и одну новую таблицу - файлы с расширением DBF, CDX, FPT (DBF- таблица, CDX - индексы, FPT - мемо-поля, может не быть). В данном случае как-то изменять все прочие файлы DBF - не надо, поскольку сделанные изменения их никак не затрагивают
Не всегда это работает. После такой процедуры БД может перестать открываться только по причине испорченного контейнера БД.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38519083
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВладимирМ2. На клиентские компьютеры копируете измененные файлы DBC, DCT, DCX...
Не всегда это работает. После такой процедуры БД может перестать открываться только по причине испорченного контейнера БД.
"Контейнер БД" - это и есть DBC, DCT, DCX. "Испорченный контейнер БД" - это повреждение одного из этих файлов или их рассинхронизация. Т.е. ошибка копирования. Как следствие, при возникновении такой ошибки надо просто повторить копирование.

Если же у разных клиентов разные версии контейнера БД, ну, это ты сам себе злобный буратино Придется делать несколько модификаций контейнера БД для каждой версии.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38519380
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЕсли же у разных клиентов разные версии контейнера БД, ну, это ты сам себе злобный буратино Придется делать несколько модификаций контейнера БД для каждой версии.
Структура БД одинаковая, но ее формирование по времени и порядку разное. В таблицах набор полей одинаковый, но порядок полей немного отличается. С точки зрения работы с БД таблицы идентичны, а контейнеры не взаимозаменяемы.

Наблюдал такую проблему с таблицей настроек (setting.dbf), где одна запись и куча полей, многие имели больше 10 символов в названии.
Автообновление происходило так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if type('setting.cGlobalParam2') != 'C'
   alter table setting add column cGlobalParam2 c(10)
endif
if type('setting.nGlobalParam3') != 'N'
   alter table setting add column nGlobalParam3 i
endif
if type('setting.nGlobalParam1') != 'N'
   alter table setting add column nGlobalParam1 i
endif
...


При этом настройки появлялись не одновременно, а по мере обновления проги, т.е. у одного клиента сначала появилось nGlobalParam1, затем cGlobalParam2 и nGlobalParam3, а другой несколько обновлений пропустил и у него разом добавились (в порядке 2,3,1). В результате контейнеры переставали быть взаимозаменяемыми.
Глубоко не разбирался, возможно еще что влияло, но структура таблицы была одинакова, только поля в разном порядке.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38519901
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TС точки зрения работы с БД таблицы идентичны, а контейнеры не взаимозаменяемы.

Подтверждаю сказанное - контейнеры БД в фоксе подменять в общем случае нельзя, такой номер проходит только в простых случаях, коих в реальных приложениях мало.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38519937
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я считаю как раз наоборот. Как правило , в подавляющем большинстве случаев, подмена контейнера БД вполне себе штатный механизм обновления. В некоторых исключительных случаях, так делать нельзя. Но это именно исключения (!) обусловленные либо "кривой" структурой базы данных (Alter Table в рабочем приложении - именно что "кривое" решение), либо особо сложным обновлением.

В данном конкретном случае не вижу никаких проблем с подменой DBC. Если, конечно, само приложение было реализовано "нормально". Без "выкрутасов"...

Народ, Вы учитывайте, что, во-первых, автор вопроса не в курсе разных "заморочек" и тонкостей в структурах. А, во-вторых, в случае, если подмена DBC - не проходит, то еще далеко не факт, что прямая модификация DBC как DBF тоже подойдет. Например, что делать с версионностью? Прежде чем пугать новичка разными ужасами, сначала надо попробовать простое решение...
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38519965
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

беру продуктив в качестве игрушечной БД, в процессе разработки все изменения записываю, т.е. в наличии даже очередность изменений, но их достаточно много, хотя бы пару десятков - так вот, если повторить всё на продуктиве и вернуть контейнер из тестовой, то привет, никакой валидейт больше не поможет. Т.ч. просто пишу скриптец для апдейта с одной версии БД до следующей, только им меняю что-либо в игрушечной БД, им же и в реальных - нет проблем.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38520143
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЛично я считаю как раз наоборот. Как правило , в подавляющем большинстве случаев, подмена контейнера БД вполне себе штатный механизм обновления. В некоторых исключительных случаях, так делать нельзя. Но это именно исключения (!) обусловленные либо "кривой" структурой базы данных (Alter Table в рабочем приложении - именно что "кривое" решение), либо особо сложным обновлением.
Бред. Чего это вдруг Alter Table стал кривым решением? Что кривого в том что потребовалось добавить поле в таблицу? Например, справочник товаров решили поделить на группы. Или из непредсказуемого: вышел закон требующий указывать в документах инфу ранее никому не нужную.
Что кривого в том что по мере развития рабочего приложения требуется изменение структуры БД?
ВладимирМНарод, Вы учитывайте, что, во-первых, автор вопроса не в курсе разных "заморочек" и тонкостей в структурах.
Судя по вопросам он теорию знает, а то что не в курсе тонкостей фокса - это мелочи. Надеюсь знает что бэкапы надо делать.
ВладимирМА, во-вторых, в случае, если подмена DBC - не проходит, то еще далеко не факт, что прямая модификация DBC как DBF тоже подойдет.
Например, что делать с версионностью?
Вот как раз из-за версионности приходится так делать. Как выше писал в примерах от MS так сделано. Посмотри что gendbc генерит.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38521187
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЧто кривого в том что по мере развития рабочего приложения требуется изменение структуры БД?
Зависит от того, когда именно происходит изменение структуры. Если в процессе "накатывания" обновления (новая версия), то это нормально. А если в процессе работы приложения, то это в корне не верно.

По Вашему описанию я понял так, что у Вас непосредственно пользователь прямо в процессе работы приложения добавляет поля. Поскольку в противном случае непонятно, откуда может взяться разный порядок следования полей. Ведь источник обновления версий один. Т.е. код "накатывания" обновлений не может быть разным. Значит, при "штатном" обновлении версии порядок полей у всех таблиц будет одинаковым.

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

1. Создать Backup
2. Alter Table для создания/изменения нужных полей (только имя, тип, размер, то, что хранится в DBF) и индексов
3. Если необходимо, Update+Insert+Delete для заполнения/изменения новых/старых структур
4. Замена DBC

Через Alter Table меняется только то, что не хранится в DBC, а потом просто подменяется старый DBC на новый. Все. Нет необходимости создавать дополнительные проблемы.

Dima TКак выше писал в примерах от MS так сделано. Посмотри что gendbc генерит.
Так нельзя же "тупо" копировать то, что дает MS без понимания смысла. Надо понимать что это пример, преследующий вполне определенную цель. Создать ОДИН файл для генерации ПУСТОЙ базы данных. В случае модификации (обновления) структуры такой подход является ущербным. Особенно, в случае необходимости поддержания версионности.
...
Рейтинг: 0 / 0
Создание хранимой процедуры b триггера из C#
    #38521191
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XAndyберу продуктив в качестве игрушечной БД, в процессе разработки все изменения записываю
Надо не изменения записывать, а "тупо" написать процедуру! Т.е. никаких модификаций "вручную" через дизайнеры и построители. Только и исключительно PRG. Тогда никаких разночтений быть не может. Не после изменений код писать, а изменять через код!

Да, это несколько противоречит тому, что я посоветовал автору темы, но человек не в курсе разных тонкостей и нюансов программирования на FoxPro и здесь речь идет о создании одной новой таблицы. Т.е. проблем быть не должно.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Создание хранимой процедуры b триггера из C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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