Проблема с выборкой данных в БД
Есть у меня БД карт. Написал выборку, но почему-то работает не со всеми значениями
QString DataBase::selectMapId (const QVariantList &data) //
{
QSqlQuery query;
query.prepare("SELECT id FROM " MAPS_TABLE_NAME " WHERE " + data[0].toString() + "= :ColumnName");
query.bindValue(":ColumnName", data[1].toString());
// После чего выполняется запросом методом exec()
if(!query.exec())
{
qDebug() << "error select id " << SCALES_TABLE_NAME;
qDebug() << query.lastError().text();
return NULL;
}
else
{
QString c3ountry = query.value(0).toString();
while (query.next())
{
QString Check_1 = query.value(0).toString();
}
query.first();
return query.value(0).toString();
}
return NULL;
}
Выбирает коректно ID карт где-то до 300, а после почему-то ломается. Данные хранятся правильно и как бы в одинаковом формате, так что понять не могу почему. Дальше есть функцыя выбирает магнитное склонение карты и такая же ситуацыя. Запрос обрабатывает коректно, но ничего не возвращает.
QVariantList DataBase::selectMapMagDef (const QVariantList &data) /
{
QSqlQuery querySelect;
querySelect.prepare("SELECT " MAGDEF_TABLE_DEGREES ", " MAGDEF_TABLE_MINUTES " FROM " MAGDEF_TABLE_NAME " WHERE " MAGDEF_TABLE_YEAR_ID " = :YearId" " AND " MAGDEF_TABLE_MAP_ID " = :MapId");
querySelect.bindValue(":YearId" , data[0].toString());
querySelect.bindValue(":MapId" , data[1].toString());
QVariantList lReturn;
if(!querySelect.exec())
{
qDebug() << "Error select from table " MAGDEF_TABLE_NAME;
qDebug() << querySelect.lastError().text();
return lReturn;
}
else
{
while (querySelect.next())
{
QString Check_1 = querySelect.value(0).toString();
QString Check_2 = querySelect.value(1).toString();
}
querySelect.first();
qDebug() << "Selected from table " MAGDEF_TABLE_NAME;
lReturn.append(querySelect.value(0).toString());
lReturn.append(querySelect.value(1).toString());
return lReturn;
}
return lReturn;
}
Вот код ниже ка я все ето запускаю.
QString MapId = db->selectMapId(MapNom);
QString YearId = db->selectYearId(Year);
QVariantList MagDefIn;
MagDefIn.append(MapId);
MagDefIn.append(YearId);
QVariantList MagDef = db->selectMapMagDef (MagDefIn);
QVariantList MapCoor = db->selectMapCoordinates (MapNom_);
MagDefDegrees->setText( MagDef[0].toString());
MagDefMinutes->setText( MagDef[1].toString());
Если надо будет скинуть другие части программы то скажыте. Заранее спасибо!
void MagDef::Check_Button_Clicked()
{
db = new DataBase;
db->connectToDataBase();
//Вибираємо текст нашого поля вводу
QString lNomenclature = nomenclatureEdit ->text();
QString lLATDegree = LATDegreeEdit ->text();
QString lLATMinute = LATMinuteEdit ->text();
QString lLNGDegree = LNGDegreeEdit ->text();
QString lLNGMinute = LNGMinuteEdit ->text();
QString lLNGSecond = LNGSecondEdit ->text();
QString lYear = Year ->text();
QString lLATCoordinates = lLATDegree + "°" + lLATMinute + "'";
QString lLNGCoordinates = lLNGDegree + "°" + lLNGMinute + "'"+ lLNGSecond + "\"";
QMessageBox messageBox;
QVariantList Year;
Year.append(lYear);
QVariantList MapNom;
MapNom.append("Nomenclature");
MapNom.append(lNomenclature);
QVariantList MapNom_;
MapNom_.append(lNomenclature);
QVariantList MapCoor;
MapCoor.append(lLATCoordinates);
MapCoor.append(lLNGCoordinates);
bool l = db->existMap(MapNom);
bool l2 = db->existMapCoordinates(MapCoor);
if(db->existMap(MapNom))
{
QString MapId = db->selectMapId(MapNom);
QString YearId = db->selectYearId(Year);
QVariantList MagDefIn;
MagDefIn.append(MapId);
MagDefIn.append(YearId);
QVariantList MagDef = db->selectMapMagDef (MagDefIn); //Повертає магніте схилення карти вибіркою за номенклатурою;
QVariantList MapCoor = db->selectMapCoordinates (MapNom_); //Повертає магніте схилення карти вибіркою за номенклатурою;
MagDefDegrees->setText( MagDef[0].toString());
MagDefMinutes->setText( MagDef[1].toString());
}
else if(db->existMapCoordinates(MapCoor))
{
QString MapNomStr = db->selectMapNomenclature (MapCoor); //Повертає номенклатуру карти вибіркою за координатами
QVariantList MapNom_2;
MapNom_2.append("Nomenclature");
MapNom_2.append(MapNomStr);
QString MapId = db->selectMapId(MapNom_2);
QString YearId = db->selectYearId(Year);
QVariantList MagDefIn;
MagDefIn.append(MapId);
MagDefIn.append(YearId);
QVariantList MagDef = db->selectMapMagDef (MagDefIn); //Повертає магніте схилення карти вибіркою за номенклатурою;
MagDefDegrees->setText( MagDef[0].toString());
MagDefMinutes->setText( MagDef[1].toString());
}
else
{
std::string lOutput = "Данні введені не вірно!";
messageBox.information( 0, QString::fromStdString("Error"), lOutput.c_str() );
}
// moveToCenterMessageBoxS(&messageBox);
}
*Вот полный код котороый проверяет все на вопрос с комента. Проверял работает на некоторых картах, но не на всех