Ciao a tutti , 
ho un problema con un programmino che sto facendo che importa dei listini da un 
file di testo ed aggiorna alcune tabelle nel database SQLSERVER.
In pratica prima mi inserisco tutti i dati/prezzi che mi servono all'interno di 
un dizionario, poi faccio l'aggiornamento di una tabella che si trova nel 
Server e si chiama dbo.listini_art_for e fin qua non ci sono riuscito.
Se non ché mi viene in mente che vorrei aggiornare anche delle descrizioni e il 
codice a barre che però è contenuto in un'altra tabella...
E quindi ho agito come segue:


Il dizionario si chiama self.dict_articoli e ogni voce contiene a sua volta un 
piccolo dizionario con altre voci:

self.tutti_codici[codice di 
riferimento]={"descrizione","listino","costo","qta_imballo","sconto_1","metel","barcode"}

Ho creato tre query come segue:

self.query=QSqlQuery()  #Questa mi seleziona tutti i record del database che 
voglo aggiornare e con query.next li scorro ad uno a uno
self.query_inserimento=QSqlQuery() #Questa mi serve mentre scorro i record per 
aggiornarli
self.query_aggiornamento_dbo_articoli0=QSqlQuery() #Questa vorrei usarla con un 
Join per aggiornare i dati di un'altra tabella





    def aggiorna_prezzi(self,dict_articoli):
        self.dict_articoli=dict_articoli #Il mio dizionario
        sqlstring="""SELECT dbo.listini_art_for.cod_ana, 
dbo.listini_art_for.cod_art_ana, dbo.listini_art_for.qta_imballo, 
dbo.listini_art_for.listino, dbo.listini_art_for.sconto_1, 
dbo.listini_art_for.netto, dbo.listini_art_for.costo
                        FROM dbo.listini_art_for
                        WHERE 
(((dbo.listini_art_for.cod_ana)={fornitore}));""".format(fornitore=self.codice_fornitore)
        
        self.query.exec_(sqlstring) #La mia query di selezione che scorre uno 
ad uno i codici della mia tabella che contiene i prezzi che voglio aggiornare
        cod_ana,cod_art_ana,qta_imballo,listino,sconto_1,netto,costo =range(7) 
#campi della query
        
        while self.query.next():
            articolo=self.query.value(cod_art_ana)
            
            if articolo in self.dict_articoli:

                sqlstring_inserimento="UPDATE dbo.listini_art_for SET 
dbo.listini_art_for.listino = %f, dbo.listini_art_for.qta_imballo=%f, 
dbo.listini_art_for.sconto_1 = %f, dbo.listini_art_for.netto = %f, 
dbo.listini_art_for.costo = %f,dbo.listini_art_for.data_riferimento_prezzo = %r 
WHERE (dbo.listini_art_for.cod_art_ana='%s')AND(dbo.listini_art_for.cod_ana = 
%d);" % 
(self.dict_articoli[articolo]["listino"],self.dict_articoli[articolo]["qta_imballo"],self.dict_articoli[articolo]["sconto_1"],self.dict_articoli[articolo]["costo"],self.dict_articoli[articolo]["costo"],self.data_oggi,articolo,self.codice_fornitore)

                self.query_inserimento.exec_(sqlstring_inserimento) #E con 
questa faccio il mio update, fino a qua funziona                

                self.query_aggiornamento_dbo_articoli0=QSqlQuery()
                sqlstringdbo_art_0= """UPDATE dbo.articoli_0 INNER JOIN 
dbo.listini_art_for ON dbo.articoli_0.cod_art = dbo.listini_art_for.art_cod SET 
dbo.articoli_0.descrizione_2 = "%s" , dbo.articoli_0.barcode = "%s" WHERE 
(dbo.listini_art_for.cod_art_ana = "%s" ) AND (dbo.listini_art_for.cod_ana = %d 
);""" % 
(self.dict_articoli[articolo]["descrizione"],self.dict_articoli[articolo]["barcode"],articolo,self.codice_fornitore)
                
                sqlstringdbo_art_0= """UPDATE dbo.articoli_0 SET 
dbo.articoli_0.descrizione_2 = "%s" , dbo.articoli_0.barcode = "%s" WHERE 
(dbo.listini_art_for.cod_art_ana = "%s") AND (dbo.listini_art_for.cod_ana = %d 
);""" % 
(self.dict_articoli[articolo]["descrizione"],self.dict_articoli[articolo]["barcode"],articolo,self.codice_fornitore)
                
                
self.query_aggiornamento_dbo_articoli0.exec_(sqlstringdbo_art_0)#Questa parte 
non funziona in nessun modo, nemmeno se metto come stringa select * from 
dbo.articoli_0)
        #self.db.commit()
        self.db.close()

Però self.query_aggiornamento_dbo_articoli0.isValid() non è mai vero, nemmeno 
se sostituisco una la stringa con select * from dbo.articoli_0, ho provato e 
riprovato, ma non funziona, non so cosa pensare... 

Riporto tutto il codice per completezza, scusate per lo spam
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a