2016-05-10 2 views
0

Я написал код ниже для извлечения данных из базы данных с использованием приложения C# для Windows Form, но теперь я хотел бы реализовать ту же идею извлечения данных в VC++ MFC: это код, который я реализован в C# Windows Form Application: Просьба помочьИспользование диалога VC++ MFC для извлечения данных из базы данных

c.Open(); 
DateTime startDateTime = Convert.ToDateTime(textBox1.Text); 
DateTime endDateTime = Convert.ToDateTime(textBox2.Text); 
string query = "SELECT * FROM People_Tracking WHERE Enter_Exit_Time BETWEEN @startDateTime AND @endDateTime ;"; 
SqlCommand cmd = new SqlCommand(query, c); 
cmd.Parameters.Add("@startDateTime", SqlDbType.DateTime).Value = startDateTime; 
cmd.Parameters.Add("@endDateTime", SqlDbType.DateTime).Value = endDateTime; 
SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
DataTable t = new DataTable(); 
adapter.Fill(t); 
dataGridView1.DataSource = t; 

Это образ того, как я хочу, чтобы отобразить его в VC++ MFC управления диалоговой enter image description here:

+0

В чем проблема? Где ваш фактический код MFC? –

+0

@JamesZ. Моя проблема в том, как я могу сделать то же самое в MFC. Я совершенно новичок в использовании MFC. Как вы помогаете? –

ответ

6

MFC поддерживает ODBC с CDatabase и CRecordset

Open Database Connectivity (ODBC)

Для создания базы данных:

SQLConfigDataSource(NULL, ODBC_ADD_DSN, 
    L"MICROSOFT ACCESS DRIVER (*.mdb)", 
    L"DSN=DataBaseName\0CREATE_DB=C:\\PATH\\DB.mdb\0\0"); 
//in this example "c:\\Path" must exist 

Чтобы открыть базу данных:

CDatabase db; 
db.Open(NULL, FALSE, FALSE, 
    L"ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};DBQ=c:\\PATH\\DB.mdb"); 

Пример SQL команд:

db.ExecuteSQL(L"CREATE TABLE MY_TABLE (ID TEXT(4), NAME TEXT(10))"); 
db.ExecuteSQL(L"INSERT INTO MY_TABLE (ID, NAME) values('1000', 'MyName')"); 

Чтение данных с использованием CRecordset

try 
{ 
    CDatabase db; 
    db.Open(NULL, FALSE, FALSE, 
     L"ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};DBQ=c:\\PATH\\DB.mdb"); 

    CRecordset records(&db); 
    records.Open(CRecordset::forwardOnly, L"SELECT * FROM MY_TABLE", CRecordset::readOnly); 

    while (!records.IsEOF()) 
    { 
     CString id, name; 
     records.GetFieldValue(L"ID", id); 
     records.GetFieldValue(L"NAME", name); 

     //int index = m_listCtrl.InsertItem(0, id, 0); 
     //m_listCtrl.SetItemText(index, 1, name); 
     TRACE(L"ID = %s, Name = %s\n", id, name); 

     records.MoveNext(); 
    } 
    db.Close(); 
} 
catch (CDBException *e) 
{ 
    MessageBox(L"DB error: " + e->m_strError); 
} 
+0

Большое вам спасибо! Я предложил вам вас, но программа указала одну ошибку в следующей строке кода: Saying - идентификатор «m_listCtrl» - undefine int index = m_listCtrl.InsertItem (0, Enter_Exit_Time, 0); –

+0

Предполагается, что у вас есть следующее объявление в вашем диалоговом классе: 'CListCtrl m_listCtrl;' Это две разные проблемы о 'CListCtrl' и базе данных, вы не можете одновременно изучить их обоих. В этом примере закомментируйте 'm_listCtrl' и используйте' TRACE' или 'MessageBox' для проверки базы данных (см. Править) –

+0

Большое вам спасибо! –

Смежные вопросы