|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
вызов функции из SQL запроса
здравствуйте уважаемые
хотелосьбы сделать нечто подобное))) //************************************************** *** sql:='update table1 set a=1, b=2, c=f1(a,b) '; ADOCommand1.CommandText:=sql; ADOCommand1.Execute; .... function f1(a,b:integer):integer; begin; ... ... ... result:=...; end; //************************************************** *** т.е. из sql запроса вызывать функцию из программы, причём в качестве аргументов пересалать данные из таблица (а, b) как это можно организовать??? |
#2
|
||||
|
||||
Немного не понятно конечно.
Но постораюсь. А может что типа вот этого подойдет?? Код:
sql:='update table1 set a=1, b=2, c=' +IntToStr(f1(a,b)); ADOCommand1.CommandText:=sql; ADOCommand1.Execute; .... function f1(a,b:integer):integer; begin; ... result:=...; end; From VasYa with LoVe... |
#3
|
|||
|
|||
спасибо за ответ
НО.... в функцию fun1(a,b) не будут переданы переменные a и b т.к. они являются именами полей таблицы table1 и обращение к ним возможно только в теле sql запроса sql:='тело sql запроса' + внешнии функции; в этом-то как раз и кроется вся проблема как из тела sql запроса сделать вызов функции используя данные полей таблицы... |
#4
|
|||
|
|||
Что такое SQL запрос? Это СТРОКА. Delphi не имеет механизма макросов и вызовы процедур из строки не выполнимы (строка для компилятора прозрачна).
Кто мешает после выполнения запроса вызвать ту же функцию f1 и передать ей в качестве параметров результат запроса? Не забывайте делать резервные копии |
#5
|
|||
|
|||
ситуация следующая, ...
есть таблица table1, в ней 3 поля, A,B,C причём A и B поля мы заполняем а С вычисляется по очень сложному алгоритму)))настолько сложному что в sql запрос поместить весь алгоритм нельзя))поэтому алгоритм расчёта поля С выведен в отдельную функцию аргументами которой является информация из полей A и B, для каждой записи в таблице свои данные полей A и B а соответственно и C есть вариант перебора по порядку всех записей таблицы , расчёта, и занесения данных в поле C, но это во-первых громоздко, во вторых, при большой БД это занимает много время, поэтому хотелось бы весь расчёт поля C вывести в sql запрос, со ссылкой на внешнюю функцию уфффф, всё))) |
#6
|
|||
|
|||
Такие вещи в SQL базах делаются в хранимых процедурах (Stored procedure).
Не забывайте делать резервные копии |
#7
|
|||
|
|||
ну инфу по хранимым процедурам нашёл, вроде как похоже на правду, ща позаморачиваюсь, надеюсь что разберусь)
потом отпишусь) |
#8
|
|||
|
|||
Ну, можно и сделать в виде функции.
только функция должна возвращать СТРОГО одно значение. Далее поверх таблицы, состоящей, кстати, только из 2х полей (а, b), делаем вьюху, которая и будет в качестве третьего поля собержать вызов функции. Если вью надо апдейтить, то пишешь соотв. триггер на нее. Преимущества. Расчет будет производиться только для реально выбранных записей. при отсутсвии необходимости третьего значения можно заселектиться прямо из таблицы. Недостатки. Расчет будет производиться каждый раз,к огда получается запись из этой вью. |