Bonjour,
Je me suis initié il y a peu à SQLite pour un programme de gestion d'argent de poche. Celui-ci comprend un historique et c'est là que la base de donnée intervient. Le logiciel comprend trois classes pour le moment :
Money
Qui sert à afficher correctement au format monétaire, et quelques conversions vers d'autre système monétaire que l'Euro.Transaction
Qui représente une transaction ([ajout/retrait], montant, date, commentaire). Montant est une instance de la classeMoney
.History
Qui est la fameuse classe de l'historique.
Voici donc le code de History
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #!/usr/bin/env ruby # encoding: utf-8 require "sqlite3" require_relative "Transaction" class History def initialize() begin @db = SQLite3::Database.open "history.db" @db.execute 'CREATE TABLE IF NOT EXISTS History(Id INTEGER PRIMARY KEY AUTOINCREMENT, Type TEXT, Amount INT, Date TEXT, Comment TEXT);' rescue SQLite3::Exception => e puts "Exception occured : (init)" puts e end end def write(transaction) begin rep = @db.prepare 'INSERT INTO History(Type, Amount, Date, Comment) VALUES(?, ?, ?, ?);' prep.bind_params(transaction.type, transaction.amount.value, transaction.date, transaction.comment).execute prep.close rescue Exception => e puts "Exception occured : (write)" puts e end end def close @db.close if @db end end if __FILE__ == $0 t = Transaction.new("+", 45.26, "Merci mamie!") h = History.new h.write(t) h.close end |
Et voici l'erreur :
1 2 3 4 5 | Exception occured : (write) undefined method `execute' for ["+", 45.26, "2015-02-19 08:36:13", "Merci mamie!"]:Array History.rb:29:in `close': unable to close due to unfinalized statements or unfinished backups (SQLite3::BusyException) from History.rb:29:in `close' from History.rb:37:in `<main>' |
Donc on apprend que l'erreur vient de la méthode History::wite
. Comment puis-je exécuter cette requête ? Je comprend bien que je ne peut pas utiliser la méthode execute
sur un objet de type Array, mais je ne vois pas comment faire autrement…
Merci de votre aide !
+0
-0