andruxa-xaxa |
Отправлено: 11.03.2007, 12:11 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
Мне надо перенести данные таблицы Paradox в таблицу Intrbase.
Таблица Paradox содержит русские слова. При попытке программно вставить запись в Intrbase
содержащую русские слова выдается ошибка "...exception EDBEngineError with message 'General SQL error.
arithmetic exception,numeric overflow, or string truncation
Cannot transliterate character between character sets'.
Я использую компонент TQuery, формирую запрос insert into t(field0) values(:field0)
и затем присваиваю Query->Params->ParamValues[ "field0" ] = val
Переменная val содержит русское слово.
Я попробовал вставить русский текст напрямую через Interactive SQL и все прошло нормально.
Язык таблицы Paradox : Cyrr 866, Intrbase CYRL.
Если кто встречался с такой проблемой подскажите пожалуйста. |
|
olegenty |
Отправлено: 12.03.2007, 10:11 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
найди и воспользуйся IBDataPump
|
|
ion |
Отправлено: 12.03.2007, 13:18 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 15
|
скорее всего проблема с кодировакой, при тарансляции,происходит переворот, стоит обратить внимание, какая кодировака у IB
какая кодировка у таблици IB.
если cp1251->utf8 то это болезненоое преобразование |
|
ion |
Отправлено: 12.03.2007, 13:19 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 15
|
попробуй прямо в скуле указать желаемую кодировку |
|
Tantos |
Отправлено: 12.03.2007, 15:55 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
Как вариант — посмотри длины строковых полей в обоих таблицах.
|
|
Admin |
Отправлено: 12.03.2007, 16:07 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
1. Посмотрите у этих полей OemToAnsi() или AnsiToOem()
то есть предварительно перд вставкой применить к
val эту функцию.
Query->Params->ParamValues[ "field0" ] = OemToAnsi(... val...)
2. Или у драйвера Paradox выставить эту кодировку на время
конвертации, а потом вернуть как было.
Посмотрите в SQL Explorer как видны эти поля в таблице -
нормально или кракозябликами.
Также нужно поиграть со свойством transliterate у поля,
возможно выставить его в false при этих конвертациях.
|
|
andruxa-xaxa |
Отправлено: 15.03.2007, 20:51 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
QUOTE (olegenty @ 12.03.2007, 10:11) | найди и воспользуйся IBDataPump |
Не могу — мне надо именно программу написать. |
|
andruxa-xaxa |
Отправлено: 15.03.2007, 21:18 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
QUOTE (Admin @ 12.03.2007, 16:07) | 1. Посмотрите у этих полей OemToAnsi() или AnsiToOem()
то есть предварительно перд вставкой применить к
val эту функцию.
Query->Params->ParamValues[ "field0" ] = OemToAnsi(... val...)
2. Или у драйвера Paradox выставить эту кодировку на время
конвертации, а потом вернуть как было.
Посмотрите в SQL Explorer как видны эти поля в таблице -
нормально или кракозябликами.
Также нужно поиграть со свойством transliterate у поля,
возможно выставить его в false при этих конвертациях. |
Я попробовал функцию OemToAnsi и AnsiToOem к строке, изначальное значение из Paradox нормально выводилось с помощью ShowMessage() а после этих функций выводится кракозяги какие-то, и все равно выдает ошибку.
А для Paradox через DatabaseDesktop я поменял кодировку с Paradox Cyrr 866 на Paradox 'ascii' и все строковые данные таблицы исказились.
Свойство transliterate — это свойство какого объекта? |
|
Admin |
Отправлено: 18.03.2007, 12:10 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Свойство поля. (для того поля где русский текст)
Чудес не бывает, смотрите что неправильно делаете.
Если смотреть таблицу через обычную связку Table->DataSource->DBGrid — эти
поля выводятся на русском или кракозябликами ?
|
|