Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > обрщение к Query Access через СRecordset


Автор: witex 6.9.2007, 10:06
Здраствуйте форумчане.

Есть проблема, делаю программу работающю с БД Акцес.
Данные выбирать получается, но когда в запроссах использую INNER JOIN то иногда CRecodset выбирает не все данные! чать пропускает попросту.

Создаю банальный Query в самом акцесе, там всё как нужно.

Вопрос такой, как обратиться к готовому Query через CRecordset, и как используя его задавать парметр выборки в самом Query?

За ранее благодарю!

Автор: dizzy1984 7.9.2007, 13:21
Должно быть это сделать не получится, либо будет проблематично.
Проще продублироват текст запроса и использовать его в CRecordset.
А чтобы понять почему запрос не выводит часть данных нужно знать.
1) Запрос
2) Структуру БД
3) Код запускающий его на выполнение
3) Способ(код) просмотра результата запроса.

Автор: witex 9.9.2007, 14:18
Запрос через рекордсет и в query в Акцесе.
Код


CString query ="SELECT dolzn.id,dolzn.dolznost, dolzn.did, dolzn.jark FROM dolzn INNER JOIN tarif ON dolzn.ID = tarif.ID WHERE (((tarif.data)<>'"+datas+"'))";
nrd.Open(CRecordset::forwardOnly,_T(query));


полностью идентичные запрос и в акцесе.

Но в акцессе выводит при нём 2 результата, а через рекордсет 1!

nrd.GetRecordCount(); возвращает еденицу вместо двух результатов

Вот объясните в чём может быть проблема?

Автор: dizzy1984 10.9.2007, 08:06
Слишком мало информации, так ничего не скажешь.
Покажи запрос который посылается бд, т.е какое значение принимае query после присвоения.
Покажи значения которые содержат таблицы dolzn и tarif.
И как ты собственно просматриваешь получившийся результат.
Метод GetRecordCount возвращает число уже просмотренный записей, которой естественно, если их не смотрят, равно 1.
Цитата

Caution   The record count is maintained as a "high water mark," the highest-numbered record yet seen as the user moves through the records. The total number of records is only known after the user has moved beyond the last record. For performance reasons, the count is not updated when you call MoveLast. To count the records yourself, call MoveNext repeatedly until IsEOF returns nonzero. Adding a record via CRecordset:AddNew and Update increases the count; deleting a record via CRecordset::Delete decreases the count. 

Т.е в мсдене сказано что чтобы получить число строк нужно организовать цикл по условию while(nrd.IsEOF()) вызывая nrd.MoveNext(); и увеличивая счетчик числа, с поправкой на CRecordset:AddNew и CRecordset:Delete.

Автор: witex 11.9.2007, 10:58
благодарю, за помощь.

Crecodset.IsEOF() помог.

Просто в мсдн написанно, что GetRecordCount() возвращает количество запсей. А оказалось нет.

Ещё раз спасибо. Тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)