Q3DataBrowser::Boundary Q3DataBrowser::boundary() { Q3SqlCursor* cur = d->cur.cursor(); if (!cur || !cur->isActive()) return Unknown; if (!cur->isValid()) { if (cur->at() == QSql::BeforeFirst) return BeforeBeginning; if (cur->at() == QSql::AfterLast) return AfterEnd; return Unknown; } if (cur->at() == 0) return Beginning; int currentAt = cur->at(); Boundary b = None; if (!cur->previous()) b = Beginning; else cur->seek(currentAt); if (b == None && !cur->next()) b = End; cur->seek(currentAt); return b; }
bool Q3DataBrowser::deleteCurrent() { if (isReadOnly()) return false; QSqlRecord* buf = d->frm.record(); Q3SqlCursor* cur = d->cur.cursor(); if (!buf || !cur) return false; writeFields(); int n = cur->at(); emit beforeDelete(buf); int ar = cur->del(); if (ar) { refresh(); updateBoundary(); cursorChanged(Q3SqlCursor::Delete); if (!cur->seek(n)) last(); if (cur->isValid()) { cur->editBuffer(true); readFields(); } else { clearValues(); } return true; } else { if (!cur->isActive()) { handleError(cur->lastError()); refresh(); updateBoundary(); } } return false; }
bool Q3DataBrowser::currentEdited() { QSqlRecord* buf = d->frm.record(); Q3SqlCursor* cur = d->cur.cursor(); if (!buf || !cur) return false; if (!cur->isActive() || !cur->isValid()) return false; writeFields(); for (int i = 0; i < cur->count(); ++i) { if (cur->value(i) != buf->value(i)) return true; } return false; }