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

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

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

Ответить
giao
новенький
Сообщения: 46
Зарегистрирован: 24.11.2009 21:33:18
Откуда: Украина

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

Сообщение 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 не нравится. Может, кто сталкивался с проблемой - подскажите как решить, а то уже мозг выносит.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

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

Если все под винду, то в винде кодировка cp1251 а в лазарусе utf8 а в базе вообще может быть третья. И кто сказал, что firebird может работать с русскими названиями столбцов ?
giao
новенький
Сообщения: 46
Зарегистрирован: 24.11.2009 21:33:18
Откуда: Украина

Сообщение giao »

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


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


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

Сообщение Vadim »

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

А пользователь о названиях полей вообще может ничего не знать. ;)
giao
новенький
Сообщения: 46
Зарегистрирован: 24.11.2009 21:33:18
Откуда: Украина

Сообщение giao »

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

Сообщение Padre_Mortius »

giao, так для этого у TDBGrid есть свойства TColumns, которым можно присваивать любые имена
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Indus killed

fatality

Изображение
giao
новенький
Сообщения: 46
Зарегистрирован: 24.11.2009 21:33:18
Откуда: Украина

Сообщение giao »

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

Ism
хорошо, что удовлетворил свое злорадство 8)
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Не мог удержаться
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

giao
Кроме TColumn, можно ведь ещё и в запросах давать русские алиасы названиям полей и DBGrid их прекрасно отображает, в то время как названия колонок как были, так и останутся забугорнозванными. ;)
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

хм... а я так и не понял откуда СУБД должна понять о том, что поле "Марка" является полем Marka. Не будет это ругаться при сложном запросе в котором было определено поле на кириллице, а вот на простом запросе вставки Лазарус правильно ругается
Аватара пользователя
AlexVinS
новенький
Сообщения: 95
Зарегистрирован: 27.01.2009 00:18:01

Сообщение AlexVinS »

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.
NTFS
постоялец
Сообщения: 388
Зарегистрирован: 05.11.2007 13:57:50
Откуда: Краснодар
Контактная информация:

Сообщение NTFS »

Видите ли, в чем дело. 25-30 лет назад, когда создавались ИТ как концептосфера, наши сволочные(зачеркнуто) недалекие руководители страны положили на ИТ огромный болт - и эту отрасль разработали американцы. Потому-то, стоит только чуть-чуть опуститься ниже пользовательского уровня программы - все, в твоем распоряжении символы с кодами от 0 до 127 - шаг за грань приводит к мгновенному расстрелу. Использование русских букв где-нибудь, кроме интерфейса - игра в русскую рулетку с дробовиком :-)
Не мучайтесь сами и не мучайте других - используйте латиницу.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

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

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

ps Во на флудил :oops:
Ответить