Dzień dobry,
Obecnie stoi przede mną następujący problem:
"Szkoda że przy edycji wartości w wielu rekordach trzeba po wpisaniu każdej wartości wciskać „ptaszka”. Przy uzupełnianiu kilkudziesięciu rekordów jest to uciążliwe. Czy nie można tak zrobić żeby zapisać dopiero po wprowadzeniu wszystkich zmian.[?]"
Ptaszek to:
self.dlg.pushButton_18.clicked.connect(self.prwn_zam) #przycisk wyzwalający funkcje.
To co miałem dotychczas aktualizowało tylko jeden rekord, który musiał być zaznaczony, aby dane w self.model4 przechodziły do zapytania SQL (ma ponad 30 rekordów, więc będę pokazywał tylko fragment), ale przełożeni chcą, by "ptaszka' można było kliknąć tylko raz - po wprowadzeniu wszystkich zmian w self.model4.
Szef zaproponował:
self.model4.dataChanged.connect(self.test)
w funkcji uruchamiającej wtyczkę
następnie w funkcji test była tworzona tabela
zmienioneWierszeTableView_3 = []
a potem wykorzystywana do:
i = self.dlg.tableView_3.selectionModel().currentIndex().row()#tabela, gdzie były przechowywane dane
if not i in zmienioneWierszeTableView_3:
zmienioneWierszeTableView_3.append(i)
print('Zmieniony wiersz ',i)#pokazywała numer wiersza
Obecnie przeniosłem to wszystko do do prwn_zam, ale nie mam pewności czy dobrze.
Po wielu próbach mam obecnie tak:
def prwn_zam(self): #potwierdzenie zmian w rekordach zamówień
print ('kliknięto przycisk zatwierdzania zmian!')#ptaszek pushButton_18
con= self.model4.dataChanged.connect(self.prwn_test)
if con:
print("Połączenie zostało utworzone.")
else:
print("Nie udało się utworzyć połączenia.")
def prwn_test(self):
zmienioneWierszeTableView_3 = []
liczba_rekordow = self.model4.rowCount()
i = self.dlg.tableView_3.selectionModel().currentIndex().row()
idi = self.dlg.tableView_3.selectionModel().currentIndex().siblingAtRow(i).siblingAtColumn(33).data()# pobiera dane z wiersza, które idą potem do zapytania
country = self.dlg.tableView_3.selectionModel().currentIndex().siblingAtRow(i).siblingAtColumn(0).data()
ter = self.dlg.tableView_3.selectionModel().currentIndex().siblingAtRow(i).siblingAtColumn(1).data()
akt = self.dlg.tableView_3.selectionModel().currentIndex().siblingAtRow(i).siblingAtColumn(2).data()
#...
if not i in zmienioneWierszeTableView_3:
zmienioneWierszeTableView_3.append(i)
print('Zmieniony wiersz ',i, ' o ID: ', idi, ter, akt)
if idi is not None:
idi = int(float(idi))
danRek.append(idi)
danRek1.append(ter)
danRek2.append(akt)
#danRek[1-32] to tablice tworzone wcześniej. Też mam wątpliwość czy mają być tworzone w tej funkcji czy w startowej wtyczki?
Następnie jest już moja część :
for j, k, l, m, n, o .... in zip(danRek, danRek1, danRek2, danRek3, danRek4, danRek5, ...):
if isinstance(k, str) and k != 'NULL': #teryt
k ='\'' + k + '\''
if isinstance(n, str) and n != 'NULL': #Zamiawiający
n ='\'' + n + '\''
sql = f"UPDATE ZARZADZANIE.ZAMOWIENIA SET teryt={k}, ZAMAWIAJACY_KOD={n}, ...,DATA_MOD_REK=TO_DATE(SYSDATE,\'DD.MM.YYYY HH24:MI:SS\') WHERE ID={j}"
print (sql)
sql = query.prepare(sql)
if query.exec():
print('dodano!')
else:
print (query.lastError().text())
która już działa- zapytanie chodzi dobrze, ale dane do niej trafiają nie te co trzeba, no i ma wykonywać się w pętli tyle razy w ilu rekordach wprowadzono zmiany, a nie tylko raz po zaznaczonym rekordzie (stary kod już usunąłem, ale mam go w archiwalnej- poprzedniej wersji kodu).
Nie wykluczam że mam problem z początkiem rozłożenia tego kodu (przed ostatni fragment).
Może jakieś sugestie?