:: Не фоксом единым
Как из программы на VFP организовать запуск sql-скриптов?
seg856
Автор

Сообщений: 272
Дата регистрации: 23.09.2010
Как из программы на VFP организовать запуск sql-скриптов для серверов mysql, MS SQL Server?
Это нужно для обновления БД: создание, изменение таблиц, добавление каких-то данных и т.д.

Например, в файле с расширением .sql находятся sql-инструкции.
Я выбираю этот файл, и все инструкции применяются на сервере mysql или MS SQL Server.

Причем не по очереди, а как в среде для работы с БД: может там инструкции для создания хранимой процедуры или несколько SQL-запросов одной транзакцией.

Как это примерно сделать?
Ratings: 0 negative/0 positive
Re: Как из программы на VFP организовать запуск sql-скриптов?
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
SQLEXEC()


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Как из программы на VFP организовать запуск sql-скриптов?
seg856
Автор

Сообщений: 272
Дата регистрации: 23.09.2010
Но sqlexec() выполняет по одному запросу.
А чтобы создать хранимую процедуру, нужно выполнять ее целиком
Ratings: 0 negative/0 positive
Re: Как из программы на VFP организовать запуск sql-скриптов?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
seg856
Но sqlexec() выполняет по одному запросу.
Плюньте в лицо тому кто вам сказал такую чушь.
Цитата:
А чтобы создать хранимую процедуру, нужно выполнять ее целиком
Нужно выполнить не процедуру, а пакет создания процедуры. Вот весь пакет и передайте SqlExec на выполнение. Пакет - в терминах MS SQL это все между двумя соседними go.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Как из программы на VFP организовать запуск sql-скриптов?
pasha_usue

Сообщений: 3649
Откуда: Е-бург
Дата регистрации: 06.10.2006
seg856
Но sqlexec() выполняет по одному запросу.
А чтобы создать хранимую процедуру, нужно выполнять ее целиком
SQLEXEC ничего не выполняет. Он передаёт на сервер текст запроса, а затем получает ответ. А вот ваш текст запроса уже может содержать то что вам удобно.

Единственная проблема возникает с MySQL, у которого ODBC-драйвер не даёт выполнить пакет запросов. Но тоже не проблема:
SQLEXEC("BEGIN TRANSACTION;")
SQLEXEC("...")
SQLEXEC("COMMIT TRANSACTION;")

Ps. Соединение только не рвите между SQLEXEC.



Исправлено 1 раз(а). Последнее : pasha_usue, 13.01.17 12:31
Ratings: 0 negative/0 positive
Re: Как из программы на VFP организовать запуск sql-скриптов?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нужно писать парсер для sql файла - при том под каждый сервер он будет СВОЙ. Для MSSQL по идее достаточно ловить команды GO и выполнять в одном SQLEXEC всё что между ними прописано, для других - по другому. Для MySQL, видимо, нужно вычленять из текста каждую SQL команду по отдельности...

Плюс к тому в sql файле могут быть помимо собственно "команд" передаваемых серверу, ещё и специальные инструкции/настройки для штатной утилиты исполнения скриптов того либо иного сервера. Например для Oracle там целый набор set команд и ещё с десяток других. Т.е. в общем случае вряд-ли ты сможешь полноценно сэмулировать исполнение sql скрипта - поэтому лучше собственно через штатную утилиту сервера и выполнять эти самые скрипты. Ну или же делать для подобных целей свои собственные, упрощённые скрипты - чтобы твой парсер их корректно смог разобрать и исполнить. Может быть даже в dbf или XML прописывать отдельные команды - чтобы проще фоксу было их отделять друг от друга.

P.S. Обновлять схему БД изнутри ОБЫЧНОГО пользовательского приложения - очень, нет, ОЧЕНЬ плохая идея. А если писать своё "административное" приложение, то вполне можно из него вызывать штатные утилиты sqlcmd и им подобные...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

© 2000-2024 Fox Club 
Яндекс.Метрика