![]() |
|
v7: Помогите дописать прямой запрос | ☑ | ||
---|---|---|---|---|
0
oslokot
31.07.13
✎
14:17
|
Вот простой запрос, средствами SQLite
базаДанных.Открыть(":memory:"); запрос = базаДанных.НовыйЗапрос(); запрос.ВыполнитьЗапрос("create virtual table Номенклатура using dbeng(Справочник.Номенклатура)"); Текст="SELECT |code Код, descr Наименование, |id [Объект :Справочник.Номенклатура] |FROM Номенклатура |WHERE ismark <> '*' AND ISFOLDER <> 1" |ORDER BY Наименование"; Рез=запрос.ВыполнитьЗапрос(текст); Рез.Выгрузить(ТЗ); Все хорошо, но хотелось бы получить еще пару колонок: ПолнНаименование товара и вес базовой единицы товара |
|||
1
Ёпрст
гуру
31.07.13
✎
14:21
|
базаДанных.Открыть(":memory:");
запрос = базаДанных.НовыйЗапрос(); Текст=" |SELECT | Спр.code Код, | Спр.descr Наименование, | Спр.id [Объект :Справочник.Номенклатура], | Спр.ПолнНаименование, | Единицы.Вес | |FROM [Справочник.Номенклатура] Спр |left join [Справочник.Единицы] Единицы on Единицы.id = Спр.БазоваяЕдиница |WHERE Спр.ismark <> '*' and Спр.ISFOLDER <> 1" |ORDER BY Спр.Наименование"; Рез=запрос.ВыполнитьЗапрос(текст); Рез.Выгрузить(ТЗ); |
|||
2
oslokot
31.07.13
✎
14:23
|
(1) а, левое соединение, догнал. Ёпрст благодарю!
|
|||
3
oslokot
31.07.13
✎
14:37
|
(1) Хм.. "no such column: Спр.Наименование"
а это точно надо выкинуть? запрос.ВыполнитьЗапрос("create virtual table Спр using dbeng(Справочник.Номенклатура)"); |
|||
4
Ёпрст
гуру
31.07.13
✎
14:42
|
(3) да
>>>Cпр.Наименование ясен пень, есть descr в справочнике (это и есть Наименование) |
|||
5
oslokot
31.07.13
✎
14:52
|
(4) да, точно |ORDER BY Наименование"
заработало. |
|||
6
oslokot
31.07.13
✎
14:53
|
Дольше правда выполняется, раза в 2
|
|||
7
Ёпрст
гуру
31.07.13
✎
14:54
|
еще бы.. лазить в blob за полным наименованием - тот еще подарок.
|
|||
8
oslokot
31.07.13
✎
15:00
|
(7) Спасибо!
|
|||
9
oslokot
01.08.13
✎
15:04
|
Ёпрст Приветствую. Хочется еще колонку с пиктограммой выводить: "Элемент", "Группа", "ПометкаУдаления". Для красоты. Удастся ли вывести из запроса колонку с соответствующим номером пиктограммы? если да, то как.
Например, номер иконки группы 4, помеченного эл-та 2, обычного -5 и т.д. Запрос выглядит вот так: Текст="SELECT |code Код, descr Наименование, ISMARK Пометка, ISFOLDER ЭтоГруппа, |id [Объект :Справочник.Номенклатура] |FROM Номенклатура |WHERE ismark <> '"+?(СкрытьУдаленные=1,"*","")+"' |AND ISFOLDER <> "+СкрытьГруппы+""; |
|||
10
Ёпрст
гуру
01.08.13
✎
15:06
|
(9) используй case
|
|||
11
Ёпрст
гуру
01.08.13
✎
15:07
|
||||
12
Ёпрст
гуру
01.08.13
✎
15:10
|
тип того
select case ISFOLDER when 2 then 1 when 1 then 4 end as ЭтоГруппа |
|||
13
Злопчинский
01.08.13
✎
15:15
|
блин, какие все умные
|
|||
14
Ёпрст
гуру
01.08.13
✎
15:18
|
а ты чего ?
творческий застой ? |
|||
15
oslokot
01.08.13
✎
15:25
|
(12) Мегачеловек! работает, спасибо!
(13) да ну нафик, второй раз в жизни запрос пишу в клюшках |
|||
16
oslokot
12.08.13
✎
15:32
|
Добрый день. Помогите усовершенствовать предыдущий запрос. Теперь запрос утрированно выглядит так:
базаДанных.Открыть(":memory:"); запрос = базаДанных.НовыйЗапрос(); Текст=" |SELECT | Спр.code Код, | Спр.descr Наименование, | Спр.id [Объект :Справочник.Номенклатура], | Спр.Тип, | Спр.Диаметр, | Спр.Размер | |FROM [Справочник.Номенклатура] Спр |WHERE Спр.ismark <> '*' and Спр.ISFOLDER <> 1 |ORDER BY Наименование"; Рез=запрос.ВыполнитьЗапрос(текст); Рез.Выгрузить(ТЗ); В номенклатуре реквизиты "Тип","Диаметр" и "Размер" это обычные одноуровневые справочники. Хочется управлять условиями в запросе по этим реквизитам. Например WHERE Спр.Диаметр = ВыбДиаметр. Не соображу как. Подозреваю нужен left join с этими справочниками. Подтолкните пожалуйста меня. |
|||
17
oslokot
12.08.13
✎
15:48
|
+ Вот так не прокатывает.
|WHERE Спр.ismark <> '*' |AND Спр.ISFOLDER <> 1 |AND Спр.Тип = #ВыбТип ВыбТипТПА это элемент справочника |
|||
18
Ёпрст
гуру
12.08.13
✎
15:51
|
|AND Спр.Тип = :ВыбТип
Запрос.Подставлять("ВыбТип",ВыбТип);//выбтип, например, реквизит формы с нужным видом справочника |
|||
19
oslokot
12.08.13
✎
15:52
|
(18) Сорри, да, только что получилось. Действительно вместо # надо :
|
|||
20
oslokot
12.08.13
✎
15:52
|
Ёпрст спасибо! а ты каким-то конструктором пользуешься?
|
|||
21
Ёпрст
гуру
12.08.13
✎
16:18
|
(20) нет.
стоял раньше именно конструктор, прибил его за не надобностью. Хватает консоли..для отладки. |
|||
22
oslokot
12.08.13
✎
16:25
|
(21) Можно еще вопрос? А если хочется условие принадлежности к списку?
Например навроде этого: |AND Спр.Тип IN (SELECT val FROM :СписокТипов) ... Запрос.Подставлять("СписокТиповТПА", СписокТиповТПА); где СписокТипов это мой список значений Как правильно написать? |
|||
23
Ёпрст
гуру
12.08.13
✎
16:27
|
|AND Спр.Тип IN (SELECT val FROM СписокТипов)
.... База.УложитьОбъекты(ТвойСписок,"СписокТипов",0,"ВидСправочникаТвоего"); |
|||
24
oslokot
12.08.13
✎
16:30
|
(23) вот спасиб! а я все перебрал, и уложить и уложитьСписок, ничего не правильно. А где русское описание взять?
|
|||
25
Ёпрст
гуру
12.08.13
✎
16:31
|
||||
26
oslokot
12.08.13
✎
16:34
|
(25) Благодарю!
|
|||
27
oslokot
22.08.13
✎
16:05
|
Приветствую. Вот, наткнулся на небольшую проблему:
В запросе есть LIKE '%+ВыбНаименование+%' по наименованию товара, а в наименовании присутствуют символы "_". Как избавиться от спецсимволов в строке? Вот это в снеговике работает, а в клюшках нет: ВыбНаименование = СтрЗаменить(ВыбНаименование,"_","[_]"); |
|||
28
Ёпрст
гуру
22.08.13
✎
17:18
|
ты экранировать шо ли хочешь, или чтобы он именно "_" искал ?
|
|||
29
Ёпрст
гуру
22.08.13
✎
17:30
|
вот это используй
http://www.sqlite.org/lang_corefunc.html#like |
|||
30
oslokot
22.08.13
✎
22:09
|
(28) да, что бы искал!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |