Имя: Пароль:
1C
1C 7.7
v7: 1SQlite: Какой алиас у таблицы (если база открыта как ":memory:")
0 Zhuravlik
 
09.11.12
14:48
Здравствуйте. Создаю базу, выполняю какой-нибудь запрос на выборку данных:
   База = СоздатьОбъект("SQLiteBase");    
   База.Открыть(":memory:");

А потом хочу в эту же базу уложить ИТЗ, как новую таблицу в памяти:
База.УложитьТЗ(ИТЗ, "ИТЗ", 0);

И я знаю, то в базе "База" есть теперь таблица с алиасом "ИТЗ", а какой алиас получила таблица, куда собралась моя предидущая выборка?
1 Ёпрст
 
09.11.12
14:54
(0) сам то хоть понял, что спрашиваешь ?
2 Zhuravlik
 
09.11.12
18:01
(1) Да.

Я имею в виду, что если укладываю ТЗ вот так:

ИТЗ = СоздатьОбъект("ИндексированнаяТаблица")

База.УложитьТЗ(ИТЗ, "ИТЗ", 0);

, то в запросе буду обращаться к таблице так:

Select *
From ИТЗ as ИТЗ


А как мне обращаться к таблице с выборкой?
3 varelchik
 
09.11.12
18:05
А попробовать не пытался?
4 Zhuravlik
 
09.11.12
18:25
(3) Я бы попробовал, если бы знал как она называется. В документации не нашел... Это если только выгружать выборку в ИТЗ, а эту ИТЗ потом укладывать, вот тогда я знаю по какому имени к ней обращаться, а так?
5 Ёпрст
 
09.11.12
19:11
>>>А как мне обращаться к таблице с выборкой?

Наркоман чтоле ?

Какая таблица с выборкой ?
Ты по-русски можешь выражать свои мысли ?
6 Zhuravlik
 
11.11.12
20:17
(5) :) Нет, не балуюсь)))
Таблица с выборкой - я имею в виду вот что.

Мне например надо собрать какие-то данные из базы, например остаток товара на текущий день. Я делаю запрос:

База = СоздатьОбъект("SQLiteBase");    
База.Открыть(":memory:");
ТекстЗапроса = "
SELECT
    Поставщик as [Поставщик $Справочник.Поставщики]
    Товар as [Товар $Справочник.Товары]
    Количество * (1 - Остатки.debkred * 2) as Количество
FROM (.....) as Остатки
GROUP BY Поставщик, Товар
HAVING SUM Количество <> 0;
";

Если я выгружу результат этого запроса в таблицу значений, в ней создадутся колонки Поставщик, Товар и Количество.
Т.е. этот запрос создал в базе "База" некую таблицу, с колонками Поставщик, Товар и Количество, данные которой я и выгружаю в тз, но я не знаю как ОНА НАЗЫВАЕТСЯ.
И если я не хочу выгружать их в тз, а хочу обращаться с запросами к этой УЖЕ сформированной таблице?
Т.е. если (как в (2)) я укладываю тз в базу, которая открыта в памяти (":memory:"), я могу задать имя в таблице, по которому буду потом селектом получать данные, а тут я имени таблицы не знаю, и мой вопрос - какое это имя?
Или вообще все не так происходит, и данные в базе "База", после Запрос.ВыполнитьЗапрос() хранятся не в таблице, а каким-то иным образом, то как поступить? Создавать некую виртуальную новую таблицу в памяти, типа "Create Table", и туда заносить результат выполнения запроса?
7 Cthulhu
 
11.11.12
21:41
"Т.е. этот запрос создал в базе "База" некую таблицу, ..." - далааадно?.. )))
8 Zhuravlik
 
11.11.12
22:48
(7) Это значит, что запрос не создает никакой таблицы? Т.е. надо создать таблицу, и заинсертить туда мою выборку? Или как?
9 Cthulhu
 
11.11.12
22:52
(8): интересно, что именно мешает тебе проверить такое предположение и решить твою задачу таким, казалось бы, очевидным способом?.. ну или не париться с инсертением - а просто уложить ТЗ в таблицу штатнім 1склайт-овым методом?..
10 Cthulhu
 
