Вопрос по OleDb в Access

orient
Дата: 01.11.2005 14:42:13
При добавлении в цикле записей в таблицу аксеса переиодически выходит
OleDbException "Открытие большего числа таблиц невозможно"
Добавление происходит одним OleDbCommand-ом
Бд открывается перед циклом и закрвается после
Sa
Дата: 02.11.2005 17:14:50

Какой код "добавления" ?

uid = Sa

Posted via ActualForum NNTP Server 1.3

orient
Дата: 03.11.2005 11:45:47
Дело в том, что в цикле этот OledbCommand используется для добавления в одну таблицу, и для выборки из другой таблицы - Или это плохо, когда когда у нас все действия с объектами БД выполняются одним объектом OleDbCommand
orient
Дата: 03.11.2005 12:04:31
void ManageSys::DBConnect::UpdateATSHours(String* tgno,String* ats,DateTime date,int hour,int cc_o,int cc_answ,int sub_busy,int not_resp,int ext_techn,int incmp_dial)
{
cmd->CommandText=S"UPDATE ATSRecordHour SET CC_O=CC_O+\?,CC_ANSW=CC_ANSW+\?,"
S"NOT_RESPONCE=NOT_RESPONCE+\?,SUB_BUSY=SUB_BUSY+\?,"
S"EXT_TECHN=EXT_TECHN+\?,INCMP_DIAL=INCMP_DIAL+\?"
S"WHERE ((DateRec=\?)AND(HourRec=\?)AND(TGNO=\?)AND(ATS=\?))";

//очищение списка параметров
cmd->Parameters->Clear();
//добавление параметров в список
cmd->Parameters->Add(S"@CC_O",OleDb::OleDbType::Integer);
cmd->Parameters->Add(S"@CC_ANSW",OleDb::OleDbType::Integer);
cmd->Parameters->Add(S"@SUB_BUSY",OleDb::OleDbType::Integer);
cmd->Parameters->AddS"@NOT_RESPONCE",OleDb::OleDbType::Integer);
cmd->Parameters->Add(S"@EXT_TECHN",OleDb::OleDbType::Integer);
cmd->Parameters->Add(S"@INCMP_DIAL",OleDb::OleDbType::Integer);
cmd->Parameters->Add(S"@DateRec",OleDb::OleDbType::DBDate);
cmd->Parameters->Add(S"@HourRec",OleDb::OleDbType::Integer);
cmd->Parameters->Add(S"@TGNO",OleDb::OleDbType::BSTR);
cmd->Parameters->Add(S"@ATS",OleDb::OleDbType::BSTR);
//инициализация параметров
cmd->Parameters->Item[0]->Value=__box(cc_o);
cmd->Parameters->Item[1]->Value=__box(cc_answ);
cmd->Parameters->Item[2]->Value=__box(sub_busy);
cmd->Parameters->Item[3]->Value=__box(not_resp);
cmd->Parameters->Item[4]->Value=__box(ext_techn);
cmd->Parameters->Item[5]->Value=__box(incmp_dial);
cmd->Parameters->Item[6]->Value=__box(date);
cmd->Parameters->Item[7]->Value=__box(hour);
cmd->Parameters->Item[8]->Value=tgno;
cmd->Parameters->Item[9]->Value=ats;
try
{
cmd->Prepare();
cmd->ExecuteNonQuery();
}
catch(InvalidOperationException* e)
{
e->Message;
System::Windows::Forms::MessageBox::Show(e-> get_Message) , S"UPDATE ATS Record", MessageBoxButtons::OKCancel,
MessageBoxIcon::Asterisk);
}
catch(OleDbException* e)
{
e->Message;
System::Windows::Forms::MessageBox::Show(e->get_Message(),S"UPDATE ATS Record", MessageBoxButtons::OKCancel,
MessageBoxIcon::Asterisk);
}
catch(Exception* e)
{
e->Message;
System::Windows::Forms::MessageBox::Show(e->get_Message(),S"UPDATE ATS Record", MessageBoxButtons::OKCancel,
MessageBoxIcon::Asterisk);
}
}
Sa
Дата: 03.11.2005 13:14:46

UpdateATSHours вызывается в цикле?

uid = Sa

Posted via ActualForum NNTP Server 1.3

orient
Дата: 03.11.2005 15:23:09
Да
В среднем количество итераций составляяет 600 000
Но из-за этой ошибки обновлений в таблице делается раза в 1,5 - 2 меньше
orient
Дата: 03.11.2005 15:32:29
У меня подозрение, что если к началу следующего обновления таблицы предыдущее ещё не завершено, то для текущего обновления открывается открывается копия таблицы И когда их становится слишком много то это вызвает исключение
Sa
Дата: 07.11.2005 11:48:48

Наглядно будет если Вы сделаете тестовый пример. с одной таблицей в mdb и выложите проект здесь

uid = Sa

Posted via ActualForum NNTP Server 1.3