powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Насчет свойств формирования SQL запроса
25 сообщений из 64, страница 1 из 3
Насчет свойств формирования SQL запроса
    #39557529
Здравствуйте. Есть класс, реализующий доступ к некоторой БД.

Код: pascal
1.
2.
type
  TMyQuery = class(...)

...
Со свойствами, реализующими функционал формирования SQL запросов:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
  private
    fSQL: TStrings;
    procedure SetSQLMore(const aValue: string);
    procedure SetSQLText(const aValue: string);
    function GetSQLText: string;
  public
    property SQLText: string read GetSQLText write SetSQLText;
    property SQLMore: string write SetSQLMore;
  end;

implementation

function TMyQuery.GetSQLText: string;
begin
  Result := fSQL.Text
end;

procedure TMyQuery.SetSQLMore(const aValue: string);
begin
  fSQL.Text := aValue
end;

procedure TMyQuery.SetSQLText(const aValue: string);
begin
  fSQL.Add(aValue);
end;


Вот так пользоваться:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  fMyDS: TMyQuery;
begin
...
  fMyDS.SQLText := 'select * from MyTable mt';
  fMyDS.SQLMore := '  where mt.Filed1 is not null';
  fMyDS.SQLMore := '    and mt.Filed2 = 42';


Все нормально, но выглядит подозрительно. Может, просто создать паблик - свойство
Код: pascal
1.
    property SQL : TStrings read fSQL;


?
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557538
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сведем очередь c ума,

А зачем изначально разделили SQLText и SQLMore?
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557540
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сведем очередь c ума
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function TMyQuery.GetSQLText: string;
begin
  Result := fSQL.Text
end;

procedure TMyQuery.SetSQLMore(const aValue: string);
begin
  fSQL.Text := aValue
end;

Поменяй местами названия этих функций и начнет работать, как ты хочешь.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557542
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сведем очередь c ума
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TMyQuery.SetSQLMore(const aValue: string);
begin
  fSQL.Text := aValue
end;

procedure TMyQuery.SetSQLText(const aValue: string);
begin
  fSQL.Add(aValue);
end;

Тю, блин, этих.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557544
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterСведем очередь c ума,

А зачем изначально разделили SQLText и SQLMore?Это наверно специально, секретный код пишут. Чтоб потом, даже если исходники украдут, никто не понял ничего. Тут сам автор, видишь, уже в трех строках запутался.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557547
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Да накой плодить кучу геттеров/сеттеров для работы с одним текстом SQL запроса? С ростом числа таких пропертей получаем неоднозначное поведение (SQLMore это что - "дайте две"?) + провоцируем "забывание" установки какого-то свойства + сложность понимания кода.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557549
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterпровоцируем "забывание" установки какого-то свойства + сложность понимания кода.Ну я думал, в этом и смысл.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557557
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Развожу руками :) Я знаю одну либу, где у Query есть доп. проперти типа SQLWhere, SQLOrder и т.п. - но эти свойства используются для получения доступа к отдельным частям запроса, не более, и являются продуктом парсинга SQL запроса - применимы эти проперти в 0.1% случаев, в остальном в принципе бесполезны. Ну если ТС хочет игру в угадайку "а чего я сейчас сделаю знаешь?" - пусть себе.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557562
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterДа накой плодить кучу геттеров/сеттеров для работы с одним текстом SQL запроса?

Ну, например, потому, что "назначить текст запроса" и "добавить к запросу ещё одно
условие" это две разные операции. Но что имел на мысли автор кода - неясно. Возможно,
некоторую дополнительную обработку текста (типа автоматического добавления where и and по
необходимости):
Код: sql
1.
2.
3.
fMyDS.SQLText := 'select * from MyTable mt';
fMyDS.SQLMore := 'mt.Filed1 is not null';
fMyDS.SQLMore := 'mt.Filed2 = 42';


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557575
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу, например, потому, что "назначить текст запроса" и "добавить к запросу ещё одно
условие" это две разные операцииНу да. И
SQL.Text :=
и
SQL.Text.Add

