# access07.rb.txt: ruby script (encoding: Windows-31J) # z_access07.mdb, z_access07.txt を出力 # whereのいろいろな条件指定の例を示す # まず「ID,氏名,身長,誕生日,資格あり」からなるデータベースを作成 # それに様々なsql命令を実行し、その結果をテキストファイルに書き出す # 表は '+', '-', '|' を罫線にして出力 require "yado" require "rrx" filename = "z_access07.mdb" # データベースファイルの名前 if test(?e, filename) # z_access07.mdbが存在するなら削除 File.unlink(filename) end db = Yado.new(filename) # データベースを開く tblname = 'テーブル07' # これから作成するテーブルの名前 # ↓ テーブルの作成 sql = <= 170.0;" ary << [subject, sql] subject = "誕生日が1980年代の人" sql = "select * from #{tblname}\n" + " where 誕生日 >= #1980/01/01# and\n 誕生日 < #1990/01/01#;" ary << [subject, sql] subject = "誕生日が1970年代の人・between利用版" sql = "select * from #{tblname}\n" + " where 誕生日 between #1970/01/01# and #1979/12/31#;" ary << [subject, sql] subject = "鈴木さんと若林さんのデータ" sql = "select * from #{tblname}\n" + " where 氏名 = '鈴木' or 氏名 = '若林';" ary << [subject, sql] subject = "鈴木さんと若林さん以外の人のデータ" sql = "select * from #{tblname}\n" + " where not (氏名 = '鈴木' or 氏名 = '若林');" ary << [subject, sql] subject = "鈴木さんと若林さんのデータ・in利用版" sql = "select * from #{tblname}\n" + " where 氏名 in ('鈴木', '若林');" ary << [subject, sql] subject = "鈴木さんと若林さん以外の人のデータ・in利用版" sql = "select * from #{tblname}\n" + " where not 氏名 in ('鈴木', '若林');" ary << [subject, sql] subject = "誕生日が空欄の人" sql = "select * from #{tblname}\n" + " where 誕生日 is null;" ary << [subject, sql] subject = "誕生日が空欄でない人" sql = "select * from #{tblname}\n" + " where 誕生日 is not null;" ary << [subject, sql] subject = "氏名の最後の文字が「木」の人" sql = "select * from #{tblname}\n" + " where 氏名 like '%木';" ary << [subject, sql] subject = "氏名が、何か1文字+「木」の人" sql = "select * from #{tblname}\n" + " where 氏名 like '_木';" ary << [subject, sql] subject = "氏名の最後が「木」または「林」の人" sql = "select * from #{tblname}\n" + " where 氏名 like '%[木林]';" ary << [subject, sql] subject = "氏名の最後が「木」でも「林」でもない人" sql = "select * from #{tblname}\n" + " where 氏名 like '%[!木林]';" ary << [subject, sql] # sqlを1つづつ実行して、その歇果を出力 txt_str = '' # 出力結果をこの変数に記録 txt_str += "access07: where文の様々な例\n\n" # タイトル ary.each do |info| subject, sql = info res = db.query_result(sql) # sql命令の実行結果をresに代入 ary2 = [] res.pav(ary2) # resの内容を配列ary2にセットする ary2.shift # ary2の最初にあるsql文を取り除く tbl_str = Rrx::text_table(ary2, 1) # 配列ary2を表形式に変換 # ↑ 第2引数があるので1行目を見出し扱い(区切り罫線が入る) txt_str = txt_str + "※ " + subject + "\n" + sql + "\n\n" + tbl_str + "\n\n" end db.close # 結果をテキストファイルに書き出す txt_file = File.basename(filename, ".*") + ".txt" File.open(txt_file, "w") {|ff| ff.write txt_str}