0

キーフィールドとは異なるフィールドを使用して、データベースにレコードが存在するかどうかを知りたいのですが。

私は次のコードを試しました:

function start()
{
  jlog("start db query")
  myType d1 = {A:"rabbit", B:"poney"};
  /myDataBase/data[A == d1.A] = d1
  jlog("db write done")
   option opt = ?/myDataBase/data[B == "rabit"]
  jlog("db query done")

  match(opt)
  {
   case {none} : <>Nothing in db</>
   case {some:data} : <>{data} in database</>
  }
}

Server.start(
   {port:8092, netmask:0.0.0.0, encryption: {no_encryption}, name:"test"},
   [
     {page: start, title: "test" }
   ]
)

しかし、サーバーは電話を切り、jlog( "db query done")という行に到達することはありません。私は喜んで「ウサギ」のつづりを間違えます。私は何をすべきでしたか?

ありがとう

4

1 に答える 1

0

実際、あなたの例では失敗します。「Match failure 8859742」という例外がありますが、わかりませんか?

ただし、使用しない?/myDataBase/data[B == "rabit"]でください (コンパイル時に拒否されるべきでした - バグレポートが送信されました) が/myDataBase/data[B == "rabit"]、DbSet です。その理由は、主キーを使用しない場合、複数の値、つまり一連の値を返すことができるからです。

DbSet.iterator を使用して、dbset を iter に変換できます。次に Iter で操作します: http://doc.opalang.org/module/stdlib.core.iter/Iter

于 2012-08-26T20:03:16.593 に答える