Воскресенье, 05.05.2024, 14:24
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Основной » Проблемные ситуации » Ошибки конструктора запроса (если в имени таблицы есть точки)
Ошибки конструктора запроса
K_A_OДата: Пятница, 07.02.2014, 17:15 | Сообщение # 1
Рядовой
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
Посдистема 3.03

Диалект MS SQL

Пример
Создаем две таблицы
[Table.T1] и [Table.T2]

Код
CREATE TABLE [dbo].[Table.T1](    

     [F1]  [int]NULL,    

     [F2] [nchar](10) NULL    

) ON      

[PRIMARY]GO    

INSERT INTO [dbo].[Table.T1]    

               ([F1]    

               ,[F2])    

         VALUES    

               (1, 'T1 - 1')    

              ,(2, 'T1 - 2')    

GO    

CREATE TABLE [dbo].[Table.T2](    

     [F1]  [int]NULL,    

     [F2] [nchar](10) NULL    

) ON      

[PRIMARY]GO      

INSERT INTO [dbo].[Table.T2]    

               ([F1]    

               ,[F2])    

         VALUES    

               (1, 'T2 - 1')    

              ,(2, 'T2 - 2')    

GO


Создаем работающий запрос

Код
SELECT    

     Table_T1.F1 AS F11,    

     Table_T1.F2 AS F12,    

     Table_T2.F2 AS F21    

FROM    

     dbo.[Table.T1] AS Table_T1    

     INNER JOIN dbo.[Table.T2] AS Table_T2    

     ON Table_T1.F1 = Table_T2.F1


При открытии в констукторе запрос ошибочно модифицируется

Код
SELECT    

     Table_T1.F1 AS F11,    

     Table_T1.F2 AS F12,    

     Table_T2.F2 AS F21    

FROM    

     dbo.Tabl.[T1]] AS Table_T1    

     INNER JOIN dbo.Tabl.[T2]] AS Table_T2    

     ON Table_T1.F1 = Table_T2.F1





Сообщение отредактировал K_A_O - Пятница, 07.02.2014, 17:28
 
tormozitДата: Пятница, 07.02.2014, 19:28 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Спасибо. Проблему воспроизвел. Она будет исправлена в следующей версии.
 
tormozitДата: Понедельник, 10.02.2014, 02:29 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Исправлено в 3.04
 
K_A_OДата: Четверг, 13.02.2014, 14:59 | Сообщение # 4
Рядовой
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
Версия 3.04. У меня данная проблема сохраняется.  Грамматика загружается из макета. Нигде не кэшируется. На всякий случай перерегистрировал Goldparser, но не помогло.
 
tormozitДата: Четверг, 13.02.2014, 19:44 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Да. К сожалению после исправления и до выпуска 3.04 я успел снова сломать это. Исправлю в следующей версии.
 
K_A_OДата: Пятница, 14.02.2014, 15:46 | Сообщение # 6
Рядовой
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
Ошибка при использовании запроса с CAST

Код
CREATE TABLE [dbo].[T1](   

    [F1]  [int]NULL,   

    [F2] [nchar](10) NULL   

) ON     

[PRIMARY]GO   

INSERT INTO [dbo].[T1]   

              ([F1]   

              ,[F2])   

        VALUES   

              (1, 'T1 - 1')   

             ,(2, 'T1 - 2')   

GO
 

Текст запроса:

Код
SELECT   

    T1.F1 AS F1,   

    CAST(T1.F2 AS varchar(5)) AS F2

FROM   

    dbo.T1 AS T1
 

При попытке открыть в конструкторе появляется сообщение

Код
Текст запроса: Строка 5: {(5,25)}: Синтаксическая ошибка "(", ожидается: '.', (EOF), ...

PS. Нельзя ли название темы изменить, дело не в ADO
 
tormozitДата: Суббота, 15.02.2014, 01:37 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Распознавание имен типов данных чужих диалектов будет добавлено в следующей версии.
 
