| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Цифры из ListControl в переменную типа string как? |
| Автор: AntonTatu 6.11.2008, 11:55 |
| Всем привет Кок скопировать значение из поля 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 | ||
Ну да, после того как я скажу что инфу с ячеек ListControl мне нужно запихать в вектор std::vector < std::vector <int> > MyArray( n, std::vector<int>(m) ); следующий совет будет используй CArray нее.. мне так не нужно, нужно получить string и из него с помощью к примеру "atoi" цифры.... |
| Автор: Rapalex 6.11.2008, 15:06 | ||
Нет, но это:
просто кашмар!!! Что у тебя rs.GetField возвращает я не вижу, ты бы кода побольше написал!!! |
| Автор: AntonTatu 6.11.2008, 15:30 | ||||
Ну так я и не говорю что это супер пупер идеальный вариант, просто как по другому я не знаю... Классы для работы с БД через 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 | ||
да нормально вроде, все выводится без проблем.., сам попробуй, я же ссылку дал... ЗЫ: мне кажется мы ушли от темы...., я не спрашивал о том как мне подключить Access к С++, я спрашивал о другом.... |
| Автор: Rapalex 6.11.2008, 17:21 |
| ТЫ ОЧЁМ Код оформляй как код а не как текст!!! Если нормально, то |