Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Пробелы в названии столбца (число прочтений - 7413 )
Dimetrix
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 12. Сентября 2011
Пробелы в названии столбца
12. Сентября 2011 :: 15:07
Печать  
Здравствуйте!
Пытаюсь из 1с 7.7 dbf получить данные из SQL Server 2008 Express.
Вот кусок кода:
Код
Выбрать все
База = СоздатьОбъект("OLEDBData");  
Соединение = "Provider=SQLNCLI10;Server=SERVER\SQLEXPRESS;Database=gloria; Trusted_Connection=yes;";
Рез = База.Соединение(Соединение);
ТекстЗапроса="
|SELECT
|*
|from
|fullCatalog
|where
|[Название произведения]  = 'frozen'
|";
Запрос = База.СоздатьКоманду();
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);  


Беда с колонкой "Название произведения", которая содержит пробел. Выдает ошибку:
Цитата:
FAILED! ICommandText::Execute(): Invalid column name 'Названиепроизведения'.

Т.е. почему-то удаляется пробел между словами.
На SQL сервере такой же текст запроса выполняется на ура.
Заменял квадратные скобки на одинарные кавычки. Ошибки нет, но и не выводит никаких строк.
Можно как-нибудь преодолеть это, или заменой названия столбца на SQL сервере на имя без пробелов не обойтись (очень не хотелось бы этого делать)?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #1 - 12. Сентября 2011 :: 17:55
Печать  

1 начиная с sql2005 можешь сделать alias на столбец
и использовать его вместо основного названия столбца.
2. создай view с английским названием столбца(ов).

Для твоей sql2008 первый способ более предпочтительный
  
Наверх
 
IP записан
 
Dimetrix
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 12. Сентября 2011
Re: Пробелы в названии столбца
Ответ #2 - 12. Сентября 2011 :: 18:19
Печать  
1. Насколько я помню сначала выполняется оператор WHERE и только затем SELECT. Так что создать алиас не получится.
Такой запрос даже на самом сервере не прошел:
Код
Выбрать все
select [Название произведения] as Song
from FullCatalog
where song='frozen' 


Или я что-то недопонимаю?
Update.
Возможно имелся следующий вариант?
Код
Выбрать все
select Song
from
(select [Название произведения] as Song
from FullCatalog) t
where song='frozen' 


На сервере проходит. Завтра попробую из 1с.
2. Это вариант. Но просто для использования представления придется создавать повторно индексы и полнотекстовый индекс.
А с учетом этого, база может выйти за 10Гб... Не хотелось бы переходить на платный вариант SQL сервера.
В общем, если не найдется другого решения, буду тестировать этот. Либо все же переименовывать.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #3 - 12. Сентября 2011 :: 18:34
Печать  
это не тот алиас.
алиас на уровне базы данных.
  
Наверх
 
IP записан
 
Dimetrix
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 12. Сентября 2011
Re: Пробелы в названии столбца
Ответ #4 - 12. Сентября 2011 :: 20:50
Печать  
Там вроде нет такого. Можно настраивать только синонимы в отношении таблиц, представлений, процедур и т.д. Но не в отношении отдельных столбцов.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #5 - 13. Сентября 2011 :: 04:20
Печать  
Dimetrix писал(а) 12. Сентября 2011 :: 20:50:
Там вроде нет такого. Можно настраивать только синонимы в отношении таблиц, представлений, процедур и т.д. Но не в отношении отдельных столбцов.

да я почему-то думал что синонимы действуют и для столбцов
а получается только для таблиц.

  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #6 - 13. Сентября 2011 :: 09:22
Печать  
врядли, но такой вариант то же не работает?
Код
Выбрать все
where
fullCatalog.[Название произведения]  = 'frozen' 


  
Наверх
IP записан
 
Dimetrix
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 12. Сентября 2011
Re: Пробелы в названии столбца
Ответ #7 - 13. Сентября 2011 :: 13:14
Печать  
Аналогичная ошибка:
Цитата:
FAILED! ICommandText::Execute(): Invalid column name 'Названиепроизведения'.