для этого использовать конечно же не интересно.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557595
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockдля этого использовать конечно же не интересно.

А местами - просто невозможно (если у "подкладки" запрос хранится не в TStrings).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557609
YuRockСведем очередь c ума
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TMyQuery.SetSQLMore(const aValue: string);
begin
  fSQL.Text := aValue
end;

procedure TMyQuery.SetSQLText(const aValue: string);
begin
  fSQL.Add(aValue);
end;

Тю, блин, этих.

Да. :)
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557611
Dimitry Sibiryakov...Но что имел на мысли автор кода - неясно...


SQLText заменяет весь SQL текст.
SQLMore добавляет текст к уже имеющемуся.

PS: Я в коде реализаторов накосячил: 20975499
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557616
Сведем очередь c умаYuRockпропущено...
Тю, блин, этих.

Да. :)

Вот так должно быть:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
type
  TMyQuery = class(...)
...
  private
    fSQL: TStrings;
    procedure SetSQLMore(const aValue: string);
    procedure SetSQLText(const aValue: string);
    function GetSQLText: string;
  public
    property SQLText: string read GetSQLText write SetSQLText;
    property SQLMore: string write SetSQLMore;
  end;

implementation

function TMyQuery.GetSQLText: string;
begin
  Result := fSQL.Text
end;

procedure TMyQuery.SetSQLText(const aValue: string);
begin
  fSQL.Text := aValue
end;

procedure TMyQuery.SetSQLMore(const aValue: string);
begin
  fSQL.Add(aValue);
end;
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557628
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сведем очередь c ума,

Введи еще тогда свойство Filter :string и Filtered:boolean... Вещь нужная кстати.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557656
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не удивляюсь, что потом находятся противники ООП. Я тоже против такого 'ООП' :)
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557692
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сведем очередь c ума,

А если у Вас будет запрос с параметрами
parambyname()......
как Ваша модель будет работать ?
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557892
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что, в Делфи многострочные литералы в ближайшие 10-20 лет не появятся?
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557911
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxа что, в Делфи многострочные литералы в ближайшие 10-20 лет не появятся?
Код: pascal
1.
2.
3.
4.
SQL.Add(
  '1234'#13#10 +
  'qwer'
);


Такие?
Или в чем проблема?
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557916
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockandreymxа что, в Делфи многострочные литералы в ближайшие 10-20 лет не появятся?
Код: pascal
1.
2.
3.
4.
SQL.Add(
  '1234'#13#10 +
  'qwer'
);



Такие?
Или в чем проблема?такие
Код: pascal
1.
2.
3.
4.
5.
6.
SQL.Add('
select *
  from table1 t1
   left join table2 t2
      on t1.id1 = t2.id2
 where t2.name = :p_name');
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557919
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

не думаю, что такое появится. Хотя не знаю, но мне лично не особо и нужно. Я плюсики ставлю и не жужжу. Тем более, символы переноса строки могут быть разными.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557928
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв Делфи многострочные литералы в ближайшие 10-20 лет не появятся?

Врятли. Корни растут из pascal. Да и не нужно это особо никому, мне кажется.

У меня возле баз довольно много обвязки, целые запросы я использую не так часто, чаще 'конструкторы' запросов. Очень удобно.

авторА если у Вас будет запрос с параметрами

Написал небольшую процудерку, все запросы парсятся, строчные параметры заменяются на ':Fieldn' (n = 0,1,2,3), параметры добавляются в компоненту с помощью ParamByName и делается запрос. Удобно - само всё обрабатывается.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557955
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

а можете более детально рассказать (показать пример)
застрял сейчас этим вопросом.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39557971
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxа что, в Делфи многострочные литералы в ближайшие 10-20 лет не появятся?
Надеюсь, нет. Я понимаю их пользу для убогих инструментов типа Явы, но в Делфи они будут только провоцировать плохой стиль программирования.
...
Рейтинг: 0 / 0
Насчет свойств формирования SQL запроса
    #39558152
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua,

что конкретно?
...
Рейтинг: 0 / 0
25 сообщений из 64, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Насчет свойств формирования SQL запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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