Страница 1 из 1

Isql и русские буквы

Добавлено: 22 сен 2005, 00:30
Gust
Почему не работает следующий скрипт:
SET NAMES WIN1251;
update global_edizm
set global_edizm_name = 'га'
where global_edizm_name = 'га1';
select * from global_edizm order by global_edizm_name;
exit;

Выдается знаменитое Cannot transliterate character between character sets

Но если строку с where заменить на
where global_edizm_name = _win1251'га1';
то все проходит нормально.... Причем это связано только с where...

И еще постоянно выдается:
Expected end of statement, encountered EOF
Что это значит?

Может есть другая альтернатива? Хочется иметь маленькую утилитку (консольное приложение) для обновления баз у клиентов просто пересылая им sql-скрипты. Хотел обойтись стандартными средствами, может посоветуете что-нибудь другое? Не хочется давать им в руки какое-нибудь Gui-приложение, чтоб по базе не шастали...

Добавлено: 22 сен 2005, 07:36
dimitr
SET NAMES надо вызывать _до_ коннекта к базе.

Добавлено: 22 сен 2005, 13:58
Gust
dimitr писал(а):SET NAMES надо вызывать _до_ коннекта к базе.
А это можно сделать из командной строки? Че-то я не нашел такой опции в документации.

Добавлено: 22 сен 2005, 14:12
kdv
нет. из командной строки указать чарсет в isql нельзя. такое умеет разве что ibescript.

Добавлено: 22 сен 2005, 15:15
Merlin
Не пойму я вас, Прохоровых (С). Если речь об скрипте, то командная строка вызывает isql с заданием его выполнить. Ну а унутре этого скрипта уже строка c SET NAMES идёт до строки c CONNECT, и фсё. А если об интерактивной работе, то то же самое - вызвал isql, задал SET NAMES, выполнил коннект и работай. Что вам занадобилось от командной строки-то...

Добавлено: 22 сен 2005, 15:46
kdv
он юзерам хочет, значит строка коннекта у него может быть разная. а как он ее формирует - фиг знает.

Добавлено: 22 сен 2005, 17:53
dimitr
- создается временный файл
- туды кидается set names
- далее, connect blah-blah-blah
- далее, сам скрипт
- оный файл подсовывается isql

Добавлено: 22 сен 2005, 23:08
Gust
kdv писал(а):он юзерам хочет, значит строка коннекта у него может быть разная. а как он ее формирует - фиг знает.
У меня действительно со временем могут измениться параметры коннекта, о которых я могу своевременно не узнать, поэтому изначально хотел скрипты с обновлениями сделать контекстно-независимыми, но поскольку этого сделать нельзя, то проблему решу более детализированным и регламментированным описанием использования этих скриптов.

Всем спасибо, вопрос снят.

Добавлено: 23 сен 2005, 10:11
hvlad
kdv писал(а):нет. из командной строки указать чарсет в isql нельзя. такое умеет разве что ibescript.
Справедливости ради - isql в 2-ке тоже умеет

Добавлено: 30 май 2006, 08:23
Strannik
Я работаю в Linux и там такой проблемы нет. Пишем скрипт примерно такого содержания:

#!/bin/sh

DATABASE=$1
USERNAME=$2
PASSWORD=$3

/opt/interbase/bin/isql << MYEND

SET NAMES ...;

CONNECT '${DATABASE}' USER '${USERNAME}' PASSWORD '${PASSWORD}';
SELECT .... ;
...
...
EXIT;

MYEND

#Окончание скрипта

Сохраняю файл с именем isql.sh, делаю его исполняемым и усе... Запуск - первый параметр имя базы данных, второй - юзер, третий пароль. Если роль нужна или скрипт сделать более крутым (проверка ввели данные или нет, правильность и т.д. это если надо, дописать не проблема)

Ошибку выдает потому, что в последней строке нет символа окончания строки. Скрипт прочитал команду EXIT, но не выполнил ее - типа не нажали на ENTER.