DHTMLControl.cpp
上传用户:benben_wyd
上传日期:2010-02-26
资源大小:1229k
文件大小:4k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // DHTMLControl.cpp : Implementation of CDHTMLControl
  2. #include "stdafx.h"
  3. #include "DHTMLGrades.h"
  4. #include "DHTMLControl.h"
  5. //Added by Chuck Wood for error checking
  6. #include "..OLEDBErrorCheckingOLEDBErrorChecking.h"
  7. /////////////////////////////////////////////////////////////////////////////
  8. // CDHTMLControl
  9. void CDHTMLControl::fillGrades(
  10. CComQIPtr<IHTMLFormElement> &spForm,
  11. CComQIPtr<IHTMLElement> &spTableElement) {
  12. HRESULT hr;
  13.     char strHTML[1500];    //String to hold the new HTML
  14.     char description[51]; //Current Class Description
  15. //Variants that contain zero and the current column name
  16. CComVariant vZero(0); // Variant set to zero
  17. CComVariant vColumnName;
  18. //Start new HTML table
  19.     strcpy(strHTML, "<TABLE length="80%" id=theTable>n");
  20. //Get the UserID 
  21. CComBSTR strUser;  //Will contain the user ID value
  22. CComPtr<IDispatch> spUserDisp;
  23. CComQIPtr<IHTMLInputTextElement> spUserBox;
  24. hr = spForm->item(vColumnName = "UserID", vZero, &spUserDisp);
  25. if (SUCCEEDED(hr)) {
  26. hr = spUserDisp->QueryInterface(&spUserBox);
  27. }
  28. if (SUCCEEDED(hr)) {
  29. hr = spUserBox->get_value(&strUser);
  30. }
  31. //Get the password
  32. CComBSTR strPassword;  //Will contain the password value
  33. CComPtr<IDispatch> spPasswordDisp;
  34. CComQIPtr<IHTMLInputTextElement> spPasswordBox;
  35. if (SUCCEEDED(hr)) {
  36. hr = spForm->item(vColumnName = "Password", vZero, &spPasswordDisp);
  37. }
  38. if (SUCCEEDED(hr)) {
  39. hr = spPasswordDisp->QueryInterface(&spPasswordBox);
  40. }
  41. if (SUCCEEDED(hr)) {
  42. hr = spPasswordBox->get_value(&strPassword);
  43. }
  44. //Continue if everything worked.
  45. if (SUCCEEDED(hr)) {
  46. CLookup *pSet = new CLookup();
  47. if (SUCCEEDED(hr)) {
  48. hr = pSet->findUser(strUser, strPassword);
  49. }
  50. if (SUCCEEDED(hr)) {
  51. hr = pSet->MoveFirst();
  52. }
  53. if (SUCCEEDED(hr)) {
  54. //If everything is still OK, continue forming HTML
  55. //First add a table title (<CAPTION>) containing the name
  56. strcat(strHTML, "<CAPTION><EM>Name: <STRONG>");
  57. strcat(strHTML, pSet->m_Name);
  58. strcat(strHTML, "</STRONG></EM></CAPTION>n");
  59. //Next add CLASS, ASSIGNMENT, and GRADE column headings
  60. strcat(strHTML,"<TR><TH ALIGN=LEFT><STRONG>Class</STRONG>n");
  61. strcat(strHTML,"<TH ALIGN=LEFT><STRONG>Assignment</STRONG>");
  62. strcat(strHTML,"<TH ALIGN=RIGHT><STRONG>Grade</STRONG>n");
  63. //Initialize Class Description
  64. strcpy (description, "");
  65. do {
  66. //Start new row and a new cell
  67. strcat(strHTML, "<TR><TD>");
  68. //If new class, display it
  69. if (strcmp(description, pSet->m_Description)){
  70. //New description
  71. strcpy (description, pSet->m_Description);
  72. strcat(strHTML, "<EM>");
  73. strcat(strHTML, description);
  74. strcat(strHTML, "</EM>");
  75. }
  76. //Add the assignment cell and the score cell
  77. sprintf(strHTML, 
  78.    "%s<TD>%s<TD ALIGN=RIGHT>%2.0f%%n",
  79.    strHTML, pSet->m_Assignment,pSet->m_Score);
  80. //Continue loop if there are more records to process
  81. } while (pSet->MoveNext() == S_OK);
  82. }
  83. else {
  84. COLEDBErrorChecking::DisplaySingleError(hr, "fillGrades");
  85. }
  86. //End new table
  87. strcat(strHTML, "</TABLE>");
  88. //Messagebox containing the HTML you're getting, for debugging
  89. //    ::MessageBox(NULL, strHTML, "DHTMLGrades", MB_OK);
  90. //Now  put the new HTML onto the web page
  91. CComBSTR html = strHTML;
  92. spTableElement->put_outerHTML(html.Copy());
  93. //Clean up or report errors
  94. if (hr == S_OK) 
  95. pSet->Close();    //Close the current row set
  96. else                    //Some database option failed
  97. ::MessageBox(NULL, "Could not open rowset", "DHTMLGrades", MB_OK);
  98. }
  99. }