Подскажите плз такой вопрос, есть у меня программа (на Ц++ но не важно) которая работает с БД (через ADO). И такая ситуация — программа должна проапдейтить запись в таблице но если записи там нет то вставить новую запись. Сейчас мне приходится делать селект и если мол число записей одын то апдейтить запись а если ноль то добавлять новую.
Т.е. сейчас мой код выглядит примерно так
bool foo ( param1 ... )
{
try {
...
SELECT … FROM …
...
long lRCnt = rsCounters->GetRecordCount();
if( lRCnt == -1 || lRCnt > 1 )
return false;
else if( lRCnt == 0 )
rsCounters->AddNew();
rsCounters->Fields->Item["field1"]->Value = param1;
...
rsCounters->Update();
rsCounters->Close();
return true;
}
ADO_CATCH2()
return false;
}
Но есть у меня внутреннее ощущение продиктованное интуицией и опытом что что-то тут не так (прямо таки внутренний протест — вот что хотите делайте но не так тут энергия Ци течет) и можно это сделать как то красивее или проще? Есть ли более правильные решения? Если спрашивать еще точнее — можно ли обойтись без селекта и если да то как?