Форум: "Базы";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
ВнизКак установить таблице хитрый язык? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 1.121 c