Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.20;
Скачать: CL | DM;

Вниз

Как установить таблице хитрый язык?   Найти похожие ветки 

 
Aleksandr ©   (2002-04-22 11:45) [0]

Проблема в том, что я в старых системах избавляюсь от хранения данных в Парадоксе, а при запросе клиента они создаются копированием с SQL-сервера. Но вот один умный товарищ, когда все это только создавалось, умудрился парочку таблиц создать с языком Pdox "ascii" japan. Соответственно, по запросам клиентов они должны создаваться с таким же языком - у них все ПО на него компилировано. Есть у меня старая процедурка для установления языка:

procedure ChangeLocale( const TblDir, TblName, NewLocale : string);
const OptFldDesc : FLDDesc =
( iFldNum : 1;
szName : "LANGDRIVER";
iFldType : fldZSTRING;
iSubType : fldUNKNOWN;
iUnits1 : DBIMAXTBLNAMELEN;
iUnits2 : 0;
iOffset : 0;
iLen : DBIMAXSCFLDLEN;
iNullOffset : 0;
efldvVchk : fldvNOCHECKS;
efldrRights : fldrREADWRITE;
bCalcField : false);
var TblDesc: CRTblDesc;
hDB : hDBIDB;
TblTime : integer;
FName : string;
begin
FName := CorrectPath( TblDir) + TblName;
if (NewLocale = "") or MatchLDName( FName, NewLocale) then
Exit;
TblTime := GetFileTimeStamp( FName);
try
FillChar(TblDesc, SizeOf(CRTblDesc), 0);
with TblDesc do begin
StrPCopy( szTblName, TblName);
StrCopy( szTblType, szPARADOX);
pFldOptParams := @OptFldDesc;
pOptData := PChar( NewLocale);
iOptParams := 1;
end;
Check(DbiOpenDatabase( nil, nil, dbiReadWrite, dbiOpenExcl, nil, 0, nil, nil, hDb));
Check(DbiSetDirectory(hDb, PChar( TblDir)));
Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False));
finally
Check(DbiCloseDatabase(hDb));
SetFileTimeStamp( FName, TblTime);
end;
end;

Таким образом, передаешь параметром "cyrr", и будет тебе Paradox cpp866. Но если дашь параметром "japan", то будет Paradox Japan, а фразу типа Pdox "ascii" japan она вообще не воспринимает, генеря exception. Как-нить истчо можно задать язык таблице?


 
Lusha ©   (2002-04-22 13:39) [1]

Передайте в качестве параметра ascii... :)

А вообще лучше было бы использовать в качестве параметра не имя драйвера, а его описание как в BDE Administrator...


 
Aleksandr ©   (2002-04-22 14:07) [2]

Спасибо...
Правда, теперь возник другой вопрос: данные, перегнанные в таблицу, оказываются не в той кодировке :(. Понятно, у SQL-сервера они в АНСИ-формате, у созданных таблиц Парадокса драйвер языка стоит нужный, но вот сами данные отображаются совершенно криво. Понятно, что они и должны криво отображаться в случае с японской кодировкой, но вот с обычным Paradox cp866... Я перепробовал кучу вариантов:
1) создавал таблицы с нужным драйвером, затем включал у BatchMove Transliterate - не помогло
2) создавал таблицы с драйвером АНСИ, потом батчмувил без транслитерации, потом менял драйвер на нужный - та же фигня.
3) то же самое, но со включением транслитерации - та же фигня
4) просто копировал данные - тем более фигня :(


 
Lusha ©   (2002-04-22 14:17) [3]

Я не совсем понимаю, как Вы определяете какой именно языковый драйвер нужно установить в каждом конкретном случае... Насколько я понял, у Вас в БД на сервере данные разных таблиц расходятся в кодовых страницах... Или я чего то не уловил? :(


 
Aleksandr ©   (2002-04-22 14:33) [4]

Нет, уловили правильно... Есть таблица правил, в которой и хранится инфа, какой драйвер должен быть у конкретно создаваемой таблицы. На сервере SQL все хранится в одном, эскуэльном виде, а вот парадоксовые должны быть двух видов - с Paradox Cyrr 866 Paradox "ascii" Japan. Вот такая вот петрушка. Причем я уже въехал, как были испорчены таблицы с японским кодом - они из формата Парадокс cyrr 866 были реструктурированы в японский. Так что вопрос остался только в том, как кинуть из SQL-сервера в формат Paradox cyrr 866, mutta perkele sen tiet


 
Lusha ©   (2002-04-22 14:49) [5]

Все равно не понимаю почему нельзя иметь все данные в тодной кодовой странице, будь то MS SQL или Paradox таблицы...

А по поводу Вашего вопроса, я думаю, и не должен... По крайней после прочтения справки я понял именно так...


 
Aleksandr ©   (2002-04-22 15:00) [6]

Ну, нельзя по условию... Потому что у некоторых клиентов очень старые компьютеры и соответствующие версии программ - под чистый ДОС, и ориентированы они изначально на определенные драйвера. Менять все это дело - замучаешься турбовижен вспоминать, а хранение одних и тех же данных на сервере в двух форматах - это продемонстрировало целый ряд проблем (периодическая несинхронизация и т.д.). Отсюда и мысль о том, чтобы при связи клиенты получали не хранящиеся бестолково таблицы, а свежесоздаваемые. Но вопрос остался открытым - как мне быстро скинуть данные из таблицы с форматом ANSI в формат Paradox cyrr 866.


 
Lusha ©   (2002-04-22 15:04) [7]

Банально пройтись по выборке и добавить записи во вновь созданную Paradox таблицу, например, при помощи метода AppendRecord...


 
Aleksandr ©   (2002-04-22 15:12) [8]

Это долгий способ, увы... У многих клиентов, особенно в заштатных Забердяевках, связь не такова, чтобы ждать обработки сервером запроса с порекордной перекодировкой... Я вот думаю над таким хитрым свойством Датасетов под названием ActiveBuffer:
Dest.Translate(Dest.ActiveBuffer, Dest.ActiveBuffer, true).
Интересно, всю ли таблицу он вмещает...


 
Lusha ©   (2002-04-22 15:16) [9]

Интересно, всю ли таблицу он вмещает...

Увы, текущую запись... :)



Страницы: 1 вся ветка

Текущий архив: 2002.05.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
6-64773
Kirill_
2002-03-07 00:24
2002.05.20
Net


1-64711
IDL
2002-05-06 19:36
2002.05.20
Нужен элемент baloon


1-64729
Proud Berdiyan
2002-05-01 14:54
2002.05.20
В чем глюк?


14-64815
LazorenkoX
2002-04-11 16:53
2002.05.20
Воспоминания... autoexec.bat or config.sys?


7-64857
gluka
2002-02-16 02:47
2002.05.20
Как можно в вынь2к, ХР закрыть доступ к дисководу??? Есть ли что то для етого в АПИ??