Forum Webscript.Ru

Программирование => Perl => Тема начата: Phoinix от 25 Октября 2004, 10:36:21

Название: XBase - вставить строку
Отправлено: 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, но дошел только до получения параметров таблицы...
Название: XBase - вставить строку
Отправлено: BonJorno от 26 Октября 2004, 07:43:43
При написании курсовой на Delphi у меня была схожая проблема, точный рецепт уже не помню, но кажется приходилось закреплять query методом Post (или Append, вобщем надо где-то исходники поискать), возможно у DBD::XBase есть эти дополнительные методы?
А насчет кодировки, то в Access она чаще всего win1251, а в базах типа *.dbf и прочих Dos866.
В таких случаях я пользуюсь модулем Cyrillic (qw/dos2win win2dos/), очень удобно.
И встречный вопрос, у меня проблема с выборкой из Ассess, если в селекте выбирается среди прочих поле типа Boolean (которое в базе показывается галочкой при true), то селект ничего не возвращает. Как можно получить это поле? Ума не приложу, по всякому бился.
Название: XBase - вставить строку
Отправлено: Phoinix от 26 Октября 2004, 09:45:40
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();

А насчет кодировки, спасибо, попробую...