Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-64746
oss
2002-05-07 03:18
2002.05.20
пакеты (BPL)


1-64624
Varg
2002-05-08 09:30
2002.05.20
Функция времени работы пользователя


3-64550
lukey
2002-04-22 07:51
2002.05.20
Можно ли работать с таблицами db, dbf без BDE?


3-64558
SuperSmit
2002-04-24 14:58
2002.05.20
Paradox на Nowell


1-64593
GUYARD
2002-05-06 21:01
2002.05.20
Есть вопрос к Мастерам!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский