#!/usr/bin/ruby -w #============================================================= # discos.rb - cliente a la DB discos.db (SQLite3) # #============================================================= # FJA - neocipres@gmail.com Septiembre de 2008 (12/12/10) #============================================================= require 'rubygems' require 'sqlite3' # BUGS -> warning: global variable `$swig_runtime_data_type_pointer2' not initialized si dejamos -w $swig_runtime_data_type_pointer2 = nil $db = '/home/paco/prgdgnu/ruby/discos/discos.db' def listar(campo) if !campo sql = 'SELECT * FROM t1' else sql = "SELECT autor,ndisco,tipo,ae,codigo FROM t1 ORDER BY #{campo}" end db = SQLite3::Database.new($db) regs = db.execute(sql) db.close() return regs end def buscar(campo, texto) if campo == 'temas' sql = "SELECT autor,ndisco,tipo,ae,codigo,tca1,tca2,ob FROM t1 where tca1 like '%"+texto+"%' OR tca2 like '%"+texto+"%' ORDER BY autor, ndisco" else sql = "SELECT autor,ndisco,tipo,ae,codigo,tca1,tca2,ob FROM t1 where "+campo+" like '%"+texto+"%' ORDER BY autor, ndisco" end db = SQLite3::Database.new($db) regs = db.execute(sql) db.close() return regs end def contar(campo) sql = "SELECT #{campo}, COUNT(*) FROM t1 GROUP BY #{campo}" db = SQLite3::Database.new($db) regs = db.execute(sql) db.close() return regs end def eliminar(codigo) sql = "DELETE FROM t1 WHERE codigo='#{codigo}'" db = SQLite3::Database.new($db) regs = db.execute(sql) db.close() return regs end def listarc() sql = "SELECT codigo, autor, ndisco FROM t1 GROUP BY codigo" db = SQLite3::Database.new($db) regs = db.execute(sql) db.close() return regs end def listarb(campo,texto) if campo == 'temas' sql = "SELECT autor,ndisco,tipo,ae,codigo FROM t1 where tca1 like '%"+texto+"%' OR tca2 like '%"+texto+"%' ORDER BY autor, ndisco" else sql = "SELECT autor,ndisco,tipo,ae,codigo FROM t1 where "+campo+" like '%"+texto+"%' ORDER BY autor, ndisco" end db = SQLite3::Database.new($db) regs = db.execute(sql) db.close() return regs end begin opcion, campo, valor = ARGV raise if ARGV.size == 0 || opcion == '-h' case opcion when '-l' salida = listar(campo) puts "\n\t " salida.each { |reg| puts "\t #{reg.join(' ')}" } puts "\n\t Registros listados: #{salida.size} \n\n" when '-b' campo = 'codigo' if !campo if valor valor = valor.upcase else valor = ' ' end salida = buscar(campo, valor) puts "\n" salida.each { |reg| print "\n\t#{reg.join("\n\t")} ", "\n\t", "-"*79 } puts "\n\t Registros listados: #{salida.size} \n\n" when '-c' campo = 'autor' if !campo salida = contar(campo) puts "\n\t " salida.each { |reg| puts "\t #{reg.reverse.join("\t")}" } puts "\n\t Registros listados: #{salida.size} \n\n" when '-d' cod = campo.upcase salida = buscar('codigo', cod) print "\n\t", "="*79 puts "\n\t#{salida.join("\n\t")} " print "\t", "="*79 print "\n\n\t", "Desea eliminar el registro? (s/n) " tecla = STDIN.gets if tecla[0].chr.upcase == 'S' salida = eliminar(cod) puts "\n\tRegistro borrado \n\n" if salida else exit end when '-lc' codigos = [] salida = listarc() salida.each { |reg| codigos << reg[0][2..-1]} puts "\n\t " salida.each { |reg| puts "\t #{reg.join(' ')}" } puts "\n\t Registros listados: #{salida.size} \n" puts "\n\t Último valor de código: #{codigos.max} \n\n" when '-lb' campo = 'codigo' if !campo if valor valor = valor.upcase else valor = ' ' end salida = listarb(campo, valor) puts "\n" salida.each { |reg| puts "\t #{reg.join(' ')}" } puts "\n\t Registros listados: #{salida.size} \n\n" else puts "\n\t No es válida la opción \n\n" end rescue if ARGV.size == 0 || opcion == '-h' print "\n\t", "="*80 print "\n\t Uso: discos <opcion> [campo] [valor] \n" print "\t", "-"*80, "\n " print "\t Campos: autor, ndisco, tipo, gro, ae, codigo, temas, ob \n " print "\t", "-"*80, "\n " print "\t Opciones: \n " print "\n\t\t -l -> lista todos los registros \n " print "\n\t\t -lb campo texto -> lista los registros que coincidan con campo y texto \n " print "\n\t\t -lc -> devuelve el último código introducido\n " print "\n\t\t -l campo -> lista todos los registros ordenados por campo \n " print "\n\t\t -b campo texto -> busca los registros en campo con el texto \n " print "\n\t\t -c campo -> contar los registros según el campo \n " print "\n\t\t -d codigo -> elimina el registro según código \n " print "\t", "="*80, "\n\n" else print "\n\t Error-> #{$!} \n\n" end rescue SQLite3::SQLException print "\n\t Error-> #{$!} \n\n" end