Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#31: 2016-08-06 17:35:22 ЛС | профиль | цитата
nesco писал(а):
Ну а вдруг
На "а вдруг".
Для SQLite - rowid, в других ROW_NUMBER(), в третьих ещё как-то.
В SQLite сдвиг 1 влево на 16 - (1<<16) в SQL shl(1,16) и т.д.
Так что если
nesco писал(а):
вдруг, это будет другая база
пусть думает её применяющий.
Я просто показал решение в SQLite.

Кстати, если это своя БД, то можно было и иконки в неё засунуть.
------------ Дoбавленo в 17.35:
project231_bd_ok.rar
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1project231_bd_ok.rar [5.1KB] [288]
Разработчик
Ответов: 26163
Рейтинг: 2127
#32: 2016-08-06 17:48:15 ЛС | профиль | цитата
Tad, да я просто выразил небольшие предположения, ни в коем разе не принижая твой труд
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#33: 2016-08-07 20:45:22 ЛС | профиль | цитата
nesco, я так и понял.
Просто, даже если чего-то не хватает, всегда можно написать и подключить свою функцию.
Кстати. В языке SQL и своих функций хватает. Например: расчет и форматирование вывода в одном запросе:
Add(MainForm,12362884,119,119)
{
Width=177
Height=324
Caption=""
Position=1
Point(Handle)
Point(onClose)
link(onCreate,4098229:doOpen,[])
link(onClose,4098229:doClose,[])
}
Add(DS_SQLite,4098229,168,133)
{
Name="base"
FileName=":memory:"
link(onOpen,2095437:doFor,[])
}
Add(DSC_Query,2684123,315,133)
{
DSManager="base"
link(onQuery,16488503:doAdd,[])
}
Add(FormatStr,15700878,266,133)
{
Mask="SELECT printf("%15.3f", -- это строка форматирования\r\n(%1*0.7/24+0.5)); -- а это расчет "
link(onFString,2684123:doQuery,[])
}
Add(For,2095437,217,133)
{
Start=1
End=100
link(onEvent,15700878:doString,[])
}
Add(Memo,16488503,364,133)
{
Left=5
Top=5
Width=150
Height=280
Font=[Consolas,11,1,0,204]
ScrollBars=2
}

------------ Дoбавленo в 20.45:
Даже с битами можно работать
| - Побитовое ИЛИ: - SELECT 29 | 15; результат запроса = 31
& - Побитовое И: - SELECT 29 & 15; результат запроса = 13
<< - Сдвиг числа двойной длины (BIGINT) влево: SELECT 1 << 2; результат запроса = 4
>> - Сдвиг числа двойной длины (BIGINT) вправо: SELECT 4 >> 2; результат запроса = 1
~ Инвертировать все биты: SELECT 5 & ~1; результат запроса = 4
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#34: 2016-08-07 20:54:27 ЛС | профиль | цитата
Tad писал(а):
Даже с битами можно работать

А что означает вот этот символ '->'
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#35: 2016-08-07 22:20:58 ЛС | профиль | цитата
" ->" это просто замена слова "результат"
Заменил
------------ Дoбавленo в 22.20:
А вот с оператором "/" (разделить) в SQLite (и не только) нужно быть внимательным :
Если целое делить на целое (например 10/7) то результат будет равен 1 т.е. отработает как 10 div 7
А если 10.0/7 или 10/7.0 или 10./7 то результат будет равен 1.42857142857143 т.е. отработает обыкновенное деление.
Или использовать явное преобразование типов : SELECT CAST(10 AS double) /7 ;
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#36: 2016-08-08 19:07:13 ЛС | профиль | цитата
Tad писал(а):
Например: расчет и форматирование вывода в одном запросе:
Tad, Вы только забыли упомянуть, что "printf()" присутствует SQLite начиная с версии 3.8.3
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#37: 2016-08-08 19:18:02 ЛС | профиль | цитата
Я пока пользуюсь 3.11.0.
Кому нравится "старьё" - я не виноват.

Завтра дома. Попробую протестировать 3.14.0

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
37
Сообщение
...
Прикрепленные файлы
(файлы не залиты)