dartNNN
В общем случае выглядеть это будет примерно так:
self.query.exec_(“Запрос, который найдет мне нужную запись”)
record = self.query.record() # возвращает QSqlRecord (первую найденную по запросу запись)
id = record.value(“id”) # вот он id, (record.value() - возвращает значение поля по его имени)
Ну а дальше уже приступать к удалению.
Только использовать PyQt для работы с бд - гиблое дело. Там все как-то через з… сделано. Лучше что-нибудь другое взять.
Да ты был прав)))
Просто я взялся за изучение PyQt,так что хочу разобраться как эта фигня(Qtsql) работает.
Че то я уже и так и сяк крутил,как ты написал,тока че то не получается(((
Добавление работает норм! а тут есть моменты которые я не совсем понимаю(((например читая документацию:
не совсем понял принцип работы вот этого
while (query.next()) {
QString name = query.value(0).toString();
int salary = query.value(1).toInt();
qDebug() << name << salary;
}
Типа я что ли только таким перебором смогу обращаться к записям, что ли так?
А я разве не могу обращаться к записям сразу после например запроса “SELECT * FROM zapchasty” и не писать фигню которая делается выше?
Или я чето не догоняю((
Просветите меня пожалуйста.
Пожалуйста те кто работал и разобрался с QtSql, а конктерно с QSqlqueyModel и QTableView, Помогите дописать код для удаления чтобы я мог наконец разобраться с этой фигней и двигаться дальше или еще поправьте если где не прав((((
Вот код:
#!usr/bin/python
#-*- coding: utf-8 -*-
from PyQt4 import QtGui
from PyQt4 import QtSql
from PyQt4 import QtCore
import sys
def create_connection():
db=QtSql.QSqlDatabase.addDatabase(“QSQLITE”)
db.setDatabaseName(“:memory:”)
if not db.open():
my_message=My_Messqge()
my_message.show()
my_message.exec_()
return False
query=QtSql.QSqlQuery()
query.exec(“CREATE TABLE IF NOT EXISTS zapchasty(id INTEGER PRIMARY KEY AUTOINCREMENT, naimenovanie VARCHAR(50), kolichestvo INTEGER, price FLOAT)”)
return True
class My_Gui(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.resize(520,300)
self.model=QtSql.QSqlQueryModel()
self.model.setQuery(“SELECT * FROM zapchasty”)
self.model.setHeaderData(1,QtCore.Qt.Horizontal,QtCore.QObject.trUtf8(self,“Наименование”))
self.model.setHeaderData(2,QtCore.Qt.Horizontal,QtCore.QObject.trUtf8(self,“Количество”))
self.model.setHeaderData(3,QtCore.Qt.Horizontal,QtCore.QObject.trUtf8(self,“Цена”))
self.table=QtGui.QTableView(self)
self.table.resize(417,200)
self.table.setModel(self.model)
self.table.setColumnHidden(0,True)
self.button_add=QtGui.QPushButton(“Добавить”,self)
self.button_delete=QtGui.QPushButton(“Удалить”,self)
self.button_add.setIcon(QtGui.QIcon(“logo/add2.png”))
self.buttons_wdget=QtGui.QWidget(self)
self.buttons_wdget.setGeometry(410,10,100,100)
self.buttons_kompanovka=QtGui.QVBoxLayout(self.buttons_wdget)
self.buttons_kompanovka.addWidget(self.button_add)
self.buttons_kompanovka.addWidget(self.button_delete)
self.button_add.clicked.connect(self.zapusk_form2)
self.button_delete.clicked.connect(self.del_zapis)
def zapusk_form2(self):
self.my_form2=My_Gui2()
self.my_form2.show()
self.my_form2.button_addd.clicked.connect(self.add_zapis)
def refresh(self):
self.model.setQuery(“SELECT * FROM zapchasty”)
def add_zapis(self):
a=self.my_form2.edit_naimenovanie.text()
b=self.my_form2.edit_kolichestvo.text()
c=self.my_form2.edit_price.text()
self.query=QtSql.QSqlQuery()
self.query.prepare(“INSERT INTO zapchasty(naimenovanie,kolichestvo,price) VALUES(:naimen,:kolich,:pr)”)
self.query.bindValue(“:naimen”,a)
self.query.bindValue(“:kolich”,b)
self.query.bindValue(“:pr”,c)
self.query.exec_()
self.refresh()
self.my_form2.hide()
def del_zapis(self):
self.query=QtSql.QSqlQuery()
self.query.prepare(“DELETE FROM zapchasty WHERE id=:id”)
self.query.bindValue(“id”,)
self.query.exec_()
self.refresh()
class My_Gui2(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.resize(300,150)
self.setWindowModality(QtCore.Qt.ApplicationModal)
self.all_widget=QtGui.QWidget(self)
self.label_naimenovanie=QtGui.QLabel(“Наименование”)
self.edit_naimenovanie=QtGui.QLineEdit()
self.label_kolichestvo=QtGui.QLabel(“Количество”)
self.edit_kolichestvo=QtGui.QLineEdit()
self.label_price=QtGui.QLabel(“Цена”)
self.edit_price=QtGui.QLineEdit()
self.kompanovka=QtGui.QVBoxLayout(self.all_widget)
self.kompanovka.addWidget(self.label_naimenovanie)
self.kompanovka.addWidget(self.edit_naimenovanie)
self.kompanovka.addWidget(self.label_kolichestvo)
self.kompanovka.addWidget(self.edit_kolichestvo)
self.kompanovka.addWidget(self.label_price)
self.kompanovka.addWidget(self.edit_price)
self.button_addd=QtGui.QPushButton(“Добавить”,self)
self.button_addd.setGeometry(200,10,100,50)
class My_Messqge(QtGui.QMessageBox):
def __init__(self):
QtGui.QMessageBox.__init__(self)
self.setIcon(QtGui.QMessageBox.Warning)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowTitleHint)
self.setWindowTitle(“Ошибка открытия Базы Данных”)
self.setText(“Неудалось открыть Базу Данных!Нажмите кнопку Дальше чтобы продолжить работу с приложением.”)
self.addButton(“Дальше”, QtGui.QMessageBox.AcceptRole)
class My_Messqge2(QtGui.QMessageBox):
def __init__(self):
QtGui.QMessageBox.__init__(self)
self.setIcon(QtGui.QMessageBox.Critical)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowTitleHint)
self.setWindowTitle(“Ошибка соединения с Базой Данных”)
self.setText(“Неудалось установить соединение с Базой Данных!Нажмите кнопку Выход чтобы завершить работу приложения.”)
self.addButton(“Выход”,QtGui.QMessageBox.AcceptRole)
app=QtGui.QApplication(sys.argv)
if not create_connection():
my_message2=My_Messqge2()
my_message2.show()
my_message2.exec_()
else:
my_forma1=My_Gui()
my_forma1.show()
app.exec_()
Буду очень очень вам благодарен!
P.S.Вот тут нашел хороший пример на С++ принцип я понял и пытался сделать также,но не смог переделать функцию удаления под Питон((
http://open-life.org/blog/QT/346.html