В синтаксисе ошибка, например имя таблицы может содержать пробел, или строка может иметь символ который неправильно интерпретируется.
Для примера операция Дэлит:
Такой синтакисис не работает, тут понятно, когда вставляешь запрос в средство работы с БД, кути генерирует ту же ошибку:
const QString request="DELETE FROM \"" + tableName + "\" WHERE name=\""+rowName+"\";";
Такой синтаксис работает:
const QString request="DELETE FROM \"" + tableName + "\"" +
" WHERE name=\'"+ rowName +"\'";
И пример с инсертом:
Не работает:
const QString request="INSERT INTO \"" + tableName +"\" ( name ) VALUES ( "+ rowName + " );";
Вроде бы должен работать, скопировав в DataGrid все выполняется:
const QString request="INSERT INTO \"" + tableName+ "\" (name) "+
"VALUES ('"+ rowName+ "'); ";
И снова нет.
Вот рабочий вариант:
const QString request="INSERT INTO \""+ tableName+"\""+
" ( name ) VALUES (?)";
query.prepare(request);
query.bindValue(0, rowName);
Порой не угадаешь почему запрос не работает. Аналогичный, один в один, скопированный в pgAdmin или Датагрид выполняется на ура. Именно поэтому вместо чистого sql запроса лучше использовать ORM