tormozitДата: Воскресенье, 16.02.2014, 17:17 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Ошибка обработки точки в определениях таблиц исправлена в 3.05
Распознавание имен типов данных чужих диалектов добавлено в 3.05
 
K_A_OДата: Вторник, 18.02.2014, 11:55 | Сообщение # 9
Рядовой
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
v.3.05
Таблицы с точками пока работать не могут, но уже по другой причине. Имя таблицы никак не выделяется, в констукторе получается строка  dbo.Table.T1, и запрос выполниться не может.

Самое простое, в модуле обработки ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой добавить подобную функцию:

Код
Функция ПолучитьИмяТаблицыADO(знач ИмяИсходное)  
     // сравнить с возможными префиксами
     Если Лев(ИмяИсходное,1)<>"[" Тогда
         ИмяИсходное = "["+ИмяИсходное+"]";  
     КонецЕсли;  
     Возврат ИмяИсходное;
КонецФункции


и в функции ЗаполнитьДоступныеТаблицыADO() присвоить "СтрокаТаблицы.Имя = ПолучитьИмяТаблицыADO(".

Но вот по поводу использования квадратных скобок, в продуктах Microsoft они будут работать, вплоть до Excel. Но подойдет ли это для любых источников ADO. Или надо делать визуальную настройку.
 
tormozitДата: Вторник, 18.02.2014, 12:03 | Сообщение # 10
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Поясни "Имя таблицы никак не выделяется, в констукторе получается строка  dbo.Table.T1".
Вроде бы сейчас конструктор оставляет квадратные скобки. Например попробуй такой запрос "SELECT 0 FROM  dbo.[Table.T1]".
Подозреваю, речь идет о добавлении таблицы в выбранные таблицы из списка доступных таблиц в конструкторе?
 
K_A_OДата: Вторник, 18.02.2014, 12:37 | Сообщение # 11
Рядовой
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
Если мы напишем "SELECT 0 FROM  dbo.[Table.T1]" - конструктор открывается, но таблицу со скобками у себя не находит и считает ее временной. Ее поля недоступны. Одновременно в конструкторе видна таблица Table.T1, с доступными полями, однако если ее выбрать - в итоговом  тексте скобки пропадают, соответственно запрос не работает.
При обработке таблиц нужно сразу понимать, что это имя должно быть обрамлено скобками.

Добавлено (18.02.2014, 12:37)
---------------------------------------------
Правда, обычные имена таблиц обрамлять скобками избыточно, нужно только те, которые не удовлетворяют правилам написания реквизитов.

 
tormozitДата: Вторник, 18.02.2014, 15:30 | Сообщение # 12
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Выгрузи таблицу доступных таблиц в файл (например в отладчике через Ис) и выложи сюда.
 
K_A_OДата: Вторник, 18.02.2014, 16:09 | Сообщение # 13
Рядовой
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
Создал пустую базу MS SQL, создал две таблицы [Table.T1] и [Table.T2], как в сообщении # 1, и открыл оттуда запрос в конструкторе.

ТЧ ДоступныеТаблицы содержит 4 строки.

И это нормально. Потому, что в модуле обработки ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой в функции ЗаполнитьДоступныеТаблицыADO() имена таблиц получаются без учета скобок. Конструктор не считает имена со скобками ошибочными, но и ничего не знает про них.
Прикрепления: 7238795.mxl (4.0 Kb)


Сообщение отредактировал K_A_O - Вторник, 18.02.2014, 16:11
 
tormozitДата: Среда, 19.02.2014, 00:18 | Сообщение # 14
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Спасибо. Ситуация понятна. В следующей версии полные имена доступных таблиц будут формироваться при необходимости с квадратными скобками.
 
tormozitДата: Воскресенье, 23.02.2014, 19:00 | Сообщение # 15
Генералиссимус
Группа: Администраторы
Сообщений: 6184
Репутация: 156
Статус: Оффлайн
Исправлено в 3.06
 
Форум » Основной » Проблемные ситуации » Ошибки конструктора запроса (если в имени таблицы есть точки)
  • Страница 1 из 1
  • 1
Поиск: