Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Насчет свойств формирования SQL запроса / 25 сообщений из 64, страница 1 из 3
22.11.2017, 14:31:56
    #39557529
Насчет свойств формирования SQL запроса
Здравствуйте. Есть класс, реализующий доступ к некоторой БД.

Код: 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
22.11.2017, 14:44:43
    #39557538
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
Сведем очередь c ума,

А зачем изначально разделили SQLText и SQLMore?
...
Рейтинг: 0 / 0
22.11.2017, 14:45:31
    #39557540
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
Сведем очередь 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
22.11.2017, 14:46:29
    #39557542
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
Сведем очередь 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
22.11.2017, 14:48:45
    #39557544
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
DarkMasterСведем очередь c ума,

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

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

Развожу руками :) Я знаю одну либу, где у Query есть доп. проперти типа SQLWhere, SQLOrder и т.п. - но эти свойства используются для получения доступа к отдельным частям запроса, не более, и являются продуктом парсинга SQL запроса - применимы эти проперти в 0.1% случаев, в остальном в принципе бесполезны. Ну если ТС хочет игру в угадайку "а чего я сейчас сделаю знаешь?" - пусть себе.
...
Рейтинг: 0 / 0
22.11.2017, 15:01:54
    #39557562
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
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
22.11.2017, 15:18:18
    #39557575
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
Dimitry SibiryakovНу, например, потому, что "назначить текст запроса" и "добавить к запросу ещё одно
условие" это две разные операцииНу да. И
SQL.Text :=
и
SQL.Text.Add

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

А местами - просто невозможно (если у "подкладки" запрос хранится не в TStrings).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.11.2017, 15:45:45
    #39557609
Насчет свойств формирования SQL запроса
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
22.11.2017, 15:48:43
    #39557611
Насчет свойств формирования SQL запроса
Dimitry Sibiryakov...Но что имел на мысли автор кода - неясно...


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

PS: Я в коде реализаторов накосячил: 20975499
...
Рейтинг: 0 / 0
22.11.2017, 15:52:49
    #39557616
Насчет свойств формирования SQL запроса
Сведем очередь 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
22.11.2017, 16:02:21
    #39557628
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
Сведем очередь c ума,

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

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


Такие?
Или в чем проблема?
...
Рейтинг: 0 / 0
22.11.2017, 22:35:27
    #39557916
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
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
22.11.2017, 22:40:28
    #39557919
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчет свойств формирования SQL запроса
andreymx,

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

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

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

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

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

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

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


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