11.11.12
22:58
(9)+:
Синтаксис: УложитьТЗ(ТЗ, ИмяТаблицы, [КакПостоянную])

Параметры:
ТЗ - тип: ТаблицаЗначений. Таблица, загружаемая в базу данных
ИмяТаблицы - тип: Строка. Имя создаваемой в базе данных таблицы.
КакПостоянную - тип: Число. 1 - создать обычную таблицу, 0 - создать временную таблицу. Необязательный параметр. По умолчанию 0.
Возвращает: нет

Описание: Загружает таблицу значений в базу данных, как таблицу базы данных.

Если таблица с указанным именем уже существует, она удаляется. Состав полей созданной таблицы соответствует составу колонок ТЗ. Имена полей созданной таблицы соответствуют идентификаторам колонок ТЗ. Формат в котором выгружаются значения из ТЗ, см в Преобразование значений 1С в значения базы данных (работа с параметрами)

(копипаста из 1sqlite.chm)
11 Zhuravlik
 
11.11.12
23:15
(9) Я хочу добится скорости. При укладке в ТЗ есть едва заметные тормоза, буквально милисекундные, они не мешают, но хочу сделать так, чтобы все было мнгновенно. И научиться Sql заодно)
Я уже проверяю, и вроде получается
"CREATE TEMP TABLE virtual AS" + ТекстМоегоЗапроса;

Просто таким методом тыков можно тыкать 100 лет, а уже ведь есть наработанный способ как это делается ПРАВИЛЬНО, зачем мне наступать на те грабли, на которые уже другие наступали 100 раз? Это может даст практику, но не опыт. Опыт нарабатывается когда уже знаешь более-менее неплохо язык, и решаешь задачи, используя его "Тонкости", а я сейчас просто морочусь с выборкой из запроса...
12 Zhuravlik
 
11.11.12
23:16
(9) Вот видите?) Что стоит за вашим "казалось бы"?
13 Ёпрст
 
12.11.12
08:49
(6) никак она не называется, если очень надо - результат выборки инсерти в темповую табличку, созданную в памяти или на диске.
14 orefkov
 
12.11.12
09:52
(0)
То есть ты хочешь результат выполнения запроса получить не в 1С в виде ТЗ, а сразу уложить в таблицу в базе?
Тогда

create table МояТаблица as select твой запрос

http://www.sqlite.org/lang_createtable.html
15 Zhuravlik
 
13.11.12
03:32
(14) Да, я так и делаю, спасибо за помощь.
Только не могу понять, как обращаться к этой таблице? Слабо с английским к сожалению, не нашел нужной инфы.
Я добавил команду перед основным запросом:
CREATE TABLE Остатки AS

Теперь, если я делаю вот такой запрос:
SELECT *
FROM Остатки
- то получаю все содержимое это таблицы (http://s1.ipicture.ru/Gallery/Viewfull/16748899.html)

Но если я хочу получить строки одной или нескольких колонок этой таблицы, вот так:
Select ИмяКолонки
From Остатки

или так:

Select Ост.ИмяКолонки AS Алиас
FROM Остатки AS Ост


то Sqlite говорит "no such column".
(http://ipicture.ru/Gallery/View/16750033.html)
16 Zhuravlik
 
13.11.12
03:35
Скобки в гипперсылки попали почему-то...
все содержимое таблицы:
http://s1.ipicture.ru/Gallery/Viewfull/16748899.html

Запрос с ошибкой "no such column":
http://ipicture.ru/Gallery/View/16750033.html
17 Zhuravlik
 
13.11.12
03:59
Осенило, перезаписал запрос так, чтобы названия колонок в результирующей таблице были на транслите, и прокатило.

т.е.

SELECT VAGON
FROM Остатки

- Работает))
18 Zhuravlik
 
13.11.12
04:44
Нет, не работает. Путем проб и ошибок удалось понять, что запрос выполняется только для тех колонок, тип которых неагрегатный (т.е. ошибка выдается для колонок, протипизированных как справочник, а для текстовых такой ошибки нет...). Значит типизацию убираю, и все...
19 orefkov
 
21.11.12
00:49
типизацию надо указывать только в самом финальном запросе, когда уже результат в 1С вытаскиваешь.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.