Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADO + MS SQL Server 2000 / 22 сообщений из 22, страница 1 из 1
10.09.2003, 14:23
    #32261207
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Привет!

Кто поможет справиться со следующей проблемой:
Использую TADOConnection и TADOQuery для работы с MS SQL Server 2000. Connection String равна следующему:

Provider=SQLOLEDB.1;Password=MyPWD;Persist Security Info=True;User ID=MyUser;Initial Catalog=MyDB;Data Source=localhost;Current Language=Russian;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False

Когда делаю следующий запрос через эти компоненты:
insert into Table1 (name) VALUES ('Привет')

то в базе данных получаю вместо 'Привет' 'I?eaao'.
Что не так и как это дело пофиксеть?
...
Рейтинг: 0 / 0
10.09.2003, 14:38
    #32261236
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Надо, наверное, посмотреть скрипт с таблицы.
Какая там кодировка стоит?
...
Рейтинг: 0 / 0
10.09.2003, 14:51
    #32261258
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Collation name = Cyrillic_General_CI_AS.

Более того, я подозреваю, что база данных настроена как надо, так как я написал маленькую прогу на C#, где через ADO.NET делал этот же запрос - строка правильно записывается в БД.

Еще идеи?
...
Рейтинг: 0 / 0
10.09.2003, 15:10
    #32261292
Nikulin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Кусок кода покажи где у тя insert идет...
...
Рейтинг: 0 / 0
10.09.2003, 15:24
    #32261322
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Вот он:

qryTemp1.SQL.Clear;
qryTemp1.SQL.Add(SQL);
iResult := qryTemp1.ExecSQL();
qryTemp1.Close();

Он очень простой...
...
Рейтинг: 0 / 0
10.09.2003, 18:33
    #32261618
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
> qryTemp1.SQL.Add(SQL)

А откуда переменную SQL береш?
...
Рейтинг: 0 / 0
10.09.2003, 18:42
    #32261628
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Эта переменная может быть равна следующему значению:

SQL := 'insert into Table1 (name) VALUES ('Привет')';

Я тут коварнул глубже и обнаружил, что все работает нормально, если поставить locale в Russioan. Но у меня должен стоять English(US). Посеме вопрос - как в Delphi трекается locale и как его мжно поменять для приложения целиком или частично?
...
Рейтинг: 0 / 0
11.09.2003, 10:24
    #32261981
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Попробуй 'Auto Translate=False'
...
Рейтинг: 0 / 0
11.09.2003, 11:42
    #32262135
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Не помогает.
...
Рейтинг: 0 / 0
12.09.2003, 11:29
    #32263383
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Странно, что через C# нормально пишется. Пробуй еще :
Tag with column collation when possible=True;
и добавь Locale Identifier=Russian
...
Рейтинг: 0 / 0
12.09.2003, 12:02
    #32263457
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
И это не решает проблемы...
...
Рейтинг: 0 / 0
12.09.2003, 13:15
    #32263618
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
а настройки сервера смотрел ?
...
Рейтинг: 0 / 0
12.09.2003, 13:53
    #32263698
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Ладно, по порядку - с базой :
У сервера и database в свойствах правильный Collation ? Для таблицы скрипт генерируем, там непоняток с Collation нет ?

Если ничего другое не поможет - попробуй в самом начале программы поставить :
SetThreadLocale( MAKELCID( MAKELANGID( LANG_RUSSIAN, SUBLANG_DEFAULT), SORT_DEFAULT));
(Если, конечно, вся работа с датасетами в программе идет в основном потоке) При вызовах через OLE может где-то использоваться LOCALE_SYSTEM_DEFAULT, а может LOCALE_USER_DEFAULT. Если виноват второй случай - может помочь, в первом - нет.
...
Рейтинг: 0 / 0
12.09.2003, 18:05
    #32264051
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
1) C Collation все апрорядке...
2) Способ я вчера надыбалю Он решает проблему... Но насколькл он правильный, вот в чем вопрос...
...
Рейтинг: 0 / 0
14.09.2003, 14:10
    #32264478
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Дык хоть поделись, что за способ-то ?
...
Рейтинг: 0 / 0
15.09.2003, 14:53
    #32265164
Nick_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Юзаю SetThreadLocale(...)
...
Рейтинг: 0 / 0
19.09.2003, 02:47
    #32269754
Oleg K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Скорее всего - это неправильная настройка либо сервера либо клиента.
По умолчанию все должно работать, иначе при каждом переносе программы на другую машину могут быть разные проблемы..... и всех их решать можно без конца.
ИМХО - Это скорее вопрос о настройках к СисАдмину
...
Рейтинг: 0 / 0
21.09.2003, 14:43
    #32271126
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Здесь все дело именно в том, что где-то при прохождении COM преобразований вариантов используется текущий locale, а он в системе (и в потоке приложения) выставлен в English по умолчанию.
Взгляните, нет ли в опциях проекта или модуля у Вас опции H- (использовать короткие строки по умолчанию).
Я бы попробовал еще просто открыть любой COM объект (Excel) на этой же машине, в этом же проекте, передать в него строковую константу, заданную так же явно в тексте программы. Если результат будет нормально читаться - проблема в ADO + SQL provider, если нет - взаимодействие Delphi с COM. Т.е. надо хотя бы примерно представить, в чем загвоздка.
...
Рейтинг: 0 / 0
22.09.2003, 00:23
    #32271219
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Эта переменная может быть равна следующему значению:
SQL := 'insert into Table1 (name) VALUES ('Привет')';

Вроде правильнее было бы так:

SQL := 'insert into Table1 (name) VALUES (''Привет'')';
...
Рейтинг: 0 / 0
22.09.2003, 07:21
    #32271245
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Вряд ли компилятор пропустил бы такую ошибку :-)
...
Рейтинг: 0 / 0
22.09.2003, 10:40
    #32271371
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Тогда надо смотреть профайлером.
...
Рейтинг: 0 / 0
22.09.2003, 11:51
    #32271479
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO + MS SQL Server 2000
Еще - выполнено ли :
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1252"="c_1251.nls" - один из этапов стандартной русификации системы.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADO + MS SQL Server 2000 / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]