powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Количество записей в таблице БД
13 сообщений из 13, страница 1 из 1
Количество записей в таблице БД
    #33526583
Guest 2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользую Visual C, ODBC, CDatabase, CRecordset.
Как можно быстро и просто подсчитать количество записей в таблице? CRecordset::GetRecordCount() - выдает всегда 1. Через CRecordset::MoveNext() долго.
Может с помощью ODBC API можно?..
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33526598
Barte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest 2006Пользую Visual C, ODBC, CDatabase, CRecordset.
Как можно быстро и просто подсчитать количество записей в таблице? CRecordset::GetRecordCount() - выдает всегда 1. Через CRecordset::MoveNext() долго.
Может с помощью ODBC API можно?..


Лучше ADO нет некого.
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33526626
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, например, выполнив запрос

SELECT COUNT(*) FROM [Таблица]

в единственном поле единственной записи будет нужное число. Вычислено оно будет на сервере, т.е. максимально быстро.
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33526632
KGP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest 2006Пользую Visual C, ODBC, CDatabase, CRecordset.
Как можно быстро и просто подсчитать количество записей в таблице? CRecordset::GetRecordCount() - выдает всегда 1. Через CRecordset::MoveNext() долго.
Может с помощью ODBC API можно?..

так как закачка как правило идет порциями, то
посмотри в сторону GetRowsFetched и SetRowsetSize, а так по умолчанию пока все записи не пройдете не получите кол-во (MoveLast не помогает этому)
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33526720
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно подсчет строк (приблизительный) происходит при сборе статистики.
Некоторые базы данных позволяют это дело автоматизировать (типа DB2 - автоматический сбор статистики).
Еще как вариант - триггеры и MQT
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33526990
Guest 2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Gradient
Спасибо, твой вариант с SELECT COUNT подошел. Кстати, это универсальный механизм или у него есть какие-нибудь ограничения (например, для каких-либо БД)?

2 All
Еще такой вопрос. Есть у меня два экземпляра одной базы: один в формате Paradox (файл DB), второй в формате dBase (файл DBF). Кто и как их создавал, неизвестно.
При считывании этих баз через драйверы ODBC наблюдаются такие проблемы c символами кириллицы:
1. В Win 98: Paradox - нормально, dBase - "кракозябры" вместо символов кириллицы.
2. В Win XP в обоих базах наблюдаются "кракозябры", причем формат этих "кракозябров" в Paradox и dBase разный.
Примеры "кракозябров", появляющихся вместо "Болт":
Aieo - Paradox
+þûª - dBase
Подскажите, плиз, что за фигня, и как с ней бороться?
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33527178
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, твой вариант с SELECT COUNT подошел. Кстати, это универсальный механизм или у него есть какие-нибудь ограничения (например, для каких-либо БД)?

Универсальный.

При считывании этих баз через драйверы ODBC наблюдаются такие проблемы c символами кириллицы:
Подскажите, плиз, что за фигня, и как с ней бороться?

Надо в соединении ODBC настроить правильно кодировку. целевая кодировка должна быть cp1251 . Кодировку самих файлов с данными ты должен сам знать.
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33527212
Guest 2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как настраиваются кодировки в соединении ODBC?
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33527254
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рядом с каждым драйвером ODBC у MS лежит хелповый файл. Бери и читай, там написано все. Я -- не знаю.
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33782743
mailevdo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья!!! Помогите разобраться...

CString sql = CString("SELECT COUNT(*) FROM ")+tableAlarm;
this->db->ExecuteSQL(sql);

где теперь это количество записей в БД???

вот мой класс:

class CBDE_Data : public CRecordset
{
public:

CBDE_Data(CDatabase *pDatabase = NULL) :
CRecordset(pDatabase) { m_nFields = 6; };

int m_id;
CTime m_DATATIME;
int m_NUMBERS;
double m_HH;
double m_LL;
double m_M_VALUE;

int AddString(CTime ti, int nu, double hh, double ll, double value);

void DoFieldExchange(CFieldExchange *pFX);
};
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33784921
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mailevdoДрузья!!! Помогите разобраться...

CString sql = CString("SELECT COUNT(*) FROM ")+tableAlarm;
this->db->ExecuteSQL(sql);

где теперь это количество записей в БД???

вот мой класс:

class CBDE_Data : public CRecordset
{
public:

CBDE_Data(CDatabase *pDatabase = NULL) :
CRecordset(pDatabase) { m_nFields = 6; };

int m_id;
CTime m_DATATIME;
int m_NUMBERS;
double m_HH;
double m_LL;
double m_M_VALUE;

int AddString(CTime ti, int nu, double hh, double ll, double value);

void DoFieldExchange(CFieldExchange *pFX);
};

Если только не ошибаюсь, нужно использовать Open для запросов, которые возвращают набор данных, а не ExecuteSQL. Последний вариант используется например при добавлении записей и т.д.
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #33808839
mailevdo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну а если использовтаь Open - у меня вылетает ошибка в Debug версии проекта (в Release ее нет), хотя в поле id есть нужное количество записей...

Как убрать ошибку? Может нужно специальный класс от CRecordset с другими полями (не как база, а только с одним полем для результата запроса) а?
...
Рейтинг: 0 / 0
Количество записей в таблице БД
    #34114492
ExecuteSQL не возвращает значений. Читай MSDN. Для этого создается объект класса CRecordset со ссылкой на объект CDatabase и открывает его с соответствующим запросом. Получаешь единственную ячейку которая и будет содержать количество строк в таблице.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Количество записей в таблице БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]