Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#1051: 2012-10-25 10:48:52 ЛС | профиль | цитата
hitman249, [flood]
hitman249 писал(а):
учите лучше java или c#
За совет спасибо. Невероятно, но факт - С#,C++ и просто С для меня не китайская грамота. А мы здесь говорим про язык SQL. Знаешь такой ?
То что на SQLite смотрится так
#pas
SELECT * FROM таблица WHERE Date BETWEEN StartDate AND EndDate ORDER BY Date;
на рекомендуемом тобой Criteria - Hibernate будет выглядеть примерно так:
#cpp
if(startDate!=null){
if(isFirst){
query.append(" where date >= + sdf.format(startDate) + ");
}else{
query.append(" and date >= + sdf.format(startDate) + ");
}
isFirst = false;
}

if(endDate!=null){
if(isFirst){
query.append(" where date <= + sdf.format(endDate) + ");
}else{
query.append(" and date <= + sdf.format(endDate) + ");
}
isFirst = false;
}

if(volume!=null){
if(isFirst){
query.append(" where volume >= " + volume);
}else{
query.append(" and volume >= " + volume);
}
isFirst = false;
}

query.append(" order by date");
Query result = session.createQuery(query.toString());

return result.list();
}
Кстати весь этот индусский код сформирует только то, что у меня после слова WHERE
и получишь ты в результате строку:
#pas
SELECT * FROM таблица WHERE Date > StartDate AND Date < EndDate ORDER BY Date;
Так что не надо ля-ля.
[/flood]

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#1052: 2012-10-25 11:05:14 ЛС | профиль | цитата
Tad, а ка мне вот это


SELECT date(%1 + 1721424.5,'start of month');

Преобразовать в целое без округления Те SELECT должен выдать без округления, а еще лучше, как сразу подставить в запрос UPDATE


UPDATE Objects
SET
Name = '%2',
Address = '%3',
Type = '%4',
Direct = '%5',
Period = %6,
Previouse = %7, Вот сюда надо целое без округления SELECT date(%1 + 1721424.5,'start of month')
Next = %8,
Monitoring = %9,
Importance = %10
WHERE
Id = %1

И как ставить ремарки, кстати
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1053: 2012-10-25 11:13:40 ЛС | профиль | цитата
Так с hitman249 разобрался.
Теперь nesco, судя по твоему
nesco писал(а):
0, если меньше диапазона, 1, если в диапазоне и 2, если больше
что-то ты не то творишь.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#1054: 2012-10-25 11:18:42 ЛС | профиль | цитата
Tad писал(а):
что-то ты не то творишь

Это дальше будет, мне сейчас нужно в карточке получить и записать диапазон, с которого пойдет отслеживание. UPDATE это и делает.
А получение результата условия будет управлять отображением галочек и выдавать ошибку при попытке установить не ту дату выполнения
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1055: 2012-10-25 12:02:09 ЛС | профиль | цитата
nesco писал(а):
как ставить ремарки
через твоё любимое --
nesco писал(а):
Вот сюда надо целое без округления SELECT date(%1 + 1721424.5,'start of month')
во-первых %1 у тебя в запросе - это id
Во-вторых Почему ты не хочешь сначала сделать:
#pas
SELECT date(%7 + 1721424.5,'start of month') --будет быстрее
Или, если уж очень хочется, то можно и так
#pas
UPDATE Objects
SET
Name = '%2',
Address = '%3',
Type = '%4',
Direct = '%5',
Period = %6,
Previouse = (SELECT date(%7 + 1721424.5,'start of month')+0),
Next = %8,
Monitoring = %9,
Importance = %10
WHERE
Id = %1
Точно ты гдето "не в ту степь"


------------ Дoбавленo в 11.55:
nesco, это не я . Приколы форума что ли ?
Name = 'Опытный',
Address = '12128',
Type = '25 Oct 2012 11:33'


------------ Дoбавленo в 12.02:
nesco, перерыв - уехал на работу.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#1056: 2012-10-25 12:25:16 ЛС | профиль | цитата
Tad писал(а):
во-первых %1 у тебя в запросе - это id

Нет, это DateInt с DatePicker-a. Это я пытался получить дату, тк такой SELECT не работал в UPDATE
------------ Дoбавленo в 12.25:
Вот с этим


  Previouse = (SELECT date(%7 + 1721424.5,'start of month') + 0),
Выдает RunTime на OBJ, на dll, отдельно SELECT date(%1 + 1721424.5,'start of month') + 0 выдает 2012 в целых, а мне надо получить 734777 для 01-10-2012 и это значение записать в ячейку
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1057: 2012-10-25 12:55:50 ЛС | профиль | цитата
nesco, вот теперь понял. я уже на работе. Сейчас подумаем.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8921
Рейтинг: 823
#1058: 2012-10-25 13:22:57 ЛС | профиль | цитата
Tad, [flood]До Олимпиады год с небольшим остался, думать некогда, прыгать надо![/flood]
карма: 19

