Пример #1
0
void SimpleDBStorage::Save(QString _table)
{
    if (!IsSaveRequired())
        return;

    MSqlBindings bindings;
    QString querystr = QString("SELECT * FROM " + _table + " WHERE "
                               + GetWhereClause(bindings) + ';');

    MSqlQuery query(MSqlQuery::InitCon());
    query.prepare(querystr);
    query.bindValues(bindings);

    if (!query.exec())
    {
        MythDB::DBError("SimpleDBStorage::Save() query", query);
        return;
    }

    if (query.isActive() && query.next())
    {
        // Row already exists
        // Don"t change this QString. See the CVS logs rev 1.91.
        MSqlBindings bindings;

        querystr = QString("UPDATE " + _table + " SET " + GetSetClause(bindings) +
                           " WHERE " + GetWhereClause(bindings) + ';');

        query.prepare(querystr);
        query.bindValues(bindings);

        if (!query.exec())
            MythDB::DBError("SimpleDBStorage::Save() update", query);
    }
    else
    {
        // Row does not exist yet
        MSqlBindings bindings;

        querystr = QString("INSERT INTO " + _table + " SET "
                           + GetSetClause(bindings) + ';');

        query.prepare(querystr);
        query.bindValues(bindings);

        if (!query.exec())
            MythDB::DBError("SimpleDBStorage::Save() insert", query);
    }
}
Пример #2
0
void SimpleDBStorage::Load(void)
{
    MSqlQuery query(MSqlQuery::InitCon());
    MSqlBindings bindings;
    query.prepare(
        "SELECT CAST(" + GetColumnName() + " AS CHAR)"
        " FROM " + GetTableName() +
        " WHERE " + GetWhereClause(bindings));
    query.bindValues(bindings);

    if (!query.exec() || !query.isActive())
    {
        MythDB::DBError("SimpleDBStorage::Load()", query);
    }
    else if (query.next())
    {
        QString result = query.value(0).toString();
        // a 'NULL' QVariant does not get converted to a 'NULL' QString
        if (!query.value(0).isNull())
        {
            initval = result;
            user->SetDBValue(result);
        }
    }
}
Пример #3
0
TCHAR * OdbcRecordset::Read(bool bAllowEmptyTable /*= false*/)
{
	static TCHAR szError[128] = {0};

	// Build statement
	tstring szSQL = _T("SELECT ");
	tstring szWhereClause = GetWhereClause();

	szSQL += GetColumns();
	szSQL += _T(" FROM ");
	szSQL += GetTableName();

	// Do we have a where clause? Include it.
	if (!szWhereClause.empty())
	{
		szSQL += _T(" WHERE ");
		szSQL += szWhereClause;
	}

	// Attempt to execute the statement.
	if (!_dbCommand->Execute(szSQL))
		return _dbCommand->GetError();

	// Does the table have any rows?
	// Make sure we allow for tables that can be empty.
	if (!_dbCommand->hasData())
	{
		if (bAllowEmptyTable)
			return nullptr;

		_stprintf(szError, _T("%s la tabla esta vacia."), GetTableName().c_str());
		return szError;
	}

	do
	{
		// This extra result/check potentially slows things down. 
		// It's also not very informative, so this could really use a bit of a rewrite
		// to better allow for this scenario.
		if (!Fetch())
		{
			_stprintf(szError, _T("No se han podido selecionar columnas en la tabla %s."), GetTableName().c_str());
			return szError;
		}
	} while (_dbCommand->MoveNext());

	return nullptr;
}