2015-07-06 4 views
0

Я пытаюсь отправить переменную (из QML) с помощью функции C++ обратно в базу данных SQL, я получил функцию SELECT sql, но каждый раз, когда я пытаюсь вставить, я получил эту ошибку: QODBCResult: : exec: Не удалось выполнить оператор: «[Microsoft] [драйвер SQL Server ODBC] [SQL Server] Невозможно вставить значение NULL в идентификатор столбца, таблицу« Employees.dbo.Employeetable », столбец не допускает нулей. INSERT не работает . [Microsoft] [Драйвер SQL-сервера ODBC] [SQL Server] Оператор завершен. " Правильный синтаксис, теперь работающий, если кому-то это понадобится для справки.SQL INSERT INTO query C++

Вот мой код:

QString servername, dbname; 
//instatiating qstring variables as value of lineEdit 
//declaring new sql database object 
QSqlDatabase *db = new QSqlDatabase(QSqlDatabase::addDatabase("QODBC")); 
//setting q string variables to name of server and database 
servername = "********"; 
dbname = "Employees"; 
db->setConnectOptions(); 
//connecting to database, passing q string variables as arguments 
QString dsn = QString("DRIVER={SQL Server};SERVER=%1;DATABASE=%2;Trusted_Connection=Yes;").arg(servername).arg(dbname);/** Build the connection string **/ 
//declaring database name 
db->setDatabaseName(dsn); 
//opening db 
if(db->open()) 
{ 
    qDebug() << "**Successfully connected to database**"; 
    QSqlQuery query; 
    query.prepare("insert into Employeetable(Firstname) values(:var);"); 
    query.bindValue(":var", var); 
    if(!query.exec()) 
    { 
     qFatal("Failed to add"); 
    } 
    qDebug()<< "Insert Success"; 
} 
+2

Ваша переменная не имеет значения. В то время как ваша таблица имеет ограничение, чтобы не допускать значения NULL. Обращение с кем-либо из сторон решит проблему. – knkarthick24

+1

@ knkarthick24 Это звучит как ответ. – cmannett85

+0

Переменная устанавливается при нажатии кнопки на QML. –

ответ

0

Ваше подготовить утверждение неверно. Попробуйте это:

query.prepare("insert into Employeetable(Firstname) value(:var);"); 

Если вы хотите связать переменную, вы должны иметь синтаксис :var_to_bind

+0

Это теперь работает, спасибо, не могли бы вы рассказать мне, почему двоеточие делает утверждение распознающим, что это переменная, а не просто строка? –

+0

распознает его как заполнитель, а не переменную. Посмотрите на qt docs, чтобы найти другие [Подходы к значениям привязки] (http://doc.qt.io/qt-5/qsqlquery.html) – Miki