Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 09:28   #1
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию Вызов функции из процедуры

Привет друзья! Очередной ламерский вопрос от меня ))
Есть форма со всякими чекбоксами, комбами и эдитами. При нажатии на кнопочку "Сформировать" делался sql запрос на условия которого влияли вышеуказанные всяческие элементы форм. Все работало очень замечательно, пока в один прекрасный день не было решено формировать не только грид, но и отчетик (что то типа qrep'a) и выгрузку в ексель. Опечлился я и начал думать. Повесить несколько кнопок на форму (Сформировать - Отчет - Экспорт) и выполнять один и тот же sql запрос, просто выводить данные в разные формы. Значится надо мне запихнуть формирование текста запроса в функцию и благополучно вызывать ее из нужных мне процедуров...вот тут то и засада ждала меня. Делаю так:
Код:
//Объявляю.
  private
    { Private declarations }
    function STRsql(sENDER:TObject):string;
//******Собстна сама функция************
function strSQL(Sender: TObject):string;
var
  sData, sClient, sAccountNum, sDelType, sProfSys,
  sdif, sFast, sDop, sPrepare, sOtgruzka, sPrint, sDatePr:string;
//******Вызов из процедуры****************
    s:='Where gotovnost.Id<>Null'+strSQL(Sender);
А теперь вопрос знатокам. Как мне в функцию передать значения чекбоксиков и прочей лабуды из формы???
з.ы. и вообще, в принципе я прально мыслю??? или у меня бред полный???
Brother Abbat вне форума Ответить с цитированием
Старый 30.11.2011, 10:12   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Волшебное слово параметры))
Код:
function strSQL(Sender: TObject; ch1, ch2, ch3:boolean; ed1, ed2:string и тд ):string;
просто укажите в функции нужное количество и тип параметров, при вызове передавайте их, и используйте в теле функции.

Sender: TObject тут полезно использовать, если нужно узнать обработчик какого объекта вызвал функцию.

Только если данные одни и теже, почему бы для отчётов и т.п. не использовать уже заполнений датасет?

Последний раз редактировалось vovk; 30.11.2011 в 10:18.
vovk вне форума Ответить с цитированием
Старый 30.11.2011, 10:43   #3
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию

ага...т.е. я должен передавать нужные мне параметры элементов форм? а на сколько тогда некорректно будет просто скопипастить сей код формирования текста sql запроса из одной процедуры в другую ???
Brother Abbat вне форума Ответить с цитированием
Старый 30.11.2011, 12:51   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Да разницы особой нет, хотите копируйте.
Но лучше обьявите функцию как метод класса вашей формы, и обращайтесь к обьектам на форме в теле функции.



ТОлько я всё равно не понимаю зачем ещё раз запрашивать набор данных, если он уже есть в 1 датасете.

Последний раз редактировалось vovk; 30.11.2011 в 12:55.
vovk вне форума Ответить с цитированием
Старый 30.11.2011, 13:06   #5
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию

спасибо за ответ, правда про датасет и набор данных ничего не понял )) буду копипастить
Brother Abbat вне форума Ответить с цитированием
Старый 30.11.2011, 13:31   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Да вы правильно делали

Код:
 Объявляю. 
private
    { Private declarations }
    function STRsql(sENDER:TObject):string;
//******Собстна сама функция************
function Tform1.strSQL(Sender: TObject):string;
var
  sData, sClient, sAccountNum, sDelType, sProfSys,
  sdif, sFast, sDop, sPrepare, sOtgruzka, sPrint, sDatePr:string;
 ch1:boolean;
begin 
sData:=edit1.text;
ch1:=checkbox1.checked;
//и тд
result:=......
end;
//******Вызов из процедуры****************
    s:='Where gotovnost.Id<>Null'+strSQL(Sender);

Последний раз редактировалось vovk; 30.11.2011 в 13:37.
vovk вне форума Ответить с цитированием
Старый 30.11.2011, 13:50   #7
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию

аааа....вот теперь все понял, спасибо огромнейшее )))
Brother Abbat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Вызов функции/процедуры из другого окна программы zotox Помощь студентам 8 30.07.2009 04:31
Вызов процедуры/функции W0LF Общие вопросы Delphi 7 26.07.2009 23:53
Вызов процедуры при обьявлении функции ivannikov Общие вопросы Delphi 6 12.03.2008 13:20
Вызов процедуры Stanislav Общие вопросы Delphi 9 22.11.2007 19:01