<html><body><div style="color:#000; background-color:#fff; font-family:lucida console, sans-serif;font-size:10pt"><div style="font-family: 'lucida console', sans-serif; "><span style="font-size: 13px; "><br></span></div><div style="font-family: 'lucida console', sans-serif; "><span style="font-size: small;">Ciao a tutti <img src="http://mail.yimg.com/ok/u/assets/img/emoticons/emo1.gif" alt=":) sorridente"><span>, </span></span></div><div style="font-family: 'lucida console', sans-serif; "><span style="font-size: small;">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.</span></div><div style="font-family: 'lucida console', sans-serif; "><span style="font-size: small;">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.</span></div><div style="font-family: 'lucida console', sans-serif; "><span style="font-size: small;">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...</span></div><div style="font-family: 'lucida console', sans-serif; "><span style="font-size: small;">E quindi ho agito come segue:</span></div><div><span><div><span style="font-size: small;"><br></span></div><div><span style="font-size: 13px; ">Il dizionario si chiama self.dict_articoli e ogni voce contiene a sua volta un piccolo dizionario con altre voci:</span></div><div style="font-size: 14px; "><br></div><div><span style="font-size: 13px; ">self.tutti_codici[codice di riferimento]={"descrizione","listino","costo","qta_imballo","sconto_1","metel","barcode"}</span></div><div style="font-size: 14px; "><br></div><div><span style="font-size: 13px; ">Ho creato tre
query come segue:</span></div><div style="font-size: 14px; "><br></div><div><span style="font-size: 13px; ">self.query=QSqlQuery() #Questa mi seleziona tutti i record del database che voglo aggiornare e con query.next li scorro ad uno a uno</span></div><div><span style="font-size: 13px; ">self.query_inserimento=QSqlQuery() #Questa mi serve mentre scorro i record per aggiornarli</span></div></span></div><div style="font-family: 'lucida console', sans-serif; "><span><span style="font-size: 13px; ">self.query_aggiornamento_dbo_articoli0=QSqlQuery() #Questa vorrei usarla con un Join per aggiornare i dati di un'altra tabella</span><br></span></div><div style="font-family: 'lucida console', sans-serif; font-size: 10pt; "><br></div><div><span><div style="font-size: 14px; "><br></div><div style="font-size: 14px; "><br></div><div><div><span style="font-size: 10px; "> def aggiorna_prezzi(self,dict_articoli):</span></div><div><span
style="font-size: 10px; "> self.dict_articoli=dict_articoli <span style="background-color: rgb(255, 255, 0);">#Il mio dizionario</span></span></div><div><span style="font-size: 10px; "> 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</span></div><div><span style="font-size: 10px; "> FROM dbo.listini_art_for</span></div><div><span style="font-size: 10px; "> WHERE (((dbo.listini_art_for.cod_ana)={fornitore}));""".format(fornitore=self.codice_fornitore)</span></div><div><span style="font-size: 10px; "> </span></div><div><span
style="font-size: 10px; "> self.query.exec_(sqlstring) <span style="background-color: rgb(255, 255, 0);">#La mia query di selezione che scorre uno ad uno i codici della mia tabella che contiene i prezzi che voglio aggiornare</span></span></div><div><span style="font-size: 10px; "> cod_ana,cod_art_ana,qta_imballo,listino,sconto_1,netto,costo =range(7) <span style="background-color: rgb(255, 255, 0);">#campi della query</span></span></div><div><span style="font-size: x-small;"> </span></div><div><span style="font-size: x-small;"> while self.query.next():</span></div><div><span style="font-size: x-small;"> articolo=self.query.value(cod_art_ana)</span></div><div><span style="font-size: x-small;"> </span></div><div><span style="font-size: 10px; ">
if articolo in self.dict_articoli:</span></div><div><span style="font-size: 10px; "><br></span></div><div><span style="font-size: 10px; "> 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)</span></div><div><span style="font-size: 10px; "><br></span></div><div><span style="font-size: 10px; ">
self.query_inserimento.exec_(sqlstring_inserimento) <span style="background-color: rgb(255, 255, 0);">#E con questa faccio il mio update, fino a qua funziona</span></span><span style="font-size: 10px; "> </span></div><div><span style="font-size: 10px; "><br></span></div><div><span style="font-size: 10px; "> self.query_aggiornamento_dbo_articoli0=QSqlQuery()</span></div><div><span style="font-size: x-small;"> 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)</span></div><div><span style="font-size: x-small;"> </span></div><div><span style="font-size: 10px; "> 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)</span></div><div><span style="font-size: 10px; "> </span></div><div><span style="font-size: 10px; "> self.query_aggiornamento_dbo_articoli0.exec_(sqlstringdbo_art_0)<span
style="background-color: rgb(255, 255, 0);">#Questa parte non funziona in nessun modo, nemmeno se metto come stringa select * from dbo.articoli_0)</span></span></div><div><span style="font-size: 10px; "> #self.db.commit()</span></div><div><span style="font-size: x-small;"> self.db.close()</span></div><div><span style="font-size: 11px;"><br></span></div><div><span style="font-size: 11px;"><div style="font-size: medium; "><span style="font-size: 13px; ">Però <span>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... </span></span></div><div style="font-size: 16px; "><span style="font-size: small; "><img src="http://mail.yimg.com/ok/u/assets/img/emoticons/emo1.gif" alt=":) sorridente" style="border-width: initial; border-color: initial;
"><br></span></div><div style="font-size: 16px; "><span style="font-size: 13px; ">Riporto tutto il codice per completezza, scusate per lo spam</span></div></span></div></div></span></div><div style="font-family: 'lucida console', sans-serif; font-size: 10pt; "><span style="font-size: 10pt; "><br></span></div><div style="font-family: 'lucida console', sans-serif; font-size: 10pt; "><br></div> </div></body></html>