实际工控项目,串口数据先存到数据库,再显示。void CMainFrame::createList()
{
ctrlList.Create( WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS,
CRect(0,0,0,0), this, 1); //?? 不成功
ctrlList.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ); ctrlList.InsertColumn(0, L"开始时间", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(1, L"结束时间", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(2, L"管路号", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(3, L"酒度", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(4, L"设定值", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(5, L"实际值", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(6, L"实际体积", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(7, L"开始温度", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(8, L"结束温度", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(9, L"产品名称", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(10, L"产品批次", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(11, L"R值", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(12, L"脉冲总数", LVCFMT_CENTER, 120, 0 );
//配置数据源
SQLConfigDataSource( //?? 异常
NULL,
ODBC_ADD_DSN,
_T("Microsoft Access Driver (*.mdb)"),
_T("DSN=WS8DB\0DBQ=d:\\pj\\pj.mdb\0")
); CDatabase data;
data.Open(_T("WS8DB"), //?? 异常
FALSE,
FALSE,
_T("DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;PWD=pj135246;UID=admin;")
); CRecordset ds( &data );
ds.Open( CRecordset::snapshot, L"SELECT * FROM 历史记录 ORDER BY 开始时间 DESC" ); //??
CDBVariant dbv;
for( int i = 0 ; !ds.IsEOF(); i++ )
{
CString str; ds.GetFieldValue(1, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i-%02i-%02i %02i:%02i", dbv.m_pdate->year, dbv.m_pdate->month, dbv.m_pdate->day, dbv.m_pdate->hour, dbv.m_pdate->minute );
int n = ctrlList.InsertItem( i, str ); ds.GetFieldValue(2, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i-%i-%i %i:%02i", dbv.m_pdate->year, dbv.m_pdate->month, dbv.m_pdate->day, dbv.m_pdate->hour, dbv.m_pdate->minute );
ctrlList.SetItemText( n, 1, str ); ds.GetFieldValue(3, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i", dbv.m_lVal );
ctrlList.SetItemText( n, 2, str ); ds.GetFieldValue(4, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 3, str ); ds.GetFieldValue(5, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 4, str ); ds.GetFieldValue(6, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 5, str ); ds.GetFieldValue(7, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 6, str ); ds.GetFieldValue(8, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 7, str ); ds.GetFieldValue(9, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 8, str ); ds.GetFieldValue(10, dbv);
ctrlList.SetItemText( n, 9, dbv.m_dwType == DBVT_NULL ? L"" : *dbv.m_pstringW ); ds.GetFieldValue(11, dbv);
ctrlList.SetItemText( n, 10, dbv.m_dwType == DBVT_NULL ? L"" : *dbv.m_pstringW ); ds.GetFieldValue(12, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.4f", dbv.m_dblVal );
ctrlList.SetItemText( n, 11, str ); ds.GetFieldValue(13, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i", dbv.m_lVal );
ctrlList.SetItemText( n, 12, str ); ds.MoveNext();
}
ds.Close();
}
{
ctrlList.Create( WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS,
CRect(0,0,0,0), this, 1); //?? 不成功
ctrlList.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ); ctrlList.InsertColumn(0, L"开始时间", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(1, L"结束时间", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(2, L"管路号", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(3, L"酒度", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(4, L"设定值", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(5, L"实际值", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(6, L"实际体积", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(7, L"开始温度", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(8, L"结束温度", LVCFMT_CENTER, 60, 0 );
ctrlList.InsertColumn(9, L"产品名称", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(10, L"产品批次", LVCFMT_CENTER, 120, 0 );
ctrlList.InsertColumn(11, L"R值", LVCFMT_CENTER, 100, 0 );
ctrlList.InsertColumn(12, L"脉冲总数", LVCFMT_CENTER, 120, 0 );
//配置数据源
SQLConfigDataSource( //?? 异常
NULL,
ODBC_ADD_DSN,
_T("Microsoft Access Driver (*.mdb)"),
_T("DSN=WS8DB\0DBQ=d:\\pj\\pj.mdb\0")
); CDatabase data;
data.Open(_T("WS8DB"), //?? 异常
FALSE,
FALSE,
_T("DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;PWD=pj135246;UID=admin;")
); CRecordset ds( &data );
ds.Open( CRecordset::snapshot, L"SELECT * FROM 历史记录 ORDER BY 开始时间 DESC" ); //??
CDBVariant dbv;
for( int i = 0 ; !ds.IsEOF(); i++ )
{
CString str; ds.GetFieldValue(1, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i-%02i-%02i %02i:%02i", dbv.m_pdate->year, dbv.m_pdate->month, dbv.m_pdate->day, dbv.m_pdate->hour, dbv.m_pdate->minute );
int n = ctrlList.InsertItem( i, str ); ds.GetFieldValue(2, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i-%i-%i %i:%02i", dbv.m_pdate->year, dbv.m_pdate->month, dbv.m_pdate->day, dbv.m_pdate->hour, dbv.m_pdate->minute );
ctrlList.SetItemText( n, 1, str ); ds.GetFieldValue(3, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i", dbv.m_lVal );
ctrlList.SetItemText( n, 2, str ); ds.GetFieldValue(4, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 3, str ); ds.GetFieldValue(5, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 4, str ); ds.GetFieldValue(6, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 5, str ); ds.GetFieldValue(7, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 6, str ); ds.GetFieldValue(8, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 7, str ); ds.GetFieldValue(9, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.1f", dbv.m_dblVal );
ctrlList.SetItemText( n, 8, str ); ds.GetFieldValue(10, dbv);
ctrlList.SetItemText( n, 9, dbv.m_dwType == DBVT_NULL ? L"" : *dbv.m_pstringW ); ds.GetFieldValue(11, dbv);
ctrlList.SetItemText( n, 10, dbv.m_dwType == DBVT_NULL ? L"" : *dbv.m_pstringW ); ds.GetFieldValue(12, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%0.4f", dbv.m_dblVal );
ctrlList.SetItemText( n, 11, str ); ds.GetFieldValue(13, dbv);
if( dbv.m_dwType == DBVT_NULL )
str = L"";
else
str.Format( L"%i", dbv.m_lVal );
ctrlList.SetItemText( n, 12, str ); ds.MoveNext();
}
ds.Close();
}
解决方案 »
- dropbox
- 比较两个文件夹下的所有文件,如何判断出文件夹A下比文件夹B下多出哪些文件?
- VC ADO开发的几点疑问
- 请问是否可以从PreTranslateMessage()函数里面取得鼠标现在的位置?
- 如何用代码来修改ComboBox的属性?
- 求助!
- 求助(怎样自由切换网络)
- CTypedPtrArray<CObArray,CLine*>m_LineArray; 这语句应该怎么理解?
- 為甚麼我在 cview 裏調用 GetScrollBarCtrl 返回的總是 null
- 如何让onchar函数响应消息呢?
- 关于WSASend 大家来说说你们是怎么做的
- 将摄像头获取的原始数据,保存为BMP格式的文件
再收到时,直接加入列中,如:m_List1.SetItemText(item,I,内容2); I增值直到完成此条记录。
再收到时,直接加入列中,如:m_List1.SetItemText(item,I,内容2); I增值直到完成此条记录。
我用中间数组是为了截取数据中一段有用数据,直接插入一条记录,关键的地方就是这个内容1,内容2怎么是我想要的内容呢。现在很奇怪的是,如果收到的数据串很短,经过判断后能得到正确 的回复,如果收到的数据串很长,中间会有一部分数据丢失。
{
// TODO: Add your control notification handler code here
// Sleep(1000);
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
CString strchange1;
CString strchange2;
char change[2048];
if(m_mscomm1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_mscomm1.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
// MessageBox(strtemp,"strtemp");
strchange1+=strtemp;
}
strncpy(change,(LPCTSTR)strchange1,sizeof(change));
int i,j;
// for(k=0;k<len;k++)
// {
// strchange2.Format("%c",change[k]);
// m_editreceive+=strchange2;
// }
for(i=0;i<(len-1);i++)
{
if(change[i]=='O' && change[i+1]=='p')
{
for(j=i;j<(len-1);j++)
{
if((change[j]=='-' && change[j+1]=='-')||(change[j]=='O' && change[j+1]=='K'))
{
break;
}
m_editreceive+=change[j];
}
}
}
}
UpdateData(FALSE);
}
CString CStringProc::AnsiToUnicode(char * szAnsi, int len)
{
CString str;
// ansi to unicode
//预转换,得到所需空间的大小
int wcsLen;
if(len>0)
wcsLen=len;
else
wcsLen= ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0'; // UNICODE字串
str=wszString;
delete wszString;
return str;
}