Muszę napisać bazę, w której będę miał imiona i nazwiska użytkowników. Chciałbym, aby np. "kowalski" było innym nazwiskiem niż "Kowalski" - jak to zrobić ? Coś kombinowałem z triggerem, ale nie wychodzi (a zresztą nie wiem, jak zrobić to, aby tylko 1-sza litera nazwiska była duża). Jest na to jakiś sposób? Używam bazy SQLite, cały kod poniżej. Aha, oczywiście wypisuje mi, że taki użytkownik - "Jan Kowalski" jest w bazie, a to nieprawda, bo wpisuję tylko dane "jan kowalski" z małych liter ... Nie mam już pomysłu ...
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QSqlRelationalTableModel>
#include <QSqlRecord>
#include <QSqlError>
#include <QMessageBox>
#include <QDebug>
#include <QString>
#include<QApplication>
int main(int argc,char** argv){
QApplication app(argc,argv);
QSqlDatabase db;
//tworzenie bazy i otwieranie bazy
db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("localhost");
db.setDatabaseName("./users.gdb");
db.setUserName("users");
db.setPassword("users");
if (!db.open()) {
QMessageBox::critical(0, "Error","Error during opening the database");
exit(1);
}
QSqlQueryModel modelCreate;
modelCreate.setQuery("select * from Users");
QSqlQuery query;
if(modelCreate.record().isEmpty())
{
query.exec("create table Users ("
"imie varchar(40), nazwisko varchar(60))");
qDebug() << query.lastError().databaseText();
qDebug() << query.lastError().driverText();
QString imie = "jan";
QString nazwisko = "kowalski";
query.exec("select login from Users where nazwisko like '"+nazwisko+"'");
if(query.next())
{
qDebug() << "Uzytkownik jest juz w bazie";
}
else
{
QSqlQuery queryTrigger;
queryTrigger.exec("create trigger duzaLitera before insert on Users for each row begin :new.nazwisko := upper(:new.nazwisko); end;");
//wstawianie do bazy
query.prepare("insert into Users values(:imie,:nazwisko)");
query.bindValue(":imie",imie);
query.bindValue(":nazwisko",nazwisko);
query.exec();
qDebug() << query.lastError().databaseText();
qDebug() << query.lastError().driverText();
}
}
else
{
QString imie = "jan";
QString nazwisko = "kowalski";
query.exec("select login from Users where nazwisko like '"+nazwisko+"'");
if(query.next())
{
qDebug() << "Uzytkownik jest juz w bazie";
}
else
{
QSqlQuery queryTrigger;
queryTrigger.exec("create trigger duzaLitera before insert on Users for each row begin :new.nazwisko := upper(:new.nazwisko); end;");
//wstawianie do bazy
query.prepare("insert into Users values(:imie,:nazwisko)");
query.bindValue(":imie",imie);
query.bindValue(":nazwisko",nazwisko);
query.exec();
qDebug() << query.lastError().databaseText();
qDebug() << query.lastError().driverText();
}
}
QString imie = "Jan";
QString nazwisko = "Kowalski";
query.exec("select imie, nazwisko from Users where imie like '"+imie+"'"+" and nazwisko like '"+nazwisko+"'");
if(query.next())
qDebug () << nazwisko+" jest w bazie";
else
qDebug() << nazwisko+" nie ma w bazie";
if(db.isOpen()) db.close();
QSqlDatabase::removeDatabase("QSQLITE");
return app.exec();
}