проблема с созданием таблицы с полем типа MEMO в Access db с использованием perl / dbi / ODBC

perl 5.8.9

Привет, народ,

Мне удалось использовать DBI / DBD / ODBC для создания новой таблицы в существующей базе данных Access 2003 (.mdb) со следующей строкой: $ q = "CREATE TABLE memoTestA (name TEXT, addr TEXT)"; # работает

но я не могу понять, как добавить поле типа MEMO, т.е. $ q = "CREATE TABLE memoTestB (name TEXT, addr TEXT, desc MEMO)"; # выдает синтаксическую ошибку

Должен быть способ - в чем фокус?

switching form using DBD::ODBC to Win32::OLE gets me past the "bad syntax" error thrown by the ->Execute stmt, but I do not see the table actually created within the Access database. Hm.

#-------------------------------
sub setUpDatasourceLocalAccessC($)
{ my $debug = 0;
  my ( $dbFile) = @_;

  #Choose appropriate version of Jet for your system
  my $Jet = Win32::OLE->CreateObject('DAO.DBEngine.36') or die "Can't create Jet database engine.";

  my $dbh = $Jet->OpenDatabase( $dbFile);
  return $dbh;
 }
#-------------------------------
sub createMemoTablePrepareC($)
{
  my ($dbh_vdms) = @_;

  print "entering createMemoTablePrepareC\n" if $debug;

  my $errorHit = 0;
  my @table_arry = ();
  my @goodtable_arry = ();

  my $q   = undef;
  if( !defined( $dbh_vdms)) {
    _pushErrorMsg("db connection failed - ".$DBI::errstr);
    $errorHit = 1;
  } else {
    $q = "CREATE TABLE memoTestC (name TEXT, addr TEXT)";    # works
    $q = "CREATE TABLE memoTestC (name TEXT, addr TEXT, desc MEMO)";  #seems to work, no errmsg but dont see table appear in database
    $dbh_vdms->Execute( $q);
    if( my $errorMsg = $dbh_vdms->errstr ) {
      _pushErrorMsg("create statement failed - ".$errorMsg);
      $errorHit = 1;
    }
    $dbh_vdms->close();
    $dbh_vdms->disconnect();
  }

  print "exiting  createMemoTablePrepareC with errorHit=".$errorHit."\n" if $debug;
  return $errorHit;
 }

TIA,

Все еще обучающийся Стив


person user1201168    schedule 05.07.2013    source источник
comment
Вы уверены, что в Access есть мемо-поля - в чем ошибка?   -  person bohica    schedule 05.07.2013
comment
Да, M $ Acces определенно имеет тип данных MEMO. Возвращенное сообщение об ошибке просто говорит ... плохой синтаксис ....   -  person user1201168    schedule 08.07.2013


Ответы (1)


Не называйте столбец «desc», поскольку это зарезервированное слово. Если вы хотите сохранить имя столбца, вам придется его заключить в кавычки, например, create table fred ([desc] MEMO).

person bohica    schedule 11.07.2013