Кстати, такое заметил. Если закинуть такой запрос:
Код
Выбрать все
SELECT
*
from
fullCatalog
where
Исполнитель = 'madonna'  
ORDER BY 'Название произведения'   


т.е. указать название колонки с пробелами в кавычках в ORDER BY, то запрос проходит и сортировка работает. А вот использование кавычек по аналогии в WHERE - выдает ошибку.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Пробелы в названии столбца
Ответ #8 - 13. Сентября 2011 :: 13:18
Печать  
а вот в скуль базе, метапарсер нормально работает и там такой ошибки нема Печаль
Енто тока в дбф.

Попробуй другие строки подключения.. и др. провайдер, odbcrecordset, к примеру
  
Наверх
 
IP записан
 
Dimetrix
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 12. Сентября 2011
Re: Пробелы в названии столбца
Ответ #9 - 13. Сентября 2011 :: 14:04
Печать  
Чет у меня вообще не подключается через ODBC.
Код
Выбрать все
База = СоздатьОбъект("ODBCDatabase");
Соединение = "Provider=SQLNCLI10;Server=SERVER\SQLEXPRESS;Database=gloria; Trusted_Connection=yes;";
Рез = База.Соединение(Соединение);
_рс =СоздатьОбъект("ODBCRecordSet");
_рс.УстБД(База); 


Может что не так делаю? Я просто не большой спец в этом.
Ладно, походу ограничусь созданием в SQL представления с нормальными  названиями столбцов. Благо, протестировал - ненамного вырос размер базы.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #10 - 13. Сентября 2011 :: 14:41
Печать  
Dimetrix писал(а) 13. Сентября 2011 :: 13:14:
Аналогичная ошибка:
Цитата:
FAILED! ICommandText::Execute(): Invalid column name 'Названиепроизведения'.

Кстати, такое заметил. Если закинуть такой запрос:
Код
Выбрать все
SELECT
*
from
fullCatalog
where
Исполнитель = 'madonna'  
ORDER BY 'Название произведения'   


т.е. указать название колонки с пробелами в кавычках в ORDER BY, то запрос проходит и сортировка работает. А вот использование кавычек по аналогии в WHERE - выдает ошибку.

ну это наверное метапарсер 1с++ ведет себя по разному.
Чтобы видеть что передается точно используй Отладка(1);
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #11 - 13. Сентября 2011 :: 14:52
Печать  
Dimetrix писал(а) 13. Сентября 2011 :: 14:04:
Чет у меня вообще не подключается через ODBC.
Код
Выбрать все
База = СоздатьОбъект("ODBCDatabase");
Соединение = "Provider=SQLNCLI10;Server=SERVER\SQLEXPRESS;Database=gloria; Trusted_Connection=yes;";
Рез = База.Соединение(Соединение);
_рс =СоздатьОбъект("ODBCRecordSet");
_рс.УстБД(База); 


Может что не так делаю? Я просто не большой спец в этом.
Ладно, походу ограничусь созданием в SQL представления с нормальными  названиями столбцов. Благо, протестировал - ненамного вырос размер базы.

по поводу соеденения смотри
http://www.1cpp.ru/forum/YaBB.pl?num=1281717242/70#70
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #12 - 13. Сентября 2011 :: 14:53
Печать  
(0) также можно сделать с помощью хранимой процедуры
  
Наверх
 
IP записан
 
Dimetrix
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 12. Сентября 2011
Re: Пробелы в названии столбца
Ответ #13 - 13. Сентября 2011 :: 14:57
Печать  
Выдает такое:
Код
Выбрать все
SELECT
*
from
fullCatalog
where
Исполнитель = 'madonna'
ORDER BY 'Название произведения' 

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пробелы в названии столбца
Ответ #14 - 13. Сентября 2011 :: 15:06
Печать  
Dimetrix писал(а) 13. Сентября 2011 :: 14:57:
Выдает такое:
Код
Выбрать все
SELECT
*
from
fullCatalog
where
Исполнитель = 'madonna'  
ORDER BY 'Название произведения' 


так ты же пишешь что такой работает а ты смотри что на выходе когда не работает.
может работает в order by потому что внутри самого sql немного по другому вычисляется выражение для сортировки.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать