配置好的RYPlatformDB 子游戏discuz数据库配置文件可以提供一下吗

2736人阅读
android adb(2)
内容是看书练习的,对数据库的简单操作!
写一个数据库帮助类
MyDatabaseHelper.java
package com.vincent.
import android.content.C
import android.database.sqlite.SQLiteD
import android.database.sqlite.SQLiteDatabase.CursorF
import android.database.sqlite.SQLiteOpenH
import android.widget.T
public class MyDatabaseHelper extends SQLiteOpenHelper{
private Context mC
* 创建书 表
public static final String CREATE_BOOK="create table Book("
+ "id integer primary key autoincrement, "
+ "author text, "
+ "price real ,"
+ "pages integer,"
+ "name text)";
* 创建书种类表
public static final String
CREATE_CATEGORY = "create table Category( "
+ "id integer primary key autoincrement, "
+ "category_name text "
+ "category_code integer )";
* context 上下文对象
* name 数据库名称
* factory 允许我们查询数据的时候返回一个自定义的cursor
* version 数据库的版本号
public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext, "数据库创建成功", Toast.LENGTH_LONG).show();
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
然后在activity点击button创建数
private MyDatabaseHelper dbH
dbHelper=new MyDatabaseHelper(DataActionActivity.this, "BookStore.db", null, 1);
CreateDB.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dbHelper.getWritableDatabase();
数据库创建好了,可以通过ddms查看,使用File Explorer最多只能看到databases目录下的BookStores文件,Book内容是看不到的。使用adb shell工具查看
找到SDK platform-tools路径,比如我的是:F:\android_sdk_windows\platform-tools
在环境变量path下添加,在末尾加上英文状态下的分号,然后把platform-tools路径加上去,确认添加即可,就不上图了,这种事分分钟搞定,打开CMD.adb shell
error:more than one device/emulator
提示连接的设备超过一个,我打开了一个模拟器,手机也连接上的,
这时候使用adb devices 查看当前连接设备
这时候要我们指定一个设备:使用命令adb -s emulator-5556 shell
指定模拟器设备:
然后下一步:进入到项目路径下,我的包名是:com.vincent.hello
输入命令:cd /data/data/com.vincent.hello/databases/
下一步输入ls,刚开始看成了is,结果是l,试了好几下才发现,郁闷
已经可以看到我们创建的数据库了BookStore.db,下面还有一个文件,这个是系统自动生成的,这是为了让数据库能够支持事务而产生临时的日志文件,这时候只有0k大小,
哈,现在就要打开数据库了,继续输入:sqlite3 BookStore.db,这个时候不要输错了,输错了就蛋疼了...现在可以看到当前数据库版本信息
来,先看看我之前创建的表,输入.table
咦,竟然有三个表,book,是我们创建的书表,Category是我们创建的分类表,那么android_metadata 表是什么呢?原来android_metadata 是是每个数据库中都会自动生成的,不用管它,现在让我们来查看这两个表创建的语法吧!输入:.schema  效果如下!
这是我们在代码里面创建数据库的sql语句:/**
* 创建书 表
public static final String CREATE_BOOK=”create table Book(”
+ “id integer primary key autoincrement, ”
+ “author text, ”
+ “price real ,”
+ “pages integer,”
+ “name text)”;
* 创建书种类表
public static final String
CREATE_CATEGORY = “create table Category( ”
+ “id integer primary key autoincrement, ”
+ “category_name text ”
+ “category_code integer )”;
对照上面的看看,是不是一样的呢,如果先创建Book表,然后再去创建Category表,这时候点击创建是不会更新的,需要在我自定义的数据库帮助类中删除两张表,再创建数据库onCreate(db);然后升级数据库版本,这样就能创建好了
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext, “数据库创建成功”, Toast.LENGTH_LONG).show();
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(“drop table if exists Book”);//删除表Book
db.execSQL(“drop table if exists Category”);//删除表Category
onCreate(db);//重新创建数据库
数据库创建好了,表也整好了,现在往里面添加数据吧,哈哈,把我平时看的小说写进去:
btnAddData.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SQLiteDatabase db=dbHelper.getWritableDatabase();//获得操作数据库的对象
ContentValues values=new ContentValues();//看起来就是用来装数据的,一个数据对象
values.put("name", "完美世界");
values.put("author", "辰东");
values.put("pages", 666);
values.put("price", 800);
db.insert("Book", null, values);//插入第一条数据
values.clear();//清空这个数据对象,然后继续下一个
values.put("name", "万古至尊");
values.put("author", "太一生水");
values.put("pages", 1000);
values.put("price", 500);
db.insert("Book", null, values);//插入第二条数据
往里面添加数据要使用ContentValues对象,首先获取数据库对象,然后往values对象里面添加值,id没有装入,因为前面设置的自增长,使用db插入,如需继续添加,这需要吧values清空,就跟货车拉货似的,卸了货才能继续装..装入完成之后怎么知道是不是完成了呢,我们可以使用adb命令看一看, 
插入完成之后,现在来修改一下数据:
SQLiteDatabase 中也是提供了一个非常好用的 update()方法用于对数据进行更新,这个方法
接收四个参数,第一个参数和 insert()方法一样,也是表名,在这里指定去更新哪张表里的数
据。第二个参数是 ContentValues 对象,要把更新数据在这里组装进去。第三、第四个参数
用于去约束更新某一行或某几行中的数据,不指定的话默认就是更新所有行。
findViewById(R.id.btn_updata).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("price", 1233);
db.update("Book", values, "name=?", new String[]{"完美世界"});//此句代码意思是:将name=“完美世界”的书price更新为1233
}catch(Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), "数据更新失败",Toast.LENGTH_LONG).show();
查看结果,
继续往下看看删除数据:
findViewById(R.id.btn_delete).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SQLiteDatabase db=dbHelper.getWritableDatabase();
db.delete("Book", "pages&?", new String[]{"700"});//删除Book表中pages&700的书
运行一下:
话说太一生水的万古至尊写完了,虽然看起来还有第二部的样子,不过那是以后的事儿呢,删了先,哈哈
最后是查询数据了:
感觉查询的方法参数好多啊,最少都有7个的样子..
SQLiteDatabase 中还提供了一个 query()方法用于对数据进行查询。
这个方法的参数非常复杂,最短的一个方法重载也需要传入七个参数。那我们就先来看一下
这七个参数各自的含义吧,第一个参数不用说,当然还是表名,表示我们希望从哪张表中查
询数据。第二个参数用于指定去查询哪几列,如果不指定则默认查询所有列。第三、第四个
参数用于去约束查询某一行或某几行的数据,不指定则默认是查询所有行的数据。第五个参
数用于指定需要去 group by 的列,不指定则表示不对查询结果进行 group by 操作。第六个参
数用于对 group by 之后的数据进行进一步的过滤,不指定则表示不进行过滤。第七个参数用
于指定查询结果的排序方式,不指定则表示使用默认的排序方式。更多详细的内容可以参考
下表。其他几个 query()方法的重载其实也大同小异,你可以自己去研究一下,这里就不再
进行介绍了
findViewById(R.id.btn_query).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SQLiteDatabase db=dbHelper.getWritableDatabase();
//查询Book表中的所有数据
Cursor cursor=db.query("Book",null,null,null,null,null,null);
if(cursor.moveToFirst()){
//遍历cursor对象,取出打印数据
String name=cursor.getString(cursor.getColumnIndex("name"));
String author=cursor.getString(cursor.getColumnIndex("author"));
int pages=cursor.getInt(cursor.getColumnIndex("pages"));
double price=cursor.getFloat(cursor.getColumnIndex("price"));
System.out.println("name="+name+","+"author="+author+","+"pages="+pages+","+"price="+price+";");
Toast.makeText(getApplicationContext(), "name="+name+","+"author="+author+","+"pages="+pages+","+"price="+price+";", Toast.LENGTH_LONG).show();
}while(cursor.moveToNext());
cursor.close();
}catch(Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), "查询失败", Toast.LENGTH_LONG).show();
这里只是设置了查询的表名,输出这个表的所有结果就好了..
我们首先在查询按钮的点击事件里面调用了 SQLiteDatabase 的 query()方法
去查询数据。这里的 query()方法非常简单,只是使用了第一个参数指明去查询 Book 表,后
面的参数全部为 null。这就表示希望查询这张表中的所有数据,虽然这张表中目前只剩下一
条数据了。查询完之后就得到了一个 Cursor 对象,接着我们调用它的 moveToFirst()方法将数
据的指针移动到第一行的位置,然后进入了一个循环当中,去遍历查询到的每一行数据。在
这个循环中可以通过 Cursor 的 getColumnIndex()方法获取到某一列在表中对应的位置索引,
然后将这个索引传入到相应的取值方法中,就可以得到从数据库中读取到的数据了。接着我
们使用 Log 的方式将取出的数据打印出来,借此来检查一下读取工作有没有成功完成。最后
别忘了调用 close()方法来关闭 Cursor。
关于数据库事务的使用,事务就是一连串的操作,要么都失败,要么都成功的意思。使用事务:
* 使用事务替换Book表中的数据,要么全部替换,要么都不换
findViewById(R.id.btn_replace_data).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SQLiteDatabase db=dbHelper.getWritableDatabase();
db.beginTransaction();//开启事务
db.delete("Book", null, null);//删除表
//在这里手动抛出异常,让事务失败
throw new NullPointerException();
ContentValues values=new ContentValues();
values.put("name", "遮天");
values.put("author","辰东");
values.put("pages", 50000);
values.put("price", 500.0);
db.insert("Book", null, values);
values.clear();
values.put("name", "神墓");
values.put("author","辰东");
values.put("pages", 80000);
values.put("price", 600.0);
db.insert("Book", null, values);
values.clear();
values.put("name", "西游记");
values.put("author","吴承恩");
values.put("pages", 20000);
values.put("price", 654.0);
db.insert("Book", null, values);
values.clear();
values.put("name", "水浒传");
values.put("author","施耐庵");
values.put("pages", 60000);
values.put("price", 10000.0);
db.insert("Book", null, values);
values.clear();
db.setTransactionSuccessful();//事务已经执行成功
Utils.defaultToast(DataActionActivity.this, "事务执行成功");
}catch(Exception e){
e.printStackTrace();
db.endTransaction();//结束事务
点击Button执行,先删除旧数据,然后然后了一个NullPointerException,这个时候,我们去查询一下数据库Book表的数据:
现在去掉抛出空指针的代码再次运行程序,执行事务:
查看数据库看看Book表的结果如何:
成功替换掉了原本Book表中的数据
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:129668次
积分:2304
积分:2304
排名:第17430名
原创:90篇
评论:54条
(2)(2)(3)(3)(2)(1)(9)(1)(9)(6)(5)(4)(12)(13)(12)(3)(3)(4)(1)(1)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'1、DataBaseInfo表
这个表要填写正确的服务器ID,SQL端口号,网狐加密后的正确登录名和密码,否则会报下面这个错误
2、GameGameItem表
这个表要填写正确的配置,否则在创建房间或者加载房间的时候,你会发现缺少了你要创建的那个游戏列表。
3、GameKindItem
这个表的内容是关系到客户端进房间的游戏列表,DownLoadUrl是客户端下载游戏所链接的地址。
4、GameRoomInfo表
这张表是你所创建过的房间存放的数据。
本文已收录于以下专栏:
相关文章推荐
【 0:44:06 】ADO 错误:0x,[DBNETLIB][ConnectionOpen(Connect()).]SQL Server 不存在或拒绝访问。
好久没写了,这次给大家说个用SQL脚本自动添加子游戏
每次新装好环境后,增加子游戏是个重复的劳动,很麻烦,怎么能让他自动生成呢。
下面我们就用SQL脚本来解决。
首先我们新建一个记事本将下面代码写...
输入帐号登录就出现上图。
修改方法:   全局定义  --  Platform.h里找到大厅版本,将上面 9,0,3 改为 6,0,3
关于网狐棋牌6603源码的整理、编译和搭建
10:39 3978人阅读 评论(3) 收藏 举报
最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份...
在QPPlatformManagerDB数据库--Base_Users表里就是后台的帐号和密码,密码是MD5加密
换成:E10ADC3949BA59ABBE56E057F20F883E 这个密码就是1...
MATCHID 就是房间ID 房间ID配置上去就好了
使用PhotonServer和Unity建立一个棋牌类游戏实例(三)Unity客户端的注册请求和服务器的注册请求响应
上一章我们完成了服务器与数据库的交互设计,下面我们开始第一个客户端与服务器的交互...
数据库内容:
存储用户相关的全局信息,包括用户的ID号码、账号名字、登录密码、乙级密码、头像(自定义头像).
经验数值、魁力数值、游戏的管理权限、登录次数、注册地址、只后登录地址等用户属性信息.还...
1、数据库链接数据库问题(及网站管道错误问题):
   
=》在数据库里的“服务器对象”=》“链接服务器”=》添加缺少的链接数据库。
连接数据库的设置记得设置属性RPC和RPC OUT为TU...
在挂接讲讲前,先讲解下如何手动新增一条新的游戏.
成功添加并显示一款游戏,会涉及到QPPlatformDB数据库下的GameGameItem表,GameKindItem表和GameT...
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)主题帖子积分
配置好的RYPlatformDB 子游戏数据库可以提供一下吗
主题帖子积分
(874.1 KB, 下载次数: 56)
18:14 上传
点击文件名下载附件资源
商业VIP及以上下载
拿去参考吧!微机在商业上的应用主要在数据处理,要求能够快速方便地访问一个大型数据库中的记录,提供了两种独立地面向用户的数据库访问系统,一种是(,开放数据库连接),另一种是(,数据访问对象)。本章你将学会使用和连接数据库,并能够简单地操作数据库数据。
连接数据库
是微软公司支持开放数据库服务体系的重要组成部分,它定义了一组规范,提供了一组对数据库访问的标准,这些是建立在标准化版本(Query&Language,结构化查询语言)基础上的。位于应用程序和具体的之间,目的是能够使应用程序端不依赖于任何,与不同数据库的操作由对应的的驱动程序完成。
层由三个部件构成:
ODBC管理器
进行编程,有三个非常重要的元素:环境(),连接()和语句(),它们都是通过句柄来访问的。在的类库中,类封装了编程的连接句柄,类封装了对编程的语句句柄,而环境句柄被保存在一个全局变量中,可以调用一个全局函数来获得当前被使用的环境句柄。
此外类负责记录集的用户界面,负责类与数据源的数据交换。
使用生成应用程序框架过程中,只要选择了相应的数据库支持选项,你就能够很方便地获得一个数据库应用程序的框架。
CDatabase类
快照(Snapshot)记录集
表1-1 CRecordset
类的数据成员
筛选条件字符串
排序关键字字符串
指向对象的指针
记录集中字段数据成员总数
记录集中参数数据成员总数
的主要成员函数如表所示:
表1-2 CRecordset类的成员函数
当前记录指针移动若干个位置
当前记录指针移动到记录集第一条记录
当前记录指针移动到记录集最后一条记录
当前记录指针移动到记录集下一条记录
当前记录指针移动到记录集前一条记录
当前记录指针移动到记录集特定一条记录
添加一条新记录
删除一条记录
编辑一条记录
取消一条记录的更新操作
重新查询数据源
获得默认连接字符串
获得默认语句
记录集中字段数据成员与数据源中交换数据
获得记录集记录个数
判断当前记录指针是否在最后一个记录之后
判断当前记录指针是否在第一个记录之前
判断记录集是否允许更新
CRecordView类
表1-3 CRecordView类的主要成员函数
获得指向记录集的指针
当前记录指针移动时,函数更新对当前记录所作的修改,这是将更新记录保存的方式。
判断当前记录是否为记录集的第一条记录
判断当前记录是否为记录集的最后一条记录
CFieldExchange类
1.2数据库应用程序的实现
创建并注册数据源
在创建数据库应用程序之前,先要准备好数据源。下面我们假设数据库应用程序要连接的数据库存放在盘根目录下,该数据库下有一张的表,如图所示:
图1-2 数据表“tblCustomer”
在操作系统的控制面板中,可以找到数据源管理器的图标,如图所示为中的的图标,它的位置在控制面板中的管理工具文件夹。由于所要连接的数据库是由创建,要求管理器中安装有的驱动程序。一般,只需安装了软件,相应的驱动程序就已经默认安装了。
图1-3 ODBC图标
鼠标双击图标,弹出“数据源管理器”对话框,如图所示。
图1-4  ODBC数据源管理器
在用户、系统、文件标签页中都可以创建一个数据源,但所创建的数据源的应用范围是不同的:
用户DSN: 用户数据源只对当前用户可见,而且只能用于当前机器上。
图1-5 选择ODBC驱动程序类别
单击“”按钮,弹出“  安装”对话框,如图所示。在数据源名文本框中填入:,单击“选择”按钮,弹出“选择数据库”对话框,如图所示,选择数据库文件,连续单击“”按钮回到前一对话框。
图1-6 设置Microsoft Access数据源
图1-7 选择数据库
最后在系统标签中可以看到创建的数据源出现在数据源列表中,如图所示。
图1-8 创建好的系统数据源 
创建数据库应用框架
〖例9〗使用可以方便地得到一个数据库应用程序的框架,创建一个 应用程序,在向导的第步中,选择单选项“”,如图所示。
图1-1 设置数据库支持
单击“”按钮,弹出“”对话框,选择单选项,并在下拉框中选择事先建立好的数据源“”,如图所示。
图1-10选择ODBC数据源
单击“”按钮,弹出“”对话框,列表框中列出了数据库中所包含的表和查询,选择应用程序所操作的表,如图所示。
图1-11 选择数据库表
单击“”按钮,结束数据源的设置工作,在图中“”按钮的下方会出现数据源的选择信息。
单击“”按钮,完成数据库应用程序框架的创建,编译运行这个程序,运行结果如图所示。应用程序包含了数据库记录基本操作菜单和工具按钮,视图是一个对话框,可以添加控件。
图1-12 数据库应用程序框架运行效果
选择工作区的,展开类树,进一步观察自动添加的与数据库支持有关的内容。
增加了一个类,该类代表从中选择的一组记录集。程序可以选择一个表作为一个记录集,本例选择了表中的记录构建记录集,也可以选择一个查询的结果集作为一个记录集。
如程序清单所示。构造函数用于创建一个记录集对象,并把一个对象的指针作为参数传递给构造函数,以便获得已由对象建立起来的与数据源的连接。
类的成员函数用于获得定义了数据源类型和数据源名的连接字符串。函数中定义了定义语句的字符串,本例的语句定义了查询一张表的完整记录。
类中定义了与数据源表的字段相对应的数据成员,成员函数完成记录集上的字段数据成员与数据源上当前记录对应列之间数据的自动交换。
程序清单1-1:CExam1_1Set类
CExam1_1Set(CDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CExam1_1Set)
//{{AFX_FIELD(CExam1_1Set, CRecordset)
m_CustomerID;
//}}AFX_FIELD
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CExam1_1Set)
virtual CString GetDefaultConnect();&&
// Default connection string
virtual CString GetDefaultSQL();
&&&&&& // default SQL for Recordset
virtual void DoFieldExchange(CFieldExchange* pFX);&&&&&
// RFX support
//}}AFX_VIRTUAL
virtual void AssertValid()
virtual void Dump(CDumpContext& dc)
: CRecordset(pdb)
//{{AFX_FIELD_INIT(CExam1_1Set)
m_CustomerID = 0;
m_LastName = _T(&&);
m_FirstName = _T(&&);
m_HomeCountry = _T(&&);
m_HomeState = _T(&&);
m_PhoneNumber = _T(&&);
m_Comments = _T(&&);
m_nFields = 7;
//}}AFX_FIELD_INIT
m_nDefaultType =
return _T(&ODBC;DSN=HotelInfo&);
return _T(&[tblCustomer]&);
//{{AFX_FIELD_MAP(CExam1_1Set)
pFX-&SetFieldType(CFieldExchange::outputColumn);
RFX_Long(pFX, _T(&[CustomerID]&), m_CustomerID);
RFX_Text(pFX, _T(&[LastName]&), m_LastName);
RFX_Text(pFX, _T(&[FirstName]&), m_FirstName);
RFX_Text(pFX, _T(&[HomeCountry]&), m_HomeCountry);
RFX_Text(pFX, _T(&[HomeState]&), m_HomeState);
RFX_Text(pFX, _T(&[PhoneNumber]&), m_PhoneNumber);
RFX_Text(pFX, _T(&[Comments]&), m_Comments);
//}}AFX_FIELD_MAP
视图类是的派生类,是记录视图,支持在控件中显示数据库记录。默认提供了移动记录功能的实现(第一个,上一个,下一个,最后一个)。定义了一个指向记录集的指针。
类是类的派生类,类的视图对应一个对话框资源,所以类从基类中继承的成员函数中最重要的是函数和函数,函数实现记录集的字段与视图中控件之间的自动数据交换,函数实现记录集的字段与视图中控件之间实时交换。
设计记录操作界面
〖例9〗打开资源管理器的Dialog文件夹,选择,在对话框中按图添加静态控件和编辑框控件,设置编辑框的属性为只读。
记录操作界面
并按表所示,修改编辑框控件的属性。
记录操作界面控件属性
静态文本控件
编辑框控件
静态文本控件
编辑框控件
静态文本控件
编辑框控件
静态文本控件
编辑框控件
静态文本控件
编辑框控件
静态文本控件
编辑框控件
接下来,要将编辑框控件与一个记录集字段数据成员绑定,打开,选择标签页,为编辑框控件映射记录集字段数据成员,单击“”,弹出“”对话框,在下拉框中选择由指针所指向的记录集字段数据成员。如图所示,为控件选择绑定的变量为。设置完毕如图所示。
为视图控件绑定记录集字段数据成员
所有控件ID与记录集的绑定
单击“”按钮,完成设置,重新运行程序,运行结果如图所示。使用移动记录的四个工具按钮,前后浏览每一条记录,当移动到第一条记录时,“第一条”和“上一条”按钮变灰,当移动到最后一条记录时,“最后一条”和“下一条”按钮变灰。
在浏览记录的过程中,你可以修改各个编辑框中的内容,紧接着作一次移动记录操作,所作的修改就能被保存到数据库中。
增加了浏览功能后的应用程序
更新记录操作包括修改,添加和删除记录,类提供了、、、、、等成员函数用于更新记录。
函数用于添加一个新的空记录,所有字段数据成员的值都为。函数用于删除当前记录,函数用于修改当前记录各字段数据成员的值。函数用于和操作后的数据的最后保存,函数用于取消任何由和操作产生的待处理的更新。函数用于重新执行对记录集的查询,当记录集类型是快照型时,快照不反映用户添加的记录,这时需要调用该函数重新查询更新后的记录集。
下面在中增加添加新记录和删除记录的功能。
〖例9〗在“”记录下添加三个菜单项如下图图所示。一个菜单项是分割线,另外两个菜单项分别是“增加记录”和“删除记录”。菜单设置为和。
增加菜单项
使用在视图类为菜单项和映射消息处理函数,得到成员函数和。
添加的类数据成员,用以记录是否进入添加模式,当的值为时,进入添加模式。在的构造函数中初始化的值为。
为成员函数添加代码,增加一条空记录,并清除编辑框的只读属性。实现代码如程序清单所示。
程序清单1-2:Add Record&
菜单消息处理函数
// TODO: Add your command handler code here
m_pSet-&AddNew();  进入添加模式
m_addflg=    设置添加模式标志
CEdit* m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID);
m_pCtrl-&SetReadOnly(false); //清除编辑框的只读属性
UpdateData(false);&&
//用新记录的字段数据成员值更新控件显示
使用添加类的虚函数函数,并在函数中添加代码,通过移动记录将添加的新记录保存到表中。实现代码如程序清单所示
程序清单1-3:OnMove()函数
// TODO: Add your specialized code here and/or call the base class
if(m_addflg)//添加模式处理
&& UpdateData(true);//使用控件值更新记录集字段数据成员
if(m_pSet-&CanUpdate() )//将记录集更新保存到表中
&&&&&& m_pSet-&Update();
m_pSet-&Requery();//重新查询记录集
UpdateData(false);//以更新后的记录集数据成员更新控件显示
CEdit* m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID);
m_pCtrl-&SetReadOnly(true); //设置编辑框为只读
&&&&&& return CRecordView::OnMove(nIDMoveCommand);
为成员函数添加代码,删除当前记录,实现代码如程序清单所示。
程序清单1-4:Delete Record菜单处理函数
// TODO: Add your command handler code here
m_pSet-&Delete();//删除当前记录
m_pSet-&MoveNext();//移到下一记录
if(m_pSet-&IsEOF() )//删除记录为最后一条记录处理
&&&&&& m_pSet-&MoveLast();
if(m_pSet-&IsBOF() )//删空记录集处理
&&&&&& m_pSet-&SetFieldNull(NULL);
UpdateData(false);//更新控件显示
排序和筛选
类有两个重要的数据成员和,是用于表示筛选记录的条件字符串,是用于表示排序的关键字的字符串。只要对这两个数据成员赋值,只能实现排序和筛选。
〖例9〗首先在应用程序中建立两类排序,每一类是按号排序,另一类是按排序。
在“查看”菜单下添加三个菜单项:一条分隔线、“按排序”和“按国家排序”,菜单项设置为和。使用为两个菜单项在视图类中映射消息处理函数得到,添加代码如程序清单所示,实现排序。
程序清单1-5:实现排序的函数
// TODO: Add your command handler code here
m_pSet-&m_strSort=&CustomerID&;// 定义排序关键字按排序
m_pSet-&Requery() ;// 重新查询
UpdateData(false);&
//更新控件显示
// TODO: Add your command handler code here
m_pSet-&m_strSort=&HomeCountry&;
m_pSet-&Requery() ;
UpdateData(false);
接着添加筛选条件,在一个对话框中输入一个国别,则只显示属于该国别的顾客记录。步骤如下:
创建一个对话框,并添加控件,如图1-18所示。设置编辑框的ID为IDC_FILTER.。为该对话对话框添加一个新的对话框类CFilterDlg并使用ClassWizard为编辑框IDC_FILTER在对话框类CFilterDlg中添加一个Ctring类型的成员变量m_Filter。
筛选对话框
在“查看”菜单下添加一个新的菜单项“筛选”,菜单项ID设为ID_VIEW_FLITER,使用ClassWizard在CExam1_1View类中为菜单项ID_VIEW_FILTER映射菜单处理函数,得到函数OnViewFilter()。
程序清单1-6:实现筛选的函数
// TODO: Add your command handler code here
if(dlg.DoModal()==IDOK )//调用筛选对话框,按按钮返回
if(dlg.m_Filter.IsEmpty())//编辑框为空,显示整个记录集
&&&&&&&& str=&&;
&&&&&& else
&&&&&& str=&HomeCountry='&+dlg.m_Filter+&'&;//定义筛选字符串
m_pSet-&m_strFilter=
&&&&&& m_pSet-&Requery();&
//重新查询记录集
&&&&&& UpdateData(false);&
//更新控件显示
连接数据库
()即数据对象访问集,是使用访问数据库的一种技术。它是 的一部分,可以独立于进行数据库访问。与是两种完全不同的访问机制,的工作依赖于数据库制造商提供的驱动程序,应用程序使用 访问数据库时,是由管理器将应用程序的数据库访问请示传递给相应的数据库驱动程序,驱动程序再用语句完成的访问任务。则使用提供的数据库访问对象集直接访问,速度比要快。本身的数据库格式为。如果你采用的是格式的数据库,又希望提高数据库访问速度时,可以选择方式。
封装了的绝大多数函数,为封闭的类与类非常相似,同样,和也提供了类似的支持,所以虽然与的工作机制不一样,但是开发数据库应用程序的过程与开发数据库程序却惊人地相似。
DaoDatabase类
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图1-11
选择DAO数据源
MFC提供了基于ODBC和基于DAO的数据库访问方式。
本文已收录于以下专栏:
相关文章推荐
MFC使用ADO连接SQLServer数据库。
最近要做一个大作业,需要用到数据库,sql server装了两次都失败,遂弃暗投明,用mysql,虽然我从来没有接触过,数据库么,一通百通的,5分钟就熟悉了。问题的关键是要用MFC连接mysql数据库...
个人使用mfc连接mysql的一些经验,用来与大家分享一下:首先安装mysql数据库,在安装内容中选择lib和include组件,用于mfc调用连接mysql的库文件。再到VS2005下的设置:(1)...
第一步:新建一个基于对话框的MFC项目,第二步:对项目进行配置,让它可以用代码连接到数据库,第三步:吸入相关代码是数据能插入到数据库中
小白一个,注释有不对的地方请指出,首先,设置一些引用文件的环境变量,点击项目-&属性-&vc++目录然后“include目录”(包含目录)那把“C:\ProgramFiles\MySQL\MySQL ...
作为一个大学汪,课多,作业也还真是多啊(( &﹏
     此次小程序的主要功能及知识点:ODBC连接MySql数据库、利用MFC的CSocket类实现网络通信,程序运行界面如下:
服务器、客户端...
下图是程序的最终效果,包含了数据的显示,添加,修改,删除这几项数据库操作的常用功能。
  我的调试环境是xp,mysql版本是mysql4.0.23
  1.安装Mysql的ODB...
VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。
一、ADO概述
ADO是Microsoft为最新和最强大的数据访问范...
介绍了在MFC中使用ODBC方式使程序能够动态的连接一个在电脑上建好的Access数据表,并能够实现插入、删除、替换更新数据的功能!
第一步:首先建立基于对话框的MFC应用程序Library,然后添加一个用户登录界面如图:
并建立此对话框的类LoginDlg ,在类中新建两个变量CString m_strN
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 quartz 数据库配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信