Stavo facendo un applicazione di prova con rails e DB2 per capirne le
potenzialità , continuo su questo forum la mia odissea nel caso possa
servire ad altri.
Premetto che ho avuto non pochi problemi nell’installare la versione
corretta del DB2 connect ma grazie anche all’aiuto di esperti come
Antonio C. ho risolto. In questa discussione si tratta la
questione della connessione:
http://www.ruby-forum.com/topic/123595
Dopo aver verificato l’esito positivo della connessione tra ruby e db2
il passo successivo era l’utilizzo di rails.
Tra i problemi iniziali c’era (e ho tutt’ora) quello dello schema nel
file database.yml
development:
adapter: ibm_db
database: ***
username: ***
password: ***
schema: myschema
host: ***
port: ***
se lo imposto ottengo questo messaggio
[IBM][CLI Driver][DB2] SQL0567N “myschema” non è un ID di
autorizzazione valido. SQLSTATE=42503
SQLCODE=-567
purtroppo l’ho superato solo tramite una toppa nel modello ma non so se
in futurò avrò problemi per esempio quello che descrivo sotto per
l’update, la toppa è questa:
set_table_name “myschema.mytable”
Un altro problema che ho avuto riguardava l’estrazione dei dati:
@t = Table1.find(:all, :include => :mytable2, :select =>
“myschema.mytable1.ID, myschema.mytable1.CAMPO1,
myschema.mytable1.CAMPO2, myschema.mytable2.ID”,
:conditions=>[“myschema.mytable1.datains >= ? AND
myschema.mytable1.datains <=
?”,params[:ricerca][:data_da],params[:ricerca][:data_a] ] )
Non so se è un baco o sbaglio qualcosa io ma usando quella find,
specificando i campi della select e facendo l’include della seconda
tabella, vengono estratti solo i due campi “id” delle due tabelle, tutti
gli altri non ci sono.
Inizialmente pensavo fosse dovuto alle tabelle molto grosse (con molti
campi), poi girovagando su internet, ho risolto togliendo l’include
della seconda tabella e mettendo questa nella select per far estrarre i
campi:
(Select count(*) From myschema.mytable2 Where myschema.mytable1.id =
myschema.mytable2.mytable1_id)
la find finale completa è diventata questa:
@t = Table1.find(:all, :select => “myschema.mytable1.ID,
myschema.mytable1.CAMPO1, myschema.mytable1.CAMPO2, (Select count(*)
From myschema.mytable2 Where myschema.mytable1.id =
myschema.mytable2.mytable1_id)”,
:conditions=>[“myschema.mytable1.datains >= ? AND
myschema.mytable1.datains <=
?”,params[:ricerca][:data_da],params[:ricerca][:data_a] ] )
L’ho poi sostituita con la paginate ma il succo non cambia.
Attualmente ho un altro problema. Riguarda l’aggiornamento dati ed è
ancora più strano. Si può testare anche nella console, faccio un esempio
che rende meglio:
ruby script/console
Loading development environment (Rails 2.0.2)
t=Table1.find(1)
=> #
t.autoritarilascio
=> "COMUNE DI "
t.autoritarilascio=“pippo”
=> “pippo”
t.save
=> true
t.autoritarilascio
=> “pippo”
t=Table1.find(1)
=> #
t.autoritarilascio
=> "COMUNE DI "
t.save ha esito positivo ma non aggiorna il db, il modello si ma il db
no. Guardando il log non effettua l’update, ci sono solo select, cosa
può essere?