Forum Webscript.Ru
Программирование => Perl => Тема начата: Phoinix от 25 Октября 2004, 10:36:21
-
Доброго времени суток!!!
Понадобился скрипт для переноса данных из MS Access в DBase.
Для подключения к MS Access использовал DBD::ODBC
Для подключения к DBase использовал DBD::XBase
С MS Access базой - проблем никаких нет, а вот с DBase возникла проблема при вставке строки. Выборка обновление и удаление работают на ура...
И самое интересное, что просматривая базу в текстовом режиме, видно что эти данные он записал, но в самой базе их нет...
Попробовал зацепиться к DBase через, ODBC... Insert заработал, но при этом потерялась кодировка, т.е. все кириллические символы стали знаками "?"
Использование Unicode::String - тоже результатов не дало... вопросы пропали, но текст русский не появился...
Есть еще зверь такой XBase, но дошел только до получения параметров таблицы...
-
При написании курсовой на Delphi у меня была схожая проблема, точный рецепт уже не помню, но кажется приходилось закреплять query методом Post (или Append, вобщем надо где-то исходники поискать), возможно у DBD::XBase есть эти дополнительные методы?
А насчет кодировки, то в Access она чаще всего win1251, а в базах типа *.dbf и прочих Dos866.
В таких случаях я пользуюсь модулем Cyrillic (qw/dos2win win2dos/), очень удобно.
И встречный вопрос, у меня проблема с выборкой из Ассess, если в селекте выбирается среди прочих поле типа Boolean (которое в базе показывается галочкой при true), то селект ничего не возвращает. Как можно получить это поле? Ума не приложу, по всякому бился.
-
BonJorno
если в селекте выбирается среди прочих поле типа Boolean (которое в базе показывается галочкой при true), то селект ничего не возвращает.
Select возвращает 0 или 1, 0 - равносильно undef поэтому после селекта нужно делать проверку на существование (инициализацию) данной переменной.
my $sth = $dbh_odbc -> prepare("SELECT * FROM my_table...");
$sth -> execute();
while (my $row = $sth -> fetchrow_hashref()) {
$$row{\'boolean\'} = $$row{\'boolean\'} ? \'True\' : \'False\';
...
}
$sth -> finish();
А насчет кодировки, спасибо, попробую...