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

Кто поможет справиться со следующей проблемой:
Использую 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
ADO + MS SQL Server 2000
    #32261236
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо, наверное, посмотреть скрипт с таблицы.
Какая там кодировка стоит?
...
Рейтинг: 0 / 0
ADO + MS SQL Server 2000
    #32261258
Nick_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Collation name = Cyrillic_General_CI_AS.

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

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

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

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

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

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

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

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

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

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


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