Friday, October 18, 2019



正誤表(初版:第1刷、第2刷)

Minimize
29ページ 本文2行目
新しいファイル「ruby_test01.rb」
新しいファイル「test01.rb」
78ページ 実行結果13行目
購入日の日付がプログラム中のデータと異なっている。
購入日: 2005-01-20
購入日: 2005-02-02
130ページ BookInfoManagerクラスのコード15行目
コードが途中で切れている。このページのコードを元にex1201を作成している場合には同じ箇所を修正する。
@book_infos["Ooba
@book_infos["Ooba2006"] = BookInfo.new(
173ページ
「CSVファイルを使った蔵書管理アプリケーションの最終版(つづき)」のコードは、すでにex1601のコードに記載済みの部分。不要なので削除する。
210ページ
209ページから続くgemの実行結果のうち、210ページの先頭に続いている5行はsqlite3-rubyの実行結果を誤って掲載している。この5行は不要なので削除する。
213ページ 本文2行目
sqlite3.exe
sqlite3.dll
222ページ ex1910.rb
11行目の実行後、ステートメントハンドルの開放を忘れている。そのために222ページ後半に説明した実行時エラー「unable to close due to unfinalised statements (SQLite3::BusyException)」が発生していた。
# テーブルに登録されたデータを削除する
# deletet文の実行
dbh.execute("delete from products")
puts "all records are deleted."
# テーブルに登録されたデータを削除する
# deletet文の実行
# sthにexecuteメソッドが返すステートメントハンドルを保持
sth = dbh.execute("delete from products")
puts "all records are deleted."

# ステートメントハンドルを解放する
# (本書上ではこの処理が抜けてエラーになっている)
sth.finish
または、
# テーブルに登録されたデータを削除する
# executeメソッドでレコードを削除するSQLを実行後、
# finishメソッドでステートメントハンドルを開放する
dbh.execute("delete from products").finish
puts "all records are deleted."
と修正する。
また、222ページ後半の実行時のエラーの記載を削除する。
228ページ 本文4行目
insert文を実行すると、
select文を実行すると、
270ページ ex2404.rb 41行目
末尾の以下のコードは不要なので削除する
# 
#class TestCGI < WEBrick::CGI
#  def do_GET(req, res)
#    res["content-type"] = "text/plain"
#    ret = "hoge\n"
#    res.body = ret
#  end 
#end
#
#TestCGI.new.start() 
308ページ bookinfo_web.rb
Webアプリケーション版蔵書管理アプリケーションでエンコーディングエラーが発生する。
require 'rubygems'
require 'dbi'
エンコーディングエラー対策のパッチを追加する
(enc_patch.rbは、「ダウンロード」から入手し、bookinfoフォルダに配置する)。
require 'rubygems'
require 'dbi'
# sqlite-rubyが返すencodingへの対策
require 'enc_patch'
311ページ list.erb 43,44行目
operationと書くところをoparationと書いている (それぞれ紙面上は1行)。
      <td><input type="radio" name="oparation" value=<%="#{val}.delete"%> /></td>
      <td><input type="radio" name="oparation" value=<%="#{val}.edit"%> /></td> 
      <td><input type="radio" name="operation" value=<%="#{val}.delete"%> /></td>
      <td><input type="radio" name="operation" value=<%="#{val}.edit"%> /></td> 
313ページ book_info.rbの11行目
operationと書くところをoparationと書いている (紙面上は1行)。
  if /(.*)\.(delete|edit)$/ =~ req.query['oparation']
  if /(.*)\.(delete|edit)$/ =~ req.query['operation']
328ページ retrieved.erbの54,55行目
operationと書くところをoparationと書いている (それぞれ紙面上は1行)。
       <td><input type="radio" name="oparation" value=<%="#{row[name]}.delete"%> /></td>
       <td><input type="radio" name="oparation" value=<%="#{row[name]}.edit"%> /></td>
       <td><input type="radio" name="operation" value=<%="#{row[name]}.delete"%> /></td>
       <td><input type="radio" name="operation" value=<%="#{row[name]}.edit"%> /></td>