6/24の業務報告


こんばんは,図書館情報メディア研究科の安永です.
KLC内は,中庭のドアを開けておくと風がよく通ってきもちいいですね.
本日の質問と回答です
----------
Q1.(知識情報演習I)
演習4-6で指示通りにプログラムを修正したが、画面に何も表示されない
A1.参照したいテーブルがDBに定義されていなかったことが原因だったので、テーブルが存在するか確かめる習慣をつけて下さい、と回答しました。
Q2.(知識情報演習I)
テキストを見てプログラム(ruby言語)を書いたが画面に何も表示されない.エラーが出るが意味が分からない.
A2.エラーの 「from ・・・」という部分をたどって見ると,エラーの発端がどこであったか分かります.”no such clumn” というエラーは,「テーブルにそのような名前の属性はありません」という意味です.今回のエラーはSQL文で指定している属性名が,実際のテーブルには存在していないことが原因です.SQL文の select の直後 と where句内に書いてる”name”が属性名です.テーブルのスキーマ(属性名の一覧)を見て,そこにある属性名を書くといいです,と回答しました.
Q3.(知識情報演習I)
SQL文の属性名を適切なものに修正したが,きちんと表示されない.
A3.条件で指定している語句と完全一致するものがテーブル内にないことが原因でした.SQL文の like 演算子の書き方を一緒に調べ,ワイルドカード%の使い方を見てもらいました.
Q4.(知識情報演習I)
いま,ある検索語が著者名にあれば表示することができている.これを,ある検索語が,タイトルや著者名など何でもいいから何かにヒットすれば表示したいが,どうすればいいか分からない.
A4.ORという演算子を使うとできます,と回答し,ORという演算子の使い方を一緒に調べました.
A4.何でもいいから何かにヒットするようにしたい,と言っていたが,課題のプリントを見ると「検索対象はタイトルと責任表示」だけでよいことが分かったので,そう伝えました.
Q5.(知識情報演習I)
SQL文のWEHER句内にORを使ってみたが,予想以上に沢山ヒットしてしまう.
A5.「WHERE a OR b OR c LIKE ‘hoge’」のようにOR文を使っていました.「WEHERE a OR 」と書くと,a というフィールドが存在するもの全て(つまり,全データ)がヒットしてしまうようですね.OR文の使い方の例を一緒に見て,「WHERE a LIKE ‘hoge’ OR b LIKE ‘hoge’ OR c LIKE ‘hoge’」と書くと,期待している動作をする条件文になります,と説明しました.
Q6.(知識情報演習I)
SQL文ののWEHER句内にORを使ったが,何も表示されない.
A6.where句内の条件を一部分だけ取り出して実行すると,実行できるので,そこに,where句内の他の条件を1つずつ足して実行していき,エラーの原因となっている条件を見つけて下さい,と回答しました.
Q7.(知識情報演習I)
(報告)教えてもらった方法でエラーの出る部分を探すと,where句に「OR date LIKE ‘hoge’」を足した時にエラーが出た.しかし,さらにやってみると,条件をある並び方で書けば,すべての条件を書いてもエラーは出ずに結果も表示できた.なので,これでやろうと思う.
A7.チューターとして,できれば原因をつきとめたいので,プログラムのコピーをいただけますか?と聞き,快諾していただきました.
Q8.(知識情報演習I)
SQL文でORでいくつか条件を指定したが,著者名を書いて検索した時しかマッチしない.タイトル名を書いて検索してもなにもヒットしない.
A8.Where句内の一番最初に書いた条件しか見られていないようでした.ORの書き方を一緒に調べましたが,解決策がすぐには分からなかったため,SQLを2つに分けて書く方法を提案しました.
6月24日追記:
rubyプログラムのdb.executeのブロック内の要素数の問題でした.ブロック内のsql文中に「?」を複数書く場合,それぞれの?に対応する文字列を渡す必要があるのに,1つしか渡していないことが原因でした.
間違い:db.execute{ “SELECT・・・WHERE titile LIKE ? OR author LIKE ?”, str}
正しい:db.execute{ “SELECT・・・WHERE titile LIKE ? OR author LIKE ?”, str, str}

Q9.SQLを2つに分けて書いたが,Internal Server Error がでてしまう.書き方がよく分からない.
A9.rubyプログラムで,「db.execute{」 内にもう一つの「db.execute{」を書いていた為,指摘して直してもらいました.
回答者:A1鈴木,A2-A9安永
-----—
急に暑くなりましたね.みなさん夏バテに気をつけてくださいね!