1
Голосовали:Tad
Разработчик
Ответов: 26113
Рейтинг: 2126
#1059: 2012-10-25 13:28:58 ЛС | профиль | цитата
Tad писал(а):
Сейчас подумаем

Я уже додумал, вот это работает


SELECT strftime('%J', date(%7 + 1721424.5,'start of month')) - 1721424.5
где %7 -- это DataInt с DatePicker-a

Выдает целое, как и надо для записи в ячейку, но только с dll, с OBJ работать не будет, выдает ошибку RunTime. А c dll меня не устраивает, к тому же, dll у меня лочит базу и не дает в нее писать

------------ Дoбавленo в 13.28:
Я так понял, что OBJ не работает с модификаторами даты, такими как: 'start of month', 'start of year' и тд

Мля, придется на рассыпухе делать. А математические формулы преобразования для 'start of month' есть для Юлианской даты
карма: 22

0
Ответов: 1528
Рейтинг: 57
#1060: 2012-10-25 13:55:45 ЛС | профиль | цитата
Tad,
Tad писал(а):
индусский код

всякое видел, но вы меня удивили, своим кодом
query - полагаю какой-то StringBuilder, в который вы прямым способом накидываете обычные стринги
а с критерией как я понял его(этот код) связывает одна единственная строчка

#cpp
Query result = session.createQuery(query.toString());
*пардон, не сразу заметил что к Criteria, этот индуссокод не имеет никакого отношения, т.к. он написан на вероятно HQL, а это ещё раз пардон некрасивая попытка ввести в заблуждение общественность, т.е. дезинформация!

вот истинная критерия, а у вас простите чёрти что
#cpp
List<History> list = getSession().createCriteria(History.class)
.addOrder(Order.desc("id")).setMaxResults(50).list();
как видим ничего сверхдлинного и странного и непонятного как в приведённом ужасе от Tad
данный пример показывает обращение к отображённой в сущности History.class, таблицу History, которая сортируется в обратном порядке, и затем из неё берутся первые 50 записей
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1061: 2012-10-25 14:05:02 ЛС | профиль | цитата
nesco, забыл предупредить, что, применяемая тобой версия obj, с математикой в датах не работает.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#1062: 2012-10-25 14:33:40 ЛС | профиль | цитата
Tad писал(а):
забыл предупредить, что, применяемая тобой версия obj, с датами не работает

Я уже понял это. Подцепил OBJ 3.7.3, вроде заработало, пока
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1063: 2012-10-25 14:43:29 ЛС | профиль | цитата
nesco писал(а):
3.7.3
дочерта весит
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#1064: 2012-10-25 15:23:16 ЛС | профиль | цитата
Tad писал(а):
дочерта весит

У меня 365,2 кило, всего-то. Херня это для современных систем. Никто эту прогу на дискетах таскать не собирается, а флэшки уже и на 512 Мб редкость
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1065: 2012-10-25 19:59:57 ЛС | профиль | цитата
hitman249,
я тебе показал, как формируется строчка WHERE для значений StartDate и EndDate. Если ты этого не понял, то это твои проблемы.
hitman249 писал(а):
данный пример показывает обращение к отображённой в сущности History.class, таблицу History, которая сортируется в обратном порядке, и затем из неё берутся первые 50 записей

Твой запрос
List<History> list = getSession().createCriteria(History.class).addOrder(Order.desc("id")).setMaxResults(50).list();
а вот тот же запрос(критерий :) ) на языке SQL (ни кавчек, ни точек, ни скобок)
 SELECT * FROM History ORDER BY DESC id OFFSET 1 LIMIT 50;
Что быстрее набрать на клаве ?
SELECT * FROM таблица WHERE Date BETWEEN StartDate AND EndDate ORDER BY Date;
^А теперь напиши реализацию вот этого запроса.^Переведу на всякий случай :
Выбрать из БД записи за любой период любого года.
Заметь -
1.это всё делается одним и тем же запросом.
2.nesco, для того чтобы установить программу другому клиенту, ничего кроме exe не потребуется.
3.сколько яиц тебе прийдется прицепить к твоей проге, чтобы она заработала у любого клиента с одной чистой виндой ?

Мы здесь говорим о практике, а не о теории.
И советов типа "учите лучше java или c#, там есть Hibernate||nHibernate и объектный язык запросов Criteria." не надо : "Ученого учить - только портить". "там есть Hibernate" ну и что ? Пусть себе будет.
[flood]А споры о том, что лучше, у кого длинней, у кого толще, идут наверное со дня рождения человечества. [/flood]
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)