Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не работает DoFieldExchange  (Прочитано 6033 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Александр Цикин
Гость
« : 17-04-2005 08:39 » 

Народ, экспресс-вопрос, кто знает
Создал свой класс от CRecordset, описал в DoFieldExchange переменные, вроде, как надо :?
Далее, извне обращаюсь к методу MoveNext, а в переменные ничего не пишется, такое впечатление, что DoFieldExchange просто не вызывается, хотя в отладке смотрю - база-то позиционируется...
Пробовал вызвать DoFieldExchange явно, но не тут-то было - где хранится переменная pFX - один Микрософт знает Жаль
Хотя когда используешь класс, привязанный к CRecordView, все работает. А мне-то надо прочитать все явно...

Что делать-то :? :?
Записан
fernir
Гость
« Ответ #1 : 19-04-2005 16:52 » 

Странно, по описанию все должно быть ОК, я делаю так и все работает:
class GRecContent : public CRecordset
{
public:
   GRecContent(CDatabase* pDB);
   virtual void DoFieldExchange(CFieldExchange* pFX);
public: CString SelectQuery(CString code){
         return "SELECT Code,ElType,Page,CName FROM Content WHERE Content.ReportCode = "+code;};
   CString g_type;
   CString g_page;
   CString g_name;
   int g_code;
   int g_flag;
};
GRecContent::GRecContent(CDatabase* pDB) : CRecordset(pDB){}
void GRecContent::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   RFX_Int(pFX, _T("Code"), g_code);
   RFX_Text(pFX, _T("ElType"), g_type);
   RFX_Text(pFX, _T("Page"), g_page);
   RFX_Text(pFX, _T("CName"), g_name);
   RFX_Bool(pFX, _T("Flag"), g_flag);
}
Потом где нужно:
GRecContent rec(&db);
rec.Open(CRecordset::snapshot, SelectQuery(code));
rec.MoveFirst(); //По моему не обязательно
Теперь можно непосредственно читать:
rec.g_code, rec.g_type ...
Записан
Александр Цикин
Гость
« Ответ #2 : 24-04-2005 04:11 » new

Сам разобрался...
Вся беда в том, что ODBC у меня не понимает SQL тип nvarchar...
А как это побороть, не знаю
(VC 6 и SQL 2000)
Пришлось все данные конвертить в varchar, не совсем удобно...
то есть эти поля DoFieldExchange просто игнорирует, а тогда пытаешься прочитать GetFieldValue, генерится ошибка.
Если кто знает, как побороть, ответьте
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines