Dzięki za odpowiedź, ale przede wszystkim Marku: wyluzuj. Nie jestem programistą i nie zamierzam nim zostać. Na co dzień zajmuję się zupełnie czymś innym.
Jak skonfigurowałeś QSqlTableModel.
w pewnym stopniu zgodnie z tym co znalazłem na stronie qt.io dla QSqlRelationalTableModel
jeśli ma to jakieś znaczenie...:
using sqlRecContainer = std::vector<QSqlRecord>;
class QSqlMyTableModel : public QSqlRelationalTableModel
{
Q_OBJECT
public:
QSqlMyTableModel() = default;
auto begin() const
{ return _entries.begin(); }
auto end() const
{ return _entries.end(); }
const sqlRecContainer &entries() const
{ return _entries; }
QSqlRecord get_prototype_record() const;
template <typename T>
auto find(const T &field, const QVariant &value) const
{
auto rec = std::find_if(_entries.begin(), _entries.end(),
[&](const QSqlRecord &rec) { return rec.value(field) == value; });
return rec != _entries.end() ?
std::make_optional<sqlRecContainer::const_iterator>(rec) : std::nullopt;
}
template <typename T>
bool exists(const T &field, const QVariant &value) const
{
return find(field, value) ? true : false;
}
bool exists(const QSqlRecord &rec, sqlRecContainer::const_iterator hint) const;
template <typename T>
bool update(const T &field, const QVariant &old_value, const QVariant &new_value) const
{
auto it = find(field, old_value);
if(!it)
return false;
(*it)->value(field) = new_value;
this->record(std::distance(_entries.begin(), *it)).field(field).setValue(new_value);
return true;
}
void setTable(const QString &tb_name) override;
QStringList generate_qstrlist(const QString &field_name) const;
bool push_back_record(std::vector<QVariant> &&values);
bool push_back_record(QSqlRecord &&new_record);
bool submit() override;
private:
sqlRecContainer _entries;
void set_entries();
bool insert(QSqlRecord &&rec);
};
Zresztą podany fragment kodu wygląda jak posklejane śmieci. Co to ma robić?
To ma pokazać bug. W bazie SQL jest 1971 rekordów (wierszy). this->select()
z jakiegoś powodu zwraca ich tylko pierwsze 256. Dodałem QSqlQuery
i okazuje się, że q.exec("SELECT COUNT(*) FROM "+ tableName());
zwraca prawidłowe 1971
Więc pytanie: skąd te 256 ? W konsoli widać, że select()
nie powoduje błędu (lastError()
jest pusty).
Domyślam się, że różna wielość kolumn (256/1971).
... ? jakich kolumn ?
to jedna i ta sama tabela SQL, nie ma różnic w wielkości i typie kolumn