MFC +ACCESS + SOCKET

工具:VC++6.0 MFC(原谅这该死的嵌入式系统都是XP)

功能:客户端:定时读取mdb数据库文件设备数据,向服务端发送。

  服务端:多线程接收多个客户端的数据,表格显示,socket异步向上位机发送。

写作目的:记录这个程序制作过程中的坎坎坷坷,从发现问题到解决问题的过程,同时祭奠我在出差过程中的无数次加班日子。

问题一:ado连接mdb数据库,出现多表查询在access2007 中可以运行的sql语句,exec并不能执行。
解决方案:听从老师傅龙哥的意见,拆分sql语句(天知道我写这条多表查询语句死了多少脑细胞),变成两条单表查询,先查主表,记录主键字段,当作where条件查询外键表。
注:我的多表查询 ~~~ SELECT r.Rod, r.Weight, r.Size, r.SampleNumber, r.Ovality, r.PD, r.Length, r.HardnessDD,
s.Brand,
s.Time,
s.Maker, …………………………………….
FROM RodData AS r LEFT JOIN SampleData AS s ON r.SampleNumber = s.SampleNumber
WHERE (((r.SampleNumber) In (select SampleNumber from SampleData where Time < #2011-11-1 11:11:11#)));
特别注意:access2007 是可以运行sql语句的 创建->查询设计->关闭->SQL(左上角)
问题二:mdb数据库查询语句的写法与oracle 有很多不同,写错就执行不了。。。。。
解决方案:1:条件where 中 时间字段加 #时间#
select SampleNumber from SampleData where Time < #2011-11-1 11:11:11#;
2:select的 时间字段加 select [Time] from table ; (猜想Time 为内置字段 加[]区别)
问题三:mfc程序打包exe可执行程序时有时报错 afxwin1.ini line:22 (内存越界,strcpy(char* cstring)) /301…… 常在create/showwindow函数中报错 ,可能是有mfc的一些控件在系统中没有注册,(copy xx.ocx to C:/windows/systems32 目录下 regedit xx.ocx) 表格控件、列表控件。。。。。。

问题四 : release生成或者 mfc static dll编译生成的可执行文件exe 不能运行 (afxwin1.ini line:xxx)debug版本可以运行
1、跟踪函数
2、m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE); //error
::ShowWindow(m_pPages[m_nCurrentPage]->m_hWnd,SW_SHOW); //maybe success

问题五 : 程序最小化到托盘(使程序后台运行)
void CZJSClientDlg::CreateNotifyIcon()
{
NOTIFYICONDATA stut;
//赋值—–
stut.cbSize = sizeof(stut);
stut.hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);;
stut.uID = IDR_MAINFRAME;
stut.hWnd = this->m_hWnd;
_tcscpy(stut.szTip,”惺惺惜惺惺1”);
stut.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
stut.uCallbackMessage = MYWM_NOTIFYICON; //自定义消息
::Shell_NotifyIcon(NIM_ADD,&stut); //most important
}

LRESULT CZJSClientDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case MYWM_NOTIFYICON:
//如果是用户定义的消息
if( lParam == WM_LBUTTONDBLCLK || lParam == WM_LBUTTONUP)
{
BshowWindow = TRUE;
//鼠标双击时主窗口出现
AfxGetApp()->m_pMainWnd->
ShowWindow(SW_SHOW);
}
break;
case WM_SYSCOMMAND:
//如果是系统消息
if( wParam==SC_MINIMIZE )
{
//接收到最小化消息时主窗口隐藏
BshowWindow = FALSE;
AfxGetApp()->m_pMainWnd->
ShowWindow(SW_HIDE);
return 0;
}
break;
case 133:
if( BshowWindow )
ShowWindow(SW_SHOW);
else
ShowWindow(SW_HIDE);
break;
default:
break;
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
问题六:socket 上位机发送数据,上位机总是接收不到
解决方案:接收的结构体 struct 在两边的定义一致 但是由于一边加了#pragma pack(1) ….struct… #pragma pack() (字节按一字节对齐)一边没加 导致结构体大小不一致 所以接收失败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值