1 Winsock函数的注意点
1.1 函数的返回值
accept
recv:真正收到的字节数
buf_recv---数据缓存
协议缓存
send:真正发出去的字节数
buf_send---数据缓存
协议缓存
connect
1.2 利用/r/n
编辑框的属性要改:
多行
支持return
2 ODBC数据库访问技术
2.1 数据库的建立
通过Access2003建立1个数据库-----db_student.mdb
包含了1个表-----table_student
2.2 建立ODBC的数据源
控制面板-----管理工具-----数据源ODBC
意义:让db_student.mdb------dsn_student 一一对应,以后程序中就只需要访问dsn_student
2.3 VC建立基于对话框的工程
步骤:
1 在stdafx.h中增加
#include <afxdb.h>---------为了声明准备使用的ODBC类的原型
2 在类视图上利用右键-------建立1个set派生类(基类是CRedordSet)
注意:用到了dsn/table,选动态记录集
3 修改界面,增加4个编辑框,用于显示 number name age math
4 关联成员变量
5 给上面的关联变量 赋值
问题:需要记录集对象的地址,才能赋值
步骤:
1 在dlg类下增加成员变量 ------记录集对象的地址
COdbc1Set * m_pSet;
2 在dlg类下增加成员变量 ------数据库对象(不是地址)
CDatabase m_db;
3 在OnInitDialog函数中,增加代码
m_pSet=new COdbc1Set(&m_db);
m_pSet->Open(CRecordset::dynaset,"select * from table_student");
m_edit_number=m_pSet->m_number;
m_edit_name=m_pSet->m_name;
m_edit_age=m_pSet->m_age;
m_edit_math=m_pSet->m_math;
UpdateData(FALSE);
第1条记录就可以显示在界面上了
6 ODBC的概念
6.1 ODBC
程序员-------ODBC的成员函数--------数据库(各种)
6.2 我们学,通过MFC下的2个ODBC相关类,来操作ODBC
CDdatabase
它和我们建立的dsn相关
CRecordSet
它和当前记录相关
记录集在内存里----------数据库在磁盘上
记录集-----是某个table的复制品,而且在内存里 table_student
使用select * from table_student的SQL语句查询出来的结果,放在内存里
6.3 游标-------记录集的游标
刚打开记录集时,在第1条
如果删除记录(当前),游标都不会动--------假删(只是做了删除标记)------真删(Requery,而且游标自动到第1个)
插入记录后,游标仍然不动。实际上是追加。
代码:
void COdbc1Dlg::OnButtonNext()
{
// TODO: Add your control notification handler code here
m_pSet->MoveNext();
if(m_pSet->IsEOF()) //判断游标是否到数据库外面了。IsEOF为数据库后面,IsBOF为数据库前面
{
m_pSet->MoveFirst();
}
m_edit_number=m_pSet->m_number;
m_edit_name=m_pSet->m_name;
m_edit_age=m_pSet->m_age;
m_edit_math=m_pSet->m_math;
UpdateData(FALSE);
}
void COdbc1Dlg::OnButtonAppend()
{
// TODO: Add your control notification handler code here
m_pSet->AddNew();
UpdateData();
m_pSet->m_number=m_edit_number;
m_pSet->m_name=m_edit_name;
m_pSet->m_age=m_edit_age;
m_pSet->m_math=m_edit_math;
m_pSet->Update();
m_pSet->MoveLast();
}
void COdbc1Dlg::OnButtonDelete()
{
// TODO: Add your control notification handler code here
m_pSet->Delete();
m_pSet->Requery();
m_edit_number=m_pSet->m_number;
m_edit_name=m_pSet->m_name;
m_edit_age=m_pSet->m_age;
m_edit_math=m_pSet->m_math;
UpdateData(FALSE);
}
void COdbc1Dlg::OnButtonEdit()
{
// TODO: Add your control notification handler code here
m_pSet->Edit();
UpdateData();
m_pSet->m_number=m_edit_number;
m_pSet->m_name=m_edit_name;
m_pSet->m_age=m_edit_age;
m_pSet->m_math=m_edit_math;
m_pSet->Update();
}