Добрый день!
Столкнулся со следущей проблемой: работаю с MSServer через ADO. На клиенте установлен W2000 pro. Если в региональных настройках установлен English (UK) при установленном Default Language = Russian, весь русский тескт при попадании в базу превращается в абра-кадабру. Если установить в рег. настройках Russian, все нормально.
Перепробовал все разумные возможности - ничего не помагает. При чем искажение происходит именно на клиенте, я коннектился через ODBC и смотрел логи.
Очень нужна помощь!
Спасибо
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
function GetDefaultUserCodePageAddr:PInteger;
type
TCode=packed record
CallOpA:Byte;
OffsetA:Integer;
CallOpB:Byte;
OffsetB:Integer;
MovOp:Byte;
VarAddr:Pointer;
end;
TCodes=packed record
Code1:TCode;
JMP:Word;
Code2:TCode;
end;
var
Code:^TCodes;
Count:Integer;
MemInfo:TMemoryBasicInformation;
begin
Result:=nil;
if (VirtualQuery(TObject,MemInfo,SizeOf(MemInfo))<SizeOf(MemInfo))
or(MemInfo.State<>MEM_COMMIT) then Exit;
Code:=MemInfo.BaseAddress;
Count:=MemInfo.RegionSize;
while Count>0 do begin
with Code^ do
if (Code1.CallOpA=$E8)and(Code1.CallOpB=$E8)and(Code1.MovOp=$A3)
and(Code2.CallOpA=$E8)and(Code2.CallOpB=$E8)and(Code2.MovOp=$A3)
and(Code1.OffsetA-Code1.OffsetB=Code2.OffsetA-Code2.OffsetB)
and(Code1.VarAddr=Code2.VarAddr) then begin
Result:=Code1.VarAddr;
Break;
end;
Inc(PByte(Code));
end;
end;
Я обнаружил на каком этапе возникает глюк : попробовал сконвертнуть Ansi строку содержащую русский текст в Unicode с помощью функции StringToWideChar( или VarToOleStr) - получается та самая абра-кадабра. Т.е. Ado на каком-то этапе проводит такую конвертацию.
Почему такое может быть?
Вряд ли глюк в ADO. Хотя можно проверить - установите последнюю версию MDAC, если все заработает нормально, то так оно и есть.
Кроме того, ADO - один из лучших способов доступа к MS SQL Server, хотя бы потому, что поддерживается Microsoft. В принципе, можно работать и через dbExpress (он тоже базируется на OLE DB).
Client Network utility не помогла .
Попробовал сделать небольшой тестик на dbExpress компонентах - все рабоает нормально. Глюк все-таки где-то внутри ADO реализации.
Есть ли хотя бы какой -нибудь альтернативный набор компонент для SqlServer, проверенный и бесплатный ?
"Use international settings" в Client network utility - Что это такое?
Client network utility - это утилита, входящая в состав клиента для SQL-сервера. "Use international settings" ("Использовать интернациональные настройки") - чекбокс на одной из закладок.
Анатолий, я не преобразовываю из русского в английский. Я пытаюсь всавить русский текст в базу. Проблема в использующихся кодовых страницах, которые непонятно почему менются от установленного Regional settings, хотя не должны (должен влиять Default language). Видимо глюк где в ADo, потому что в BDE я никогда с подобными проблемами не сталкивался. Тем более что через ту же Management Console русский текст совершенно нормально заносится.
>Use international settings" в Client network >utility - Что это такое?
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.