Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос к базе данных SQL 
:(
    Опции темы
CyberDemon
Дата 25.10.2015, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.10.2003
Где: Нижний Новгород

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



Народ, хелп ми, плиз!
Решил тут заморочиться и изучить научится работать с базами данных.
Сразу скажу, что программированием занимаюсь не часто, поэтому код не особо красивый. Но и для обучения так сойдет.
Стоит MS VS 2015, MS SQL Server 2012 Ent. Пытаюсь соединится с БД через ODBC.
В результате все отрабатывает, по результатом запроса выводится только первая строчка таблицы, а их там больше.
Пробовал в разные таблицы и базы данных запрос делать - результат один и тот же - только первая строчка.
При чем сам SQL-запрос проходит через SQL Management Studio нормально.

Подскажите, плиз, в чем я идиот и где моя ошибка?

Код

    CDatabase db;
    db.OpenEx(_T("DSN=RESTOSQL;UID=user;PWD=pass"), CDatabase::noOdbcDialog);
    CRecordset rs;
    rs.m_pDatabase = &db;
    CDBVariant var;
    CString str;
    int i = 0;
    rs.Open(CRecordset::dynaset, _T("SELECT * FROM Banquets.dbo.Point"));
    int iCount = rs.GetRecordCount();
    rs.Move(0);
    for (i = 0; i < iCount; i++)
    {
        rs.GetFieldValue(i, var);
        str = var.m_pstringW->GetString();
        m_ctrlPointSel.AddString(str);
    }
    db.Close();


PM MAIL ICQ   Вверх
borisbn
Дата 26.10.2015, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



1) CRecordset::GetRecordCount возвращает кол-во записей, а не полей, а CRecordset::GetFieldValue требует индекс поля. Для перебора по полям нужно юзать CRecordset::GetODBCFieldCount
2) внутри цикла нужно вызывать CRecordset::MoveNext()

см. пример отсюда - https://msdn.microsoft.com/ru-ru/library/5f8k59f9.aspx


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
CyberDemon
Дата 26.10.2015, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.10.2003
Где: Нижний Новгород

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



Спасибо, вы оказались правы. MoveNext дал мне счастье в жизни)

Кривенько, но заработало)) Пример:
Код

    CRecordset rs;
    rs.m_pDatabase = &db;
    CDBVariant var1, var2;
    CString strW;
    int i1 = 0;
    int i2 = 1;
    rs.Open(CRecordset::dynaset, _T("SELECT pnt_id, pnt_name FROM Banquets.dbo.Point"));
    rs.Move(0);
    while (rs.IsEOF() == FALSE)
    {
        rs.GetFieldValue(i1, var1);
        rs.GetFieldValue(i2, var2);
        strW = var2.m_pstringW->GetString();
        m_ctrlPointSel.InsertString(var1.m_iVal - 1, strW);
        pPoint[var1.m_iVal - 1] = strW;
        rs.MoveNext();
    }



А как определить общее количество записей тогда. В моей тестовой таблице 5 строк. Но CRecordset::GetRecordCount возвращает белиберду 
PM MAIL ICQ   Вверх
borisbn
Дата 27.10.2015, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(CyberDemon @  26.10.2015,  13:18 Найти цитируемый пост)
А как определить общее количество записей тогда

Код
rs.Open(CRecordset::dynaset, _T("SELECT count(*) FROM Banquets.dbo.Point"));
rs.Move(0);
CDBVariant v;
rs.GetFieldValue( 0, v );
unsigned int recordsCount = v.m_iVal;



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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