Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CRecordset монополизирует доступ к базе?

5.4K
06 октября 2009 года
cursor
114 / / 05.01.2008
Здравствуйте.
У мне нужно открыть excel-файл и скопировать содержимое таблицы демо в демо4.

Алгоритм такой:
Цитата:
sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=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 монополизирует доступ к базе? Подскажите как мне выпутаться.

5.4K
07 октября 2009 года
cursor
114 / / 05.01.2008
Нашел ошибку в запросе
sSql.Format(_T("insert into demo4 (Txt TEXT, Nmb TEXT) VALUES ('%s', '%s')"), txt, nmb);
и переправил на database.ExecuteSQL. Заработало.
Возник еще вопрос. В таблице будет 40000 записей. Что будет быстрее
1. сравнить CString'и
2. переделать CString в double и сравнить
288
07 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: cursor

Возник еще вопрос. В таблице будет 40000 записей. Что будет быстрее
1. сравнить CString'и
2. переделать CString в double и сравнить



Попробуйте и то и то, и засеките время. Можно просто с помощью GetTickCount (хотя результаты наверное будут не точные). Или лучше всего сравните с помощью профилировщика.

upd.: Хотя нет, вру, с помощью GetTickCount ничего путного вы не получите.

5.4K
07 октября 2009 года
cursor
114 / / 05.01.2008
Столкнулся с еще одной проблемой.
Почему записи в таблицах экселя добавленные вручную не извлекаются запросами? Как это можно исправить?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог