Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CRecordset монополизирует доступ к базе? CRecordset монополизирует доступ к базе 
:(
    Опции темы
bammm
Дата 6.10.2009, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.9.2008

Репутация: нет
Всего: нет



Здравствуйте.
У мне нужно открыть excel-файл и скопировать содержимое таблицы демо в демо4.

Алгоритм такой:

Код

sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAME S=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),
sDriver, sExcelFile, sExcelFile);

database.OpenEx(sSql,CDatabase::noOdbcDialog;

Присоединяюсь


Код

CRecordset cr, cr1;
cr.m_pDatabase = &database;
cr1.m_pDatabase = &database;

делаю два Рекордсета

Код

cr.Open(CRecordset::dynaset,_T("SELECT * FROM demo"),CRecordset::none);

первым делаю выборку всех записей из таблицы демо

Код


short index = 0;
cr.Move(0);
CString txt, nmb;

while(!cr.IsEOF()) {
cr.GetFieldValue(index, txt);
AfxMessageBox(txt, 0, 0);
cr.GetFieldValue(1, nmb);
AfxMessageBox(nmb, 0, 0);

получил и увидел содержимое, все ок.

Код

sSql.Format(_T("insert into demo4 (Txt TEXT, Nmb TEXT) VALUES ('%s', '%s')"), txt, nmb);
AfxMessageBox(sSql, 0, 0);

вижу запрос. Собираюсь послать его через cr1, чтобы записи в cr не затерлись
Таблица демо4 существует

Код

cr1.Open(CRecordset::dynaset,sSql,CRecordset::none );

и отсюда программа вылетает с ошибкой

Код

cr.MoveNext();
}

может cr монополизирует доступ к базе? Подскажите как мне выпутаться. 
PM MAIL   Вверх
jonie
Дата 7.10.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 4
Всего: 118



в свое время я делал клонирование так : 
Код


int CloneTable(ADODB::_ConnectionPtr& conn1, ADODB::_ConnectionPtr& conn2, _bstr_t& sql, pfnFieldProcessedCallBack pFieldCallBack)
{
    ADODB::_RecordsetPtr rs1, rs2;

    rs1.CreateInstance(__uuidof(ADODB::Recordset));
    if(!rs1) {
        std::cerr<<"Error while CreateInstance of ADODB::_RecordsetPtr (#1)";
        return -3;
    }

    rs2.CreateInstance(__uuidof(ADODB::Recordset));
    if(!rs2) {
        std::cerr<<"Error while CreateInstance of ADODB::_RecordsetPtr (#2)";
        return -3;
    }

    // Use client cursor to enable AbsolutePosition property.
    rs1->CursorLocation = ADODB::adUseClient;
    rs2->CursorLocation = ADODB::adUseClient;

    std::wcout<<L"trying open RecorSet#1 (" << (LPCTSTR)sql << L")...\n";
    rs1->Open(sql, _variant_t(conn1.GetInterfacePtr()), ADODB::adOpenStatic, ADODB::adLockBatchOptimistic, ADODB::adCmdText);
    if(!rs1->adoEOF) {

        rs2->PutRefActiveConnection(conn2);
        rs2->Open(sql, _variant_t(conn2.GetInterfacePtr()), ADODB::adOpenStatic, ADODB::adLockOptimistic, ADODB::adCmdText);

        while(!rs1->adoEOF) {
            rs2->AddNew();

            ADODB::FieldsPtr fields = rs1->Fields;
            for(long i=0; i<fields->Count; i++) {
                _bstr_t fname =        _bstr_t(fields->Item[i]->Name);

                CString fieldName = CString((LPCTSTR)fname).MakeUpper();
                _variant_t value = fields->Item[i]->Value;

                pFieldCallBack(fieldName, value);
                rs2->PutCollect(fname, value);
            }

            rs2->Update();
            rs1->MoveNext();
        }

        rs1->Close();
        rs2->Close();
    }
    else {
        std::cerr<<"Source database has EMPTY table, skipping\n";
    }
    return 0;    //all ok
}

может пригодиться ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.