Edit record procedure fixing has began

master
svk 2019-04-12 16:36:18 +03:00
parent 8ca81184a9
commit 77da13fbaa
4 changed files with 133 additions and 45 deletions

2
.gitignore vendored 100644
View File

@ -0,0 +1,2 @@
.idea/
__pycache__/

View File

@ -6,7 +6,7 @@
"fieldList": [
{
"fName": "id",
"fDescription": "Номер п.п.",
"fDescription": "UID",
"fType": "INTEGER",
"index": "PRIMARY KEY",
"autoIncrement": "yes",
@ -60,7 +60,7 @@
"fieldList": [
{
"fName": "id",
"fDescription": "Номер п.п.",
"fDescription": "UID",
"fType": "INTEGER",
"index": "PRIMARY KEY",
"autoIncrement": "yes",
@ -106,7 +106,7 @@
"fieldList": [
{
"fName": "id",
"fDescription": "Номер п.п.",
"fDescription": "UID",
"fType": "INTEGER",
"index": "PRIMARY KEY",
"autoIncrement": "yes",
@ -122,7 +122,7 @@
},
{
"fName": "city",
"fDescription": "Населеннй пункт",
"fDescription": "Населенный пункт",
"fType": "varchar(200)",
"index": "no",
"autoIncrement": "no",
@ -147,54 +147,116 @@
]
},
{
"tableName": "test",
"tableDescription": "Шляпа",
"tableName": "items",
"tableDescription": "Оборудование",
"fieldList": [
{
"fName": "id",
"fDescription": "Номер п.п.",
"fDescription": "UID",
"fType": "INTEGER",
"index": "PRIMARY KEY",
"autoIncrement": "yes",
"relation": []
},
{
"fName": "user",
"fDescription": "Юзер шляпы",
"fName": "item_name",
"fDescription": "Наименование",
"fType": "VARCHAR(100)",
"index": "no",
"autoIncrement": "no",
"relation": []
},
{
"fName": "item_address",
"fDescription": "Место расположения",
"fType": "INTEGER",
"index": "no",
"autoIncrement": "no",
"relation": ["users.id", "last_name, name, middle_name"]
"relation": ["address.id", "city, street, house"]
},
{
"fName": "item_type",
"fDescription": "Тип",
"fType": "CHAR(20)",
"index": "no",
"autoIncrement": "no",
"relation": ["itemtype.id", "type_name"]
},
{
"fName": "inventory_number",
"fDescription": "Инвентарный номер",
"fType": "CHAR(10)",
"index": "no",
"autoIncrement": "no",
"relation": []
}
]
},
{
"tableName": "test2",
"tableDescription": "Шляпа2",
"tableName": "itemtype",
"tableDescription": "Тип оборудования",
"fieldList": [
{
"fName": "id",
"fDescription": "Номер п.п.",
"fDescription": "UID",
"fType": "INTEGER",
"index": "PRIMARY KEY",
"autoIncrement": "yes",
"relation": []
},
{
"fName": "ins_date",
"fDescription": "Дата добавления",
"fName": "type_name",
"fDescription": "Тип",
"fType": "VARCHAR(100)",
"index": "no",
"autoIncrement": "no",
"relation": []
}
]
},
{
"tableName": "itemrelocation",
"tableDescription": "Перемещения",
"fieldList": [
{
"fName": "id",
"fDescription": "UID",
"fType": "INTEGER",
"index": "PRIMARY KEY",
"autoIncrement": "yes",
"relation": []
},
{
"fName": "item_id",
"fDescription": "Оборудование",
"fType": "INTEGER",
"index": "no",
"autoIncrement": "no",
"relation": ["items.id", "item_name, inventory_number"]
},
{
"fName": "source_place",
"fDescription": "Откуда",
"fType": "INTEGER",
"index": "no",
"autoIncrement": "no",
"relation": ["address.id", "city, street, house"]
},
{
"fName": "destination_place",
"fDescription": "Куда",
"fType": "INTEGER",
"index": "no",
"autoIncrement": "no",
"relation": ["address.id", "city, street, house"]
},
{
"fName": "create_datetime",
"fDescription": "Дата перемещения",
"fType": "DATETIME",
"index": "no",
"autoIncrement": "no",
"relation": []
},
{
"fName": "user",
"fDescription": "Юзер шляпы",
"fType": "INTEGER",
"index": "no",
"autoIncrement": "no",
"relation": ["users.id", "last_name, name, middle_name"]
}
]
}

12
dm.py
View File

@ -3,8 +3,8 @@ import json, os, configparser, shutil, re
from datetime import datetime, date, time
def firstInit():
# Инициализация переменныхб создание конфигруационного файла, копирование шаблонов
global db_type, db_hostname, db_user, db_password, db_name, template_file, db_type
# Инициализация переменных создание конфигруационного файла, копирование шаблонов
global db_type, db_hostname, db_user, db_password, db_name, template_file, db_type, template_dir
config = configparser.RawConfigParser()
# проверяем тип ОС
if os.name == "nt":
@ -39,6 +39,7 @@ def firstInit():
config.read(cfg_file)
work_dir = config.get('Directory', 'work_dir')
global template_dir
template_dir = config.get('Directory', 'template_dir')
db_type = config.get('DataBase', 'db_type')
db_hostname = config.get('DataBase', 'db_hostname')
@ -177,9 +178,9 @@ def initDBstructure():
global dbTablesDescriptionList, template_file, tblNamesList
table_list = open(template_file, "r", encoding="utf-8")
data = json.load(table_list, encoding="utf-8")
tbl_list = data["tables"]
tblNamesList = createTables(tbl_list)
#tbl_list = data["tables"]
#tblNamesList = createTables(tbl_list)
tblNamesList = createTables(data["tables"])
return tblNamesList
# выборка данных из заданной таблицы
@ -188,6 +189,7 @@ def selectData(tbl):
# если юольше 1 поля добавить CONCAT
qwery = "SELECT "
subqwery = ""
#print(dbTablesStructList)
for item in dbTablesStructList:
if item[0] == tbl:
for field in item[1]:

56
gui.py
View File

@ -5,6 +5,8 @@ import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
#from PyQt5.QtWidgets import (QMainWindow, QTextEdit, QAction, QFileDialog, QApplication)
#from PyQt5.QtGui import QIcon
#import pymysql
import dm
@ -83,13 +85,17 @@ class MyTable(QTableWidget):
#print(self.dbTableName, row, self.statusTip())
i = 0
#print(self.columnCount())
#print(self.verticalHeaderItem(row).text(), '---')
while i < self.columnCount():
if self.item(row, i):
valueList.append(self.item(row, i).text())
val = self.item(row, i).text()
print(val)
valueList.append(str(val))
else:
valueList.append('')
#print(self.item(row, i).text())
i += 1
print(valueList)
editRecord(self, row, self.dbTableName, valueList)
# Диалог выбора связанных данных
@ -274,15 +280,15 @@ class EditForm(QMainWindow):
hboxEdit.addWidget(lbl2)
hboxEdit.addWidget(edit)
# добавляем к полю кнопку для вызова связанных
print(fName)
#print(fName)
listRelationTableAndField = dm.getRelationsForField(tblName, fName)
print(listRelationTableAndField)
#print(listRelationTableAndField)
if listRelationTableAndField != 'q':
tableRelation = listRelationTableAndField[0]
fieldRelation = listRelationTableAndField[1]
replaceField = listRelationTableAndField[2]
print(tableRelation + '-' + fieldRelation +'-'+replaceField)
#print(tableRelation + '-' + fieldRelation +'-'+replaceField)
btnRelations = QPushButton('...')
btnRelations.setFixedWidth(30)
# добавляем название виджета в список соответсвия кнопок и таблиц БД
@ -386,6 +392,7 @@ def addDataIntoTable(dbTableName, tblDataWidget, data='NULL'):
dbFieldRelationValueList = []
for key in data:
n = 0
print(key)
for item in key:
listRelationTableAndField = dm.getRelationsForField(dbTableName, fieldNames[n][0])
if listRelationTableAndField != 'q':
@ -397,15 +404,26 @@ def addDataIntoTable(dbTableName, tblDataWidget, data='NULL'):
else:
newitem = QTableWidgetItem(str(item))
dbFieldRelationValueList.append([newitem, m, n, 'None', 'None'])
else:
# преобразуем все типы в строку
newitem = QTableWidgetItem(str(item))
# преобразуем все типы в строку
#print(fieldNames[n][0])
#print(str(item))
# проверяем название поля и если это id то данные вносим в заголовок строки
# таким образом внесем уникальный ID в чётко определенное поле
#if fieldNames[n][0] == "id":
# tblDataWidget.setVerticalHeaderItem(m, QTableWidgetItem(str(item)))
tblDataWidget.setItem(m, n, newitem)
n += 1
m += 1
# Показ меню и панели инструментов
def showMenuToolbar(window):
openFileAction = QAction(QIcon('img/open.gif'), 'Открыть', window)
openFileAction.setShortcut('Ctrl+O')
openFileAction.setStatusTip('Открыть')
openFileAction.triggered.connect(openTemplate)
newAction = QAction(QIcon('img/new.gif'), 'Добавить', window)
newAction.setShortcut('Ins')
newAction.setStatusTip('Добавить')
@ -414,12 +432,11 @@ def showMenuToolbar(window):
deleteAction = QAction(QIcon('img/delete.gif'), 'Удалить', window)
deleteAction.setShortcut('Del')
deleteAction.setStatusTip('Удалить')
# deleteAction.triggered.connect(window.qqqq)
exitAction = QAction(QIcon('img/exit.gif'), 'Выход', window)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Выход')
exitAction.triggered.connect(window.close)
exitAction.setStatusTip('Выйти')
exitAction.triggered.connect(exit)
structureAction = QAction(QIcon('img/table.gif'), 'Показать структуру', window)
#structureAction.setShortcut('Ctrl+Q')
@ -429,32 +446,28 @@ def showMenuToolbar(window):
cutAction = QAction(QIcon('img/cut.gif'), 'Вырезать', window)
cutAction.setShortcut('Ctrl+X')
cutAction.setStatusTip('Вырезать')
# cutAction.triggered.connect(window.close)
copyAction = QAction(QIcon('img/copy.gif'), 'Копировать', window)
copyAction.setShortcut('Ctrl+С')
copyAction.setStatusTip('Копировать')
# copyAction.triggered.connect(window.close)
pasteAction = QAction(QIcon('img/paste.gif'), 'Вставить', window)
pasteAction.setShortcut('Ctrl+V')
pasteAction.setStatusTip('Вставить')
# pasteAction.triggered.connect(window.close)
findAction = QAction(QIcon('img/find.gif'), 'Поиск', window)
findAction.setShortcut('Ctrl+F')
findAction.setStatusTip('Искать')
# findAction.triggered.connect(window.close)
printAction = QAction(QIcon('img/print.gif'), 'Печатать', window)
printAction.setShortcut('Ctrl+P')
printAction.setStatusTip('Печатать')
# printAction.triggered.connect(window.close)
window.statusBar()
menubar = window.menuBar()
fileMenu = menubar.addMenu('&Файл')
fileMenu.addAction(openFileAction)
fileMenu.addAction(newAction)
fileMenu.addAction(deleteAction)
fileMenu.addAction(printAction)
@ -472,6 +485,7 @@ def showMenuToolbar(window):
# toolbar = window.addToolBar('Редактирование')
toolbar = window.addToolBar('Панель инструментов')
#toolbar.addAction(openFileAction)
toolbar.addAction(newAction)
toolbar.addAction(deleteAction)
toolbar.addAction(copyAction)
@ -556,11 +570,12 @@ def editRecord(tableWidget, row, dbTableName, valueList):
valueList.pop(i)
valueList.insert(i, item[3])
val = item[3]
#print(val)
editForm.widgetsList[i][1].setText(val)
i += 1
print(valueList)
#print(valueList)
print(editForm.widgetsList)
#print(editForm.widgetsList)
#dm.deleteRecordsFromDB(dbTableName, valueList)
@ -576,6 +591,12 @@ def showStructure():
print(dm.getFields(tblName))
print(dm.getTableStructureFromDB(tblName))
def openTemplate():
global template_file, template_dir
template_file = QFileDialog.getOpenFileName(None, 'Open file', template_dir)[0]
dm.initDBstructure(template_file)
def main():
global dbTablesList, listDBTables, tabRelationsData, dbFieldRelationValueList
dbFieldRelationValueList = []
@ -620,3 +641,4 @@ def main():
if __name__ == '__main__':
main()
print(template_dir)