Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Цифры из ListControl в переменную типа string как?


Автор: AntonTatu 6.11.2008, 11:55
Всем привет smile

Кок скопировать значение из поля List Controla в переменную типа string (MVSC++2005), пытаюсь вот так, да неправильно что то :


string NumStr;

//копирую число из поля NumberOfNode, файла Access;

NumStr = m_listCtrl.SetItemText(nItem, 0, CA2CT((const char*)_bstr_t(rs.GetField("NumberOfNode"))));

int m = atoi(NumStr.c_str());



Доступ к БД получаю, строчка 

m_listCtrl.SetItemText(nItem, 0, CA2CT((const char*)_bstr_t(rs.GetField("NumberOfNode"))));

работает нормально, значения в ListControl выводятся, а как их теперь передать в string ? 

ЗЫ: еще вопрос, после int m = atoi(NumStr.c_str()); , m получит целое значение ?

Спасибо !

Автор: Rapalex 6.11.2008, 13:04
Используй CString

Автор: AntonTatu 6.11.2008, 13:29
Цитата(Rapalex @ 6.11.2008,  13:04)
Используй CString

Ну да, после того как я скажу что инфу с ячеек ListControl мне нужно запихать в вектор 
std::vector < std::vector <int> > MyArray( n, std::vector<int>(m) );
следующий совет будет используй CArray smile


нее.. мне так не нужно, нужно получить string и из него с помощью к примеру "atoi" цифры....



Автор: Rapalex 6.11.2008, 15:06
Нет, но это:
Код

NumStr = m_listCtrl.SetItemText(nItem, 0, CA2CT((const char*)_bstr_t(rs.GetField("NumberOfNode"))));
m_listCtrl.SetItemText(nItem, 0, CA2CT((const char*)_bstr_t(rs.GetField("NumberOfNode"))));

просто кашмар!!!

Что у тебя rs.GetField возвращает я не вижу, ты бы кода побольше написал!!!

Автор: AntonTatu 6.11.2008, 15:30
Цитата(Rapalex @ 6.11.2008,  15:06)
Нет, но это:
Код

NumStr = m_listCtrl.SetItemText(nItem, 0, CA2CT((const char*)_bstr_t(rs.GetField("NumberOfNode"))));
m_listCtrl.SetItemText(nItem, 0, CA2CT((const char*)_bstr_t(rs.GetField("NumberOfNode"))));

просто кашмар!!!

Что у тебя rs.GetField возвращает я не вижу, ты бы кода побольше написал!!!


Ну так я и не говорю что это супер пупер идеальный вариант, просто как по другому я не знаю... smile

Классы для работы с БД через ADO взяты из .....  ADO_Files.zip  поюзай Гугл в нем точная ссылка есть ( я не уверен что на форуме можно линки давать)

_variant_t CADORecordset::GetField(const char *pFieldName)
{
    CheckOpen();
    try {
        return m_pRecordset->GetFields()->GetItem(_bstr_t(pFieldName))->GetValue();
    }
    catch (_com_error e)
    {
        throw CADORecordsetException(CADORecordsetException::reErrGetField,
            (const char*)e.Description(), true);
    }
}




Есть таблица Access (текстовые поля), нужно перегнать из нее данные в массив (массив массивов числовой) 

вот код: кнопки по которой считываю таблицу в List Control, 

void CDlg::ReloadList ()
   {
   TRY_ADO()
      CHECK_ADO_CONNECTION()
      m_listCtrl.DeleteAllItems ();
      CADORecordset rs;
      rs.SetConnection (&theApp.m_connection);
     // rs.SetSQL ("select num_rec, [Name], [Phone], [Description] from tab1 order by [Name]");
      rs.SetSQL ("select * from Vershini");
      rs.SetOpenMode (false);
      rs.Open ();
      int nItem = 0;
      if (!rs.IsEmpty ())
         for (rs.First () ; !rs.IsEoF () ; rs.Next ())
            {
            m_listCtrl.InsertItem(nItem, _T(""));
            m_listCtrl.SetItemText(nItem, 0, CA2CT((const char*)_bstr_t(rs.GetField("Num"))));
            m_listCtrl.SetItemText(nItem, 1, CA2CT((const char*)_bstr_t(rs.GetField("Name")))); 
            m_listCtrl.SetItemText(nItem, 2, CA2CT((const char*)_bstr_t(rs.GetField("Phone1"))));
            m_listCtrl.SetItemText(nItem, 3, CA2CT((const char*)_bstr_t(rs.GetField("Phone2"))));
            m_listCtrl.SetItemText(nItem, 4, CA2CT((const char*)_bstr_t(rs.GetField("Description"))));
        m_listCtrl.SetItemData(nItem++, (DWORD)((long)rs.GetField("num_rec")));
            }         
      CATCH_ADO()

   }

вся таблица это строковые поля, в лист контрол все попадает нормально, данные отображаются....
теперь мне нужно что бы данные из столбцов :
"Num", "Phone1" , "Phone2" записывались в вектор (типа int), соответственно перед записью в вектор инфу нужно конвертнуть в тип int из строкового типа

   std::vector < std::vector <int> > MyArray( n, std::vector<int>(m) );

Автор: Rapalex 6.11.2008, 17:02
Пользуйся тегами кода с++
Мне просто интересно как твоё (const char*) дружит с уникод проектом!!!

Автор: AntonTatu 6.11.2008, 17:09
Цитата(Rapalex @ 6.11.2008,  17:02)
Пользуйся тегами кода с++
Мне просто интересно как твоё (const char*) дружит с уникод проектом!!!

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

ЗЫ: мне кажется мы ушли от темы...., я не спрашивал о том как мне подключить Access к С++, я спрашивал о другом.... smile

Автор: Rapalex 6.11.2008, 17:21
ТЫ ОЧЁМ
Код оформляй как код а не как текст!!!

Если нормально, то  smile 

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