TSQLQuery.InsertSQL и русские названия полей

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TSQLQuery.InsertSQL и русские названия полей

Сообщение giao » 13.09.2011 17:18:13

С праздничком!
А я с вопросами :D . Мучает хрень и не знаю как побороть. База данных Firebird, пользуюсь компонентами SQLDB. В SQLQuery.SQL пишу
Код: Выделить всё
select MARKA as "Марка", GOS_NOMER,
GAR_NOMER, FUEL_TANK,
FUEL_RATE from CARS

и все работает. При попытке вставить запись получаю траблы, SQLQuery упорно не воспринимает в параметрическом запросе русские названия полей (Марка). В InsertSQL такой код:
Код: Выделить всё
insert into CARS
("Марка", GOS_NOMER,
GAR_NOMER, FUEL_TANK, FUEL_RATE)
values
(:"Марка", :GOS_NOMER,
:GAR_NOMER, :FUEL_TANK, :FUEL_RATE)

Ругается на параметр Марка в values. Пробовал разные кавычки и в разном сочетании, но никак не добьюсь вставки записи. Если сделать латиницей, то работает. Пробовал в IBExpert эту вставку записи - работает, а SQLQuery не нравится. Может, кто сталкивался с проблемой - подскажите как решить, а то уже мозг выносит.
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Ism » 13.09.2011 17:33:57

Ну и бред, сделайте все параметры латиницей и не заморачивайтесь.
Если про варианты ошибки, то причина может быть в кодировке , возможно лазарус не умеет работать с русскими параметрами.

Если все под винду, то в винде кодировка cp1251 а в лазарусе utf8 а в базе вообще может быть третья. И кто сказал, что firebird может работать с русскими названиями столбцов ?
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение giao » 13.09.2011 17:59:27

Ism писал(а):И кто сказал, что firebird может работать с русскими названиями столбцов ?


Сам проверял.
Ism писал(а):сделайте все параметры латиницей и не заморачивайтесь


И пользователь пусть тоже читает латиницей. Спасибо, сразу видно сталкивались с такой проблемой и решили ее :evil:
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Vadim » 13.09.2011 18:04:23

giao писал(а):И пользователь пусть тоже читает латиницей.

А пользователь о названиях полей вообще может ничего не знать. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение giao » 13.09.2011 18:12:32

ну хотя бы в том же гриде заголовки столбцам дать, чтоб видеть какие данные куда вводить пользователю :?:
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Padre_Mortius » 13.09.2011 18:16:59

giao, так для этого у TDBGrid есть свойства TColumns, которым можно присваивать любые имена
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Ism » 13.09.2011 18:38:33

Indus killed

fatality

Изображение
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение giao » 13.09.2011 19:30:51

:oops: Протупил, как-то не подумал, спасибо.

Ism
хорошо, что удовлетворил свое злорадство 8)
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Ism » 13.09.2011 20:23:37

Не мог удержаться
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Vadim » 14.09.2011 07:37:40

giao
Кроме TColumn, можно ведь ещё и в запросах давать русские алиасы названиям полей и DBGrid их прекрасно отображает, в то время как названия колонок как были, так и останутся забугорнозванными. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Padre_Mortius » 14.09.2011 13:10:35

хм... а я так и не понял откуда СУБД должна понять о том, что поле "Марка" является полем Marka. Не будет это ругаться при сложном запросе в котором было определено поле на кириллице, а вот на простом запросе вставки Лазарус правильно ругается
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение AlexVinS » 14.09.2011 16:38:05

giao писал(а):С праздничком!
А я с вопросами :D . Мучает хрень и не знаю как побороть. База данных Firebird, пользуюсь компонентами SQLDB. В SQLQuery.SQL пишу
Код: Выделить всё
select MARKA as "Марка", GOS_NOMER,
GAR_NOMER, FUEL_TANK,
FUEL_RATE from CARS

и все работает. При попытке вставить запись получаю траблы, SQLQuery упорно не воспринимает в параметрическом запросе русские названия полей (Марка). В InsertSQL такой код:
Код: Выделить всё
insert into CARS
("Марка", GOS_NOMER,
GAR_NOMER, FUEL_TANK, FUEL_RATE)
values
(:"Марка", :GOS_NOMER,
:GAR_NOMER, :FUEL_TANK, :FUEL_RATE)

Ругается на параметр Марка в values. Пробовал разные кавычки и в разном сочетании, но никак не добьюсь вставки записи. Если сделать латиницей, то работает. Пробовал в IBExpert эту вставку записи - работает, а SQLQuery не нравится. Может, кто сталкивался с проблемой - подскажите как решить, а то уже мозг выносит.


Тут FPC не причем, из этих двух запросов может работать _впринципе_ только один. Если в базе поле названо "Марка" то нельзя (да и нет смысла) писать
Код: Выделить всё
select MARKA as "Марка"
, а если в базе Marka, то
Код: Выделить всё
insert into CARS ("Марка",
не правильно. (Кстати поля по русски, да и вообще весь юникод доступен если кодировка юникодная, в Firebird называть можно, но при этом они будут чевствительны к регистру ну и к кодировке конечно же. Вобщем это не рекомендуется) Лучше использовать TField.DisplayLabel и/или DbGrid.Columns.Caption.
Аватара пользователя
AlexVinS
новенький
 
Сообщения: 95
Зарегистрирован: 27.01.2009 01:18:01

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение NTFS » 14.09.2011 22:13:22

Видите ли, в чем дело. 25-30 лет назад, когда создавались ИТ как концептосфера, наши сволочные(зачеркнуто) недалекие руководители страны положили на ИТ огромный болт - и эту отрасль разработали американцы. Потому-то, стоит только чуть-чуть опуститься ниже пользовательского уровня программы - все, в твоем распоряжении символы с кодами от 0 до 127 - шаг за грань приводит к мгновенному расстрелу. Использование русских букв где-нибудь, кроме интерфейса - игра в русскую рулетку с дробовиком :-)
Не мучайтесь сами и не мучайте других - используйте латиницу.
NTFS
постоялец
 
Сообщения: 388
Зарегистрирован: 05.11.2007 14:57:50
Откуда: Краснодар

Re: TSQLQuery.InsertSQL и русские названия полей

Сообщение Mr.Smart » 14.09.2011 23:26:40

NTFS я бы сказал так. Так как, до недавнего времени, кибернетика, продажная девка империализма (как и генетика и много чего другого), наша наука не могла смотреть в данную сторону (тогда то и и термина IT и быть не могло! в общем в сторону кибернетики К.О.). А когда появилась необходимость (ну для пуска банальной баллистической ракеты много чего нужно, я гарантирую это! (работал, знаю)) наша Партия поняла, что мы безвозвратно отстаём в данной области! А что же делать? Нужно-же догонять и перегонять проклятых буржуев! Почесав репу, решили, что проще и быстрее будет рефернсить популярные буржуйские наработки (СМ-ки всякие и прочие) (ну не создавать-же своё?! кстати много чего партия решила "не создавать своего", а просто скопировать). А так как буржуины всё придумали (ну не думали они что советы будут пользоваться "их" компьютерами) на свой лад, пришлось изобретать всякие KOI-7 (кстати у буржуинов присутствует в RFC). Полемику об истории кодировок кириллических создавать не буду.
В общем вышло так, что кириллица попала за пределы семи бит! И для того чтобы была совместимость со "старыми" системами и проблем с локализованными символами не было, была придумана, умным человеком, кодировка UTF8.
Так, о чем же я?
В общем, во всех стандартах синтаксиса промышленных языков программирования (почему-то SQL к ним тоже относиться) ипользуются символы от 32-127! И это дефакто! А все попытки локализации (сами знаете наши "высеры"), мало того, что выглядят убого (к примеру всеми любимый встроенный в 1С Предприятие), так ещё и не обязывает буржуинов корректно с ними работать!

Вот я к чему, используйте латиницу в базах данных - и вам будет хорошо, а для юзеров представляйте данные в локализованном виде!

ps Во на флудил :oops:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

Рейтинг@Mail.ru