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


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

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

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

так как закачка как правило идет порциями, то
посмотри в сторону GetRowsFetched и SetRowsetSize, а так по умолчанию пока все записи не пройдете не получите кол-во (MoveLast не помогает этому)
...
Рейтинг: 0 / 0
06.02.2006, 18:02
    #33526720
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице БД
Обычно подсчет строк (приблизительный) происходит при сборе статистики.
Некоторые базы данных позволяют это дело автоматизировать (типа DB2 - автоматический сбор статистики).
Еще как вариант - триггеры и MQT
...
Рейтинг: 0 / 0
06.02.2006, 19:57
    #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
06.02.2006, 22:40
    #33527178
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице БД
Спасибо, твой вариант с SELECT COUNT подошел. Кстати, это универсальный механизм или у него есть какие-нибудь ограничения (например, для каких-либо БД)?

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

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

Надо в соединении ODBC настроить правильно кодировку. целевая кодировка должна быть cp1251 . Кодировку самих файлов с данными ты должен сам знать.
...
Рейтинг: 0 / 0
06.02.2006, 23:13
    #33527212
Guest 2006
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице БД
А как настраиваются кодировки в соединении ODBC?
...
Рейтинг: 0 / 0
07.02.2006, 00:14
    #33527254
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице БД
Рядом с каждым драйвером ODBC у MS лежит хелповый файл. Бери и читай, там написано все. Я -- не знаю.
...
Рейтинг: 0 / 0
09.06.2006, 11:33
    #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
10.06.2006, 13:42
    #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
22.06.2006, 14:34
    #33808839
mailevdo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице БД
Ну а если использовтаь Open - у меня вылетает ошибка в Debug версии проекта (в Release ее нет), хотя в поле id есть нужное количество записей...

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


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