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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 20:32   #1
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию Упрощение кода программы за счет использования процедур

Пишу продукт в котором имползуется много обращений к базе типа
Код:
Query1.Close;
Query1.SQL.Clear;
Query1.DataBaseName:=ExtractFilePath(ParamStr(0))+ 'Base\';
Query1.sql.Text:='........';//здесь разница в самом запросе к базе
Query1.ExecSQL;//здесь разница в экзек или опен
вопрос в том как замутить свою процедуру чтобы в программе вызывать ее из любой формы передавая ей только сам запрос как STRING и опен или екзек как ...(незнаю)?
uraura вне форума Ответить с цитированием
Старый 26.03.2009, 20:39   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Сделайте как рекомендуют разработчики - все датасеты в отдельном датамодуле.
Тогда никаких трудностей с обращением к любому из них из любой формы (модуля).
А вот эта строка:
Query1.DataBaseName:=ExtractFilePat h(ParamStr(0))+ 'Base\';
по идее, должна быть только в одном месте программы, где всем датасетам потом "чохом" назначается расположение базы:
Table1.DataBaseName:=Query1.DataBas eName; и так далее...
Обращение к Query1 (как в вашем примере) оформите в виде своей процедуры с параметрами - сам текст для сиквела и флажок, по которому будет вызываться либо метод Open, либо ExecSQL.
Если пишете Query1.sql.Text:= , то строка Query1.SQL.Clear; не нужна...

Последний раз редактировалось mihali4; 26.03.2009 в 20:43.
mihali4 вне форума Ответить с цитированием
Старый 26.03.2009, 20:45   #3
skeletishe
 
Регистрация: 26.03.2009
Сообщений: 8
По умолчанию

думаю что - то типо того

procedure MoyProcedure(t:string; x:boolean);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.DataBaseName:=ExtractFilePat h(ParamStr(0))+ 'Base\';
Query1.sql.Text:=t; //'........';//здесь разница в самом запросе к базе
if x then Query1.ExecSQL
else Query1.openSQL;//здесь разница в экзек или опен
end;
Программист для виндовс - это хитрый садомазохист.
skeletishe вне форума Ответить с цитированием
Старый 26.03.2009, 20:55   #4
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Сделайте как рекомендуют разработчики - все датасеты в отдельном датамодуле.
Извини пожалста но я новичек в этом и как бы самоучка не мог бы поподробнее
Цитата:
Сообщение от mihali4 Посмотреть сообщение
А вот эта строка:
Query1.DataBaseName:=ExtractFilePat h(ParamStr(0))+ 'Base\';
по идее, должна быть только в одном месте программы, где всем датасетам потом "чохом" назначается расположение базы:
где разместить назначение и нужно ли для каждого компонента в отдельности это делать или как?
Цитата:
Сообщение от mihali4 Посмотреть сообщение
Table1.DataBaseName:=Query1.DataBas eName; и так далее...
Обращение к Query1 (как в вашем примере) оформите в виде своей процедуры с параметрами - сам текст для сиквела и флажок, по которому будет вызываться либо метод Open, либо ExecSQL.
Если пишете Query1.sql.Text:= , то строка Query1.SQL.Clear; не нужна...
блин чувствую себя таким тупым: что есть сиквел и флажок не поясниш?
Если не трудно кусками кода премируй (пожалеста)
uraura вне форума Ответить с цитированием
Старый 26.03.2009, 20:59   #5
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию

Цитата:
Сообщение от skeletishe Посмотреть сообщение
думаю что - то типо того

procedure MoyProcedure(t:string; x:boolean);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.DataBaseName:=ExtractFilePat h(ParamStr(0))+ 'Base\';
Query1.sql.Text:=t; //'........';//здесь разница в самом запросе к базе
if x then Query1.ExecSQL
else Query1.openSQL;//здесь разница в экзек или опен
end;
Так если я пропишу эту процедуру в первой форме ее можно будет вызвать из формы 8 например?
uraura вне форума Ответить с цитированием
Старый 26.03.2009, 21:04   #6
skeletishe
 
Регистрация: 26.03.2009
Сообщений: 8
По умолчанию

помоему ограничений нет, главное правильно к ней обратиться.
forma1.MoyProcedure('текст';false);

Цитата:
Сообщение от skeletishe Посмотреть сообщение
procedure MoyProcedure(t:string; x:boolean);
"Х" и есть флажок.
Программист для виндовс - это хитрый садомазохист.
skeletishe вне форума Ответить с цитированием
Старый 26.03.2009, 21:07   #7
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию

Компилить отказывается по причине отсутствия квери1 на первой форме!
Просто ужасть!Прописал на юнит два там квери1 есть но ругается также!
Код:
[Error] 
Unit2.pas(47): Undeclared identifier: 'Query1'
[Error] Unit2.pas(47): '(' expected but ';' found
[Error] Unit2.pas(48): Missing operator or semicolon // 3 штуки Unit2.pas(49)Unit2.pas(50) 
.... и еще много всего

Последний раз редактировалось uraura; 26.03.2009 в 21:21.
uraura вне форума Ответить с цитированием
Старый 26.03.2009, 21:14   #8
skeletishe
 
Регистрация: 26.03.2009
Сообщений: 8
По умолчанию

пропиши процедуру в нужной форме.
и вызывай процедуру типо
формаХ.процедура()
Программист для виндовс - это хитрый садомазохист.
skeletishe вне форума Ответить с цитированием
Старый 26.03.2009, 21:34   #9
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию

Дак прописал в форме2 (там запрос нужен и все компоненты стоят) а до вызова не доходит дело то на самой процедуре выдает что всего нету!
uraura вне форума Ответить с цитированием
Старый 26.03.2009, 21:46   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

File->New->Data Module
На него "накидываем" все Query, Table и что еще нужно.
Обращение из любой формы будет
Код:
Datamodule1.Query1.SQL.Text:=...
Сиквел=SQL
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
заблуждения на счет программистов Crazy_Wolfy Свободное общение 20 25.07.2008 11:39
Оптимизация кода программы insi Фриланс 2 17.05.2008 18:30
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51
Коррекция кода программы в режиме Runtime Simply-Art Общие вопросы Delphi 5 12.03.2007 15:33