Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка произвольной строки в выборку SQL (Firebird) / 10 сообщений из 10, страница 1 из 1
21.12.2015, 21:37
    #39133836
offsites
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
Здравствуйте, пните в нужную сторону пожалуйста, самому ничего красивого не придумать.

Задача:
Вставить в выборку SQL (СУБД Firebird) произвольную строку.

Пример из задачи:

12:00-12:30 Подъем - из бд
Свободное время (30 мин.) - произвольная строка высчитана из пред. и след. в случае если есть окно во времени.
13:00-14:00 Завтрак - из бд

Желательно это сделать SQL, т.к. работать будет быстро. Или если есть другие варианты, у меня лично ничего красивого не вышло. Использую Delphi + DBGrid + Fib. С добавлением записи в DBGrid или в DataSet ничего не придумал. С использованием вместо DBGrid обычного грида или ListView - ужасно некрасиво перерисовывается по таймеру (раз в 3 секунды).
...
Рейтинг: 0 / 0
21.12.2015, 22:41
    #39133903
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
offsitesС использованием вместо DBGrid обычного грида или ListView - ужасно
некрасиво перерисовывается по таймеру (раз в 3 секунды).
А ты во-первых, по таймеру-то не перерисовывай. Только когда необходимо.
А во-вторых, старое содержимое не стирай, перерисовывай только изменившиеся ячейки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.12.2015, 23:01
    #39133921
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
offsites,

поскольку кроме указанных двух строк в БД (в этом интервале времени) нет, мне кажется, что задача сводится к втыканию "случайной строки" в кэш датасета между указанными строками. А значит, к SQL не имеет отношения. Иначе я не очень понимаю, как можно "взять" "случайную" строку из БД, которой там нет.
...
Рейтинг: 0 / 0
22.12.2015, 03:27
    #39134019
offsites
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
Dimitry SibiryakovА ты во-первых, по таймеру-то не перерисовывай. Только когда необходимо.
А во-вторых, старое содержимое не стирай, перерисовывай только изменившиеся ячейки.


Спасибо, учту!

По поводу SQL запроса, думал что можно как-то так хитрО:

IF freetime BETWEEN Row.Before AND Row.Afger THEN INSERT VITRUAL RECORD SET VALUES ('HelloWorld!', null) :)
...
Рейтинг: 0 / 0
22.12.2015, 09:29
    #39134131
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
offsites,

ну и фантазии.
...
Рейтинг: 0 / 0
22.12.2015, 09:51
    #39134152
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
offsites, крайне рекомендую прочесть документацию на предмет:

1.Функции работы с датой и временем2.
Код: sql
1.
CREATE OR ALTER PROCEDURE <sp_name>(...)

3.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
FOR
    SELECT ...
      FROM ...
      INTO: ...
  DO
    BEGIN
      .
      .
      SUSPEND
    END



С датой и временем можно работать как с обычной скалярной величиной, где единицей являются сутки. Одна секунда ~0.00069444 суток.
...
Рейтинг: 0 / 0
22.12.2015, 11:01
    #39134216
afgm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
offsitesIF freetime BETWEEN Row.Before AND Row.Afger THEN INSERT VITRUAL RECORD SET VALUES ('HelloWorld!', null) :)
Это SUSPEND внутри хранимой процедуры.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table test_data(id int, text varchar(50));
insert into test_data values(1, '12:00-12:30 Подъем - из бд');
insert into test_data values(2, '13:00-14:00 Завтрак - из бд');

create procedure test_proc
returns(text varchar(50))
as
begin
  for select text from test_data into :text
  do
  begin
    suspend;
    -- if (есть записи после/до)
      text = 'Свободное время (30 мин.)';
      suspend;
  end
end

select * from test_proc


Если очень сильно захотеть, то можно и одним запросом.
...
Рейтинг: 0 / 0
22.12.2015, 13:40
    #39134498
offsites
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
afgm,

За идею спасибо, похоже на то что может выйти. Буду пробовать.
...
Рейтинг: 0 / 0
22.12.2015, 13:51
    #39134526
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
DBConstructorС датой и временем можно работать как с обычной скалярной величиной, где единицей являются сутки. Одна секунда ~0.00069444 суток.
Прошу прощения за опечатку. Конечно же имелась в виду одна минута (1/(24*60)) ~0.00069444
...
Рейтинг: 0 / 0
02.01.2016, 02:07
    #39141349
offsites
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка произвольной строки в выборку SQL (Firebird)
afgm,

Да, получилось, спасибо!
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка произвольной строки в выборку SQL (Firebird) / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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