用户指南用户指南用户指南用户指南
文件类型:PDF/Adobe Acrobat 文件大小:字节
更多搜索:用户 指南 用户 指南 用户 指南 用户 指南
UltraLite for MobileVB
用户指南用户指南用户指南用户指南
部件号: DC32101-01-0902-01
上次修改时间: 2005 年 1 月
版权所有
版权所有 1989-2005 Sybase, Inc. 部分版权所有 2001-2004 iAnywhere Solutions, Inc. 保留所有权利.
未经 iAnywhere Solutions, Inc. 的事先书面许可,本书的任何部分不能以任何形式,任何手段 (电子的,机械的,手工的,光学的或其它
手段)进行复制,传播或翻译.iAnywhere Solutions, Inc. 是 Sybase, Inc. 的子公司.
Sybase,SYBASE(徽标),AccelaTrade,ADA Workbench,Adaptable Windowing Environment,Adaptive Component Architecture,
Adaptive Server,Adaptive Server Anywhere,Adaptive Server Enterprise,Adaptive Server Enterprise Monitor,Adaptive Server Enterprise
Replication,Adaptive Server Everywhere,Adaptive Server IQ,Adaptive Warehouse,AnswerBase,Anywhere Studio,Application
Manager,AppModeler,APT Workbench,APT-Build,APT-Edit,APT-Execute,APT-Library,APT-Translator,ASEP,Av a n t G o,
AvantGo Application Alerts,AvantGo Mobile Delivery,AvantGo Mobile Document Viewer,AvantGo Mobile Inspection,AvantGo Mobile
Marketing Channel,AvantGo Mobile Pharma,AvantGo Mobile Sales,AvantGo Pylon,AvantGo Pylon Application Server,AvantGo Pylon
Conduit,AvantGo Pylon PIM Server,Av a n t G o P y l o n P r o,Backup Server,BayCam,Bit-Wise,BizTracker,Certified PowerBuilder
Developer,Certified SYBASE Professional,Certified SYBASE Professional 徽标,ClearConnect,Client Services,Client-Library,
CodeBank,Column Design,ComponentPack,Connection Manager,Convoy/DM,Copernicus,CSP,Data Pipeline,Data Workbench,
DataArchitect,Database Analyzer,DataExpress,DataServer,DataWindow,DB-Library,dbQueue,Developers Workbench,Direct
Connect Anywhere,DirectConnect,Distribution Director,Dynamic Mobility Model,Dynamo,e-ADK,E-Anywhere,e-Biz Integrator,
EC Gateway,ECMAP,ECRTP,eFulfillment Accelerator,Electronic Case Management,Embedded SQL,EMS,Enterprise Application
Studio,Enterprise Client/Server,Enterprise Connect,Enterprise Data Studio,Enterprise Manager,Enterprise Portal(徽标),Enterprise
SQL Server Manager,Enterprise Work Architecture,Enterprise Work Designer,Enterprise Work Modeler,eProcurement Accelerator,
eremote,Everything Works Better When Everything Works Together,EWA,E-Whatever,Financial Fusion,Financial Fusion(及设计),
Financial Fusion Server,Formula One,Fusion Powered e-Finance,Fusion Powered Financial Destinations,Fusion Powered STP,Gateway
Manager,GeoPoint,GlobalFIX,iAnywhere,iAnywhere Solutions,ImpactNow,Industry Warehouse Studio,InfoMaker,Information
Anywhere,Information Everywhere,InformationConnect,InstaHelp,Intelligent Self-Care,InternetBuilder,iremote,iScript,
Jaguar CTS,jConnect for JDBC,KnowledgeBase,Logical Memory Manager,Mail Anywhere Studio,MainframeConnect,Maintenance
Express,Manage Anywhere Studio,MAP,M-Business Channel,M-Business Network,M-Business Server,MDI Access Server,
MDI Database Gateway,media.splash,Message Anywhere Server,MetaWorks,MethodSet,ML Query,MobiCATS,My AvantGo,
My AvantGo Media Channel,My AvantGo Mobile Marketing,MySupport,Net-Gateway,Net-Library,New Era of Networks,Next
Generation Learning,Next Generation Learning Studio,ODEVICE,OASiS,OASiS 徽标,ObjectConnect,ObjectCycle,
OmniConnect,OmniSQL Access Module,OmniSQL Toolkit,Open Biz,Open Business Interchange,Open Client,Open Client/Server,
Open Client/Server Interfaces,Open ClientConnect,Open Gateway,Open Server,Open ServerConnect,Open Solutions,Optima++,
Orchestration Studio,Partnerships that Work,PB-Gen,PC APT Execute,PC DB-Net,PC Net Library,PhysicalArchitect,Pocket
PowerBuilder,PocketBuilder,Power Through Knowledge,power.stop,Power++,PowerAMC,PowerBuilder,PowerBuilder Foundation
Class Library,PowerDesigner,PowerDimensions,PowerDynamo,Powering the New Economy,PowerJ,PowerScript,PowerSite,
PowerSocket,Powersoft,Powersoft Portfolio,Powersoft Professional,PowerStage,PowerStudio,PowerTips,PowerWare Desktop,
PowerWare Enterprise,ProcessAnalyst,QAnywhere,Rapport,Relational Beans,RepConnector,Replication Agent,Replication
Driver,Replication Server,Replication Server Manager,Replication Toolkit,Report Workbench,Report-Execute,Resource Manager,
RW-DisplayLib,RW-Library,S.W.I.F.T. Message Format Libraries,SAFE,SAFE/PRO,SDF,Secure SQL Server,Secure SQL
Toolset,Security Guardian,SKILS,smart.partners,smart.parts,smart.script,SQL Advantage,SQL Anywhere,SQL Anywhere
Studio,SQL Code Checker,SQL Debug,SQL Edit,SQL Edit/TPU,SQL Everywhere,SQL Modeler,SQL Remote,SQL Server,
SQL Server Manager,SQL Server SNMP SubAgent,SQL Server/CFT,SQL Server/DBM,SQL SMART,SQL Station,SQL Toolset,
SQLJ,Stage III Engineering,Startup.Com,STEP,SupportNow,Sybase Central,Sybase Client/Server Interfaces,Sybase Development
Framework,Sybase Financial Server,Sybase Gateways,Sybase Learning Connection,Sybase MPP,Sybase SQL Desktop,Sybase SQL
Lifecycle,Sybase SQL Workgroup,Sybase Synergy Program,Sybase User Workbench,Sybase Virtual Server Architecture,SybaseWare,
Syber Financial,SyberAssist,SybMD,SyBooks,System 10,System 11,System XI(徽标),SystemTools,Tabular Data Stream,
The Enterprise Client/Server Company,The Extensible Software Platform,The Future Is Wide Open,The Learning Connection,The Model
For Client/Server Solutions,The Online Information Center,The Power of One,TotalFix,TradeForce,Transact-SQL,Translation
Toolkit,Turning Imagination Into Reality,UltraLite,UltraLite.NET,UNIBOM,Unilib,Uninull,Unisep,Unistring,URK Runtime
Kit for UniCode,Versacore,Viewer,VisualWriter,VQL,Warehouse Control Center,Warehouse Studio,Warehouse WORKS,
WarehouseArchitect,Wa t c o m,Wa t c o m S Q L,Watcom SQL Server,Web Deployment Kit,We b . P B,We b . S Q L,WebSights,
WebViewer,WorkGroup SQL Server,XA-Library,XA-Server 和 XP Server 是 Sybase, Inc. 或其子公司的商标.
Certicom 和 SSL Plus 是 Certicom Corp. 的商标,Security Builder 是 Certicom Corp. 的注册商标.版权所有 1997-2001 Certicom Corp. 部分
版权所有 1997-1998,Consensus Development Corporation.Consensus Development Corporation 是 Certicom Corp. 的全资子公司.保留所
有权利.包含 NR 签名的履行协议,得到美国专利 5,600,725 的许可.受美国专利 5,787,028,4,745,568,5,761,305 的保护.其它专利正
在申请.
所有其它商标均归各自的所有者所有.
目录目录目录目录
iii
关于本手册关于本手册关于本手册关于本手册....................................................................................................... v
SQL Anywhere Studio 文档..................................................................................... vi
文档约定................................................................................................................ ix
CustDB 示例数据库............................................................................................... xii
查找详细信息并提供反馈..................................................................................... xiii
1UltraLite for MobileVB 介绍介绍介绍介绍............................................................................ 1
UltraLite for MobileVB 功能.....................................................................................2
UltraLite for MobileVB 体系结构.............................................................................4
2了解了解了解了解 UltraLite for MobileVB 开发开发开发开发.................................................................... 7
准备使用 UltraLite for MobileVB.............................................................................8
使用数据库模式....................................................................................................11
连接到 UltraLite 数据库.........................................................................................13
加密和模糊处理....................................................................................................17
使用动态 SQL 处理数据........................................................................................18
使用 Table API 处理数据.......................................................................................25
访问模式信息........................................................................................................34
处理错误...............................................................................................................36
鉴定用户...............................................................................................................38
同步数据...............................................................................................................39
部署 UltraLite 应用程序.........................................................................................42
在 UltraLite Palm 应用程序中维护状态..................................................................46
3教程教程教程教程::::示例示例示例示例 UltraLite for MobileVB 应用程序应用程序应用程序应用程序................................................ 49
简介......................................................................................................................50
第 1 课:创建项目体系结构..................................................................................51
第 2 课:创建窗体................................................................................................55
第 3 课:编写示例代码.........................................................................................57
第 4 课:在设备上部署.........................................................................................67
目录目录目录目录
iv
小结......................................................................................................................69
4教程教程教程教程::::AppForge Crossfire 的示例应用程序的示例应用程序的示例应用程序的示例应用程序................................................... 71
简介......................................................................................................................72
第 1 课:创建项目体系结构..................................................................................73
第 2 课:创建应用程序界面..................................................................................76
第 3 课:编写示例代码.........................................................................................78
第 4 课:在设备上部署.........................................................................................88
小结......................................................................................................................90
5UltraLite for MobileVB API 参考参考参考参考................................................................... 91
ULAuthStatusCode 枚举.........................................................................................92
ULColumn 类........................................................................................................93
ULColumnSchema 类...........................................................................................100
ULConnection 类.................................................................................................101
ULConnectionParms 类........................................................................................114
ULDatabaseManager 类........................................................................................118
ULDatabaseSchema 类.........................................................................................125
ULIndexSchema 类..............................................................................................129
ULPreparedStatement 类.......................................................................................131
ULPublicationSchema 类......................................................................................137
ULResultSet 类....................................................................................................138
ULResultSetSchema 类.........................................................................................145
ULSchemaUpgradeState 枚举...............................................................................146
ULSQLCode 枚举................................................................................................147
ULSQLType 枚举................................................................................................151
ULStreamErrorCode 枚举.....................................................................................152
ULStreamErrorContext 枚举.................................................................................156
ULStreamErrorID 枚举.........................................................................................157
ULStreamType 枚举.............................................................................................159
ULSyncParms 类..................................................................................................160
ULSyncResult 类.................................................................................................164
ULSyncState 枚举................................................................................................166
ULTable 类..........................................................................................................167
ULTableSchema 类..............................................................................................178
索引索引索引索引............................................................................................................. 181
v
关于本手册关于本手册关于本手册关于本手册
主题主题主题主题 本手册介绍 UltraLite for MobileVB.利用 UltraLite for MobileVB,用户
可以开发数据库应用程序,并将它们部署到运行 Palm OS 或
Windows CE 的手持式设备,移动设备或嵌入式设备.
读者读者读者读者 凡是希望利用 UltraLite 关系数据库良好的性能,资源效率,稳健性和安
全性进行数据存储和同步的 AppForge MobileVB 和 AppForge Crossfire
应用程序开发人员,都适于使用本手册.
SQL Anywhere Studio 文档
vi
SQL Anywhere Studio 文档文档文档文档
本手册是 SQL Anywhere 文档集的一部分.本节介绍文档集中包含的手
册及其使用方法.
SQL Anywhere
Studio 文档文档文档文档
我们以多种形式提供了 SQL Anywhere Studio 文档:联机文档,将所有
手册都合并到一个大帮助文件中;PDF 文件,每本手册有一个单独的
PDF 文件;以及可以购买到的印刷手册.这些文档包括以下手册:
SQL Anywhere Studio 介绍介绍介绍介绍 这本手册概述了 SQL Anywhere
Studio 数据库管理和同步技术.手册中提供了一些教程,分别介
绍 SQL Anywhere Studio 的各个组成部分.
SQL Anywhere Studio 的新功能的新功能的新功能的新功能 这本手册面向的读者是该软件
旧版本的用户.该手册列出了本产品此版本和以前版本的新功能,
并介绍了升级步骤.
Adaptive Server Anywhere 数据库管理指南数据库管理指南数据库管理指南数据库管理指南 这本手册介绍有关
运行,管理和配置数据库和数据库服务器等方面的内容.
Adaptive Server Anywhere SQL 用户指南用户指南用户指南用户指南 这本手册介绍如何设
计和创建数据库;如何导入,导出和修改数据;如何检索数据以
及如何建立存储过程和触发器.
Adaptive Server Anywhere SQL 参考手册参考手册参考手册参考手册 这本手册为 Adaptive
Server Anywhere 使用的 SQL 语言提供了一套完整的参考资料.还
介绍了 Adaptive Server Anywhere 系统表和过程.
Adaptive Server Anywhere 编程指南编程指南编程指南编程指南 这本手册介绍如何使用 C,
C++ 和 Java 编程语言建立和部署数据库应用程序.使用 Visual
Basic 和 PowerBuilder 等工具的用户可以使用这些工具提供的编程
接口.它还介绍了 Adaptive Server Anywhere ADO.NET 数据提供
程序.
Adaptive Server Anywhere SNMP Extension Agent 用户指南用户指南用户指南用户指南 这
本手册介绍如何配置 Adaptive Server Anywhere SNMP Extension
Agent,以使用 SNMP 管理应用程序来管理 Adaptive Server
Anywhere 数据库.
vii
Adaptive Server Anywhere 错误消息错误消息错误消息错误消息 这本手册提供了 Adaptive
Server Anywhere 错误消息及其诊断信息的完整列表.
SQL Anywhere Studio 安全指南安全指南安全指南安全指南 这本手册提供有关 Adaptive
Server Anywhere 数据库中的安全功能的信息.Adaptive Server
Anywhere 7.0 荣获美国政府授予的 TCSEC(可信计算机系统评估
标准)C2 安全等级.对于那些希望以相当于 C2 认证环境的方式
运行当前版本的 Adaptive Server Anywhere 的用户,他们可能会对
这本手册很感兴趣.
MobiLink 管理指南管理指南管理指南管理指南 这本手册介绍如何使用用于移动计算的
MobiLink 数据同步系统,该系统支持在单个 Oracle,Sybase,
Microsoft 或 IBM 数据库与多个 Adaptive Server Anywhere 或
UltraLite 数据库之间共享数据.
MobiLink 客户端客户端客户端客户端 这本手册介绍如何设置和同步 Adaptive Server
Anywhere 及 UltraLite 远程数据库.
MobiLink 服务器启动同步用户指南服务器启动同步用户指南服务器启动同步用户指南服务器启动同步用户指南 这本手册介绍 MobiLink 服
务器启动的同步,利用这项 MobiLink 功能,可从统一数据库启动
同步.
MobiLink 教程教程教程教程 这本手册提供多个教程来指导您如何设置和运行
MobiLink 应用程序.
QAnywhere 用户指南用户指南用户指南用户指南 这本手册介绍 MobiLink QAnywhere.该产
品是一个消息传送平台,支持开发和部署用于移动和无线客户端,
以及传统桌面和便携式客户端的消息传送应用程序.
iAnywhere Solutions ODBC 驱动程序驱动程序驱动程序驱动程序 这本手册介绍如何设置
ODBC 驱动程序以从 MobiLink 同步服务器和 Adaptive Server
Anywhere 远程数据访问功能访问除 Adaptive Server Anywhere 之外
的统一数据库.
SQL Remote 用户指南用户指南用户指南用户指南 这本手册介绍用于移动计算的
SQL Remote 数据复制系统的各个方面,此系统支持在单个
Adaptive Server Anywhere 或 Adaptive Server Enterprise 数据库与多
个 Adaptive Server Anywhere 数据库之间共享数据(使用电子邮件
或文件传输等间接链接).
SQL Anywhere Studio 文档
viii
SQL Anywhere Studio 帮助帮助帮助帮助 这本手册包含 Sybase Central,
Interactive SQL 和其它图形工具的上下文相关帮助.印刷文档集中
没有这本手册.
UltraLite 数据库用户指南数据库用户指南数据库用户指南数据库用户指南 这本手册面向的读者为所有 UltraLite
开发人员.它介绍了 UltraLite 数据库系统并提供了所有 UltraLite
编程接口的公共信息.
UltraLite 接口指南接口指南接口指南接口指南 对于各个 UltraLite 编程接口都单独提供了一
本手册.这些接口中有一些是作为 UltraLite 组件提供的,以便于
快速开发应用程序;另外一些是作为静态接口提供的,以便于 C,
C++ 和 Java 开发.
除本文档集外,PowerDesigner 和 InfoMaker 还有自己的联机文档.
文档格式文档格式文档格式文档格式SQL Anywhere Studio 按下列形式提供文档:
联机文档联机文档联机文档联机文档 这些联机文档包含完整的 SQL Anywhere Studio 文档,
其中包括手册和 SQL Anywhere 工具的上下文相关帮助.每次发布
产品的维护版本时都会对联机文档进行更新,因此联机文档是最
全和最新的文档来源.
若要在 Windows 操作系统中阅读联机文档,请选择 [开始] → [程
序] → [SQL Anywhere 9] → [联机手册].可以使用左窗格中的
HTML 帮助目录,索引和搜索功能,以及右窗格中的链接和菜单
来浏览联机文档.
若要在 UNIX 操作系统上阅读联机文档,请查看 SQL Anywhere 安
装目录下的 HTML 文档.
PDF 手册手册手册手册 以一组 PDF 文件的形式提供的 SQL Anywhere 手册,
可以使用 Adobe Acrobat Reader 进行查看.
可通过联机手册或 Windows [开始] 菜单来查看 PDF 手册.
印刷手册印刷手册印刷手册印刷手册 可从 Sybase 销售部门或 eShop 购买整套文档集,
Sybase 网上商店的网址为 http://eshop.sybase.com/eshop/
documentation.
ix
文档约定文档约定文档约定文档约定
本节列出了文档中使用的印刷和图形约定.
语法约定语法约定语法约定语法约定在 SQL 语法说明中,使用了以下约定:
关键字关键字关键字关键字 所有 SQL 关键字都以大写字母显示,就像下例中的
ALTER TABLE:
ALTER TABLE [ owner.]table-name
占位符占位符占位符占位符 对于必须替换为相应的标识符或表达式的项,其显示方
式就像下例中的 owner 和 table-name:
ALTER TABLE [ owner.]table-name
重复项重复项重复项重复项 对于重复项列表,只显示列表中的一个元素,后跟省略
号(三个句点),如以下示例中的 column-constraint:
ADD column-definition [ column-constraint, … ]
允许指定一个或多个列表元素.在此示例中,如果指定了多个元
素,则必须用逗号将它们隔开.
可选部分可选部分可选部分可选部分 语句的可选部分放在方括号内.
RELEASE SAVEPOINT [ savepoint-name ]
上面的方括号表示 savepoint-name 是可选的.不应键入方括号.
选项选项选项选项 如果不必选择项目列表的项目或者只能选中一个,则用垂
直条分隔这些项目,并将列表放在方括号内.
[ ASC | DESC ]
例如,可以从 ASC,DESC 中任选一个,或者一个也不选.不应
键入方括号.
二选一选项二选一选项二选一选项二选一选项 如果必须明确选择一个选项,则会将替换选项放在
大括号内,并用一条竖线分隔选项.
[ QUOTES { ON | OFF } ]
文档约定
x
如果使用了 QUOTES 选项,则必须提供 ON 和 OFF 两者之一.不
应键入方括号和大括号.
图标图标图标图标 本文档中使用了下列图标.
客户端应用程序.
数据库服务器,例如 Sybase Adaptive Server Anywhere.
数据库.在某些高水平的图中,可以使用此图标表示数据库和管
理数据库的数据库服务器.
复制或同步中间件.用于帮助在数据库之间共享数据.例如
MobiLink 同步服务器和 SQL Remote 消息代理.
xi
编程接口.
API
CustDB 示例数据库
xii
CustDB 示例数据库示例数据库示例数据库示例数据库
MobiLink 和 UltraLite 文档中的许多示例均使用 UltraLite 示例数据库.
UltraLite 示例数据库的参考数据库包含在名为 custdb.db 的文件中,位
于 SQL Anywhere 目录的 Samples\UltraLite\CustDB 子目录下.此外,还
提供了在此数据库上创建的一个完整应用程序.
该示例数据库是一家硬件供应商的销售状态数据库.其中包含该供应商
的客户,产品和销售人员信息.
下图显示 CustDB 数据库中的表以及这些表之间的相互关系.
ULOrderIDPool
pool_order_id integer
pool_emp_id integer
last_modified timestamp
ULCustomer
cust_id integer
cust_name varchar(30)
last_modified timestamp
ULProduct
prod_id integer
price integer
prod_name varchar(30)
ULOrder
order_id integer
cust_id integer
prod_id integer
emp_id integer
disc integer
quant integer
notes varchar(50)
status varchar(20)
last_modified timestamp
ULEmployee
emp_id integer
emp_name varchar(30)
last_download timestamp
ULEmpCust
emp_id integer
cust_id integer
action char(1)
last_modified timestamp
ULCustomerIDPool
pool_cust_id integer
pool_emp_id integer
last_modified timestamp
ULIdentifyEmployee
emp_id integercust_id = cust_id
emp_id = emp_id
emp_id = emp_id
emp_id = pool_emp_id
prod_id = prod_id
cust_id = cust_id
emp_id = pool_emp_id
xiii
查找详细信息并提供反馈查找详细信息并提供反馈查找详细信息并提供反馈查找详细信息并提供反馈
查找详细信息查找详细信息查找详细信息查找详细信息 附加信息和资源,包括交换代码,可从 iAnywhere Developer Network 获
得,网址是 http://www.ianywhere.com/developer/.
如果您有问题或是需要帮助,可将邮件发布到下面所列的 iAnywhere
Solutions 新闻组.
当您向这些新闻组发布邮件时,请提供问题的详细信息,包括 SQL
Anywhere Studio 版本的编译版本号.您可以在命令提示符下键入
dbeng9 -v 来得到这些信息.
新闻组位于 forums.sybase.com 新闻服务器上.这些新闻组包括:
sybase.public.sqlanywhere.general
sybase.public.sqlanywhere.linux
sybase.public.sqlanywhere.mobilink
sybase.public.sqlanywhere.product_futures_discussion
sybase.public.sqlanywhere.replication
sybase.public.sqlanywhere.ultralite
ianywhere.public.sqlanywhere.qanywhere
新闻组免责声明新闻组免责声明新闻组免责声明新闻组免责声明
iAnywhere Solutions 没有义务为其新闻组提供解决方案,信息或建议;
除提供系统操作员监控服务和确保新闻组的运行和可用性外,
iAnywhere Solutions 没有义务提供任何其它服务.
如果时间允许,iAnywhere Solutions 技术顾问和其他员工也会提供新闻
组服务.他们是在自愿的基础上提供帮助的,所以可能无法定期提供解
决方案和信息.他们可以提供多少帮助取决于他们的工作量.
反馈反馈反馈反馈我们欢迎您就本文档提出意见,建议或其它反馈信息.
查找详细信息并提供反馈
xiv
您可以将意见和建议通过电子邮件发送到 SQL Anywhere 文档小组,地
址为 iasdoc@ianywhere.com.虽然我们不回复该地址收到的电子邮件,
但我们会认真阅读所有建议.
此外,您还可以通过上面所列的新闻组就文档和软件提供反馈信息.
1
第1章
UltraLite for MobileVB 介绍介绍介绍介绍
关于本章关于本章关于本章关于本章本章介绍 UltraLite for MobileVB.它假定您熟悉『UltraLite 数据库用户
指南』 > 「欢迎使用 UltraLite」 中介绍的 UltraLite 的功能.
UltraLite for MobileVB 功能
2
UltraLite for MobileVB 功能功能功能功能
UltraLite for MobileVB 是一种用于移动设备的关系数据管理系统.它具
有业务应用程序所要求的性能,资源效率,稳健性和安全性.UltraLite
还提供与企业数据存储的同步.
系统要求和支持的平台系统要求和支持的平台系统要求和支持的平台系统要求和支持的平台
开发平台开发平台开发平台开发平台 要使用 UltraLite for MobileVB 开发应用程序,需要以下各项:
Microsoft Visual Basic .NET 或 Visual Basic 6.
您必须安装满足您使用的 AppForge MobileVB 或 AppForge
Crossfire 的版本要求的 Service Pack.有关详细信息,请参见
AppForge Web 站点.如果您使用的是 Visual Basic 6,建议您至少
安装 Service Pack 5.
AppForge Booster
要使用 UltraLite for MobileVB 部署应用程序,需要使用 AppForge
Booster.如果您没有 AppForge Booster,可从 www.appforge.com/
booster.html 获取.UltraLite 应用程序不需要 BoosterPlus.
AppForge MobileVB 版本 3.x 或更高版本,或 AppForge Crossfire.
兼容性兼容性兼容性兼容性
如果您使用的是 3.0 版之前的 MobileVB 版本并且要为 ARM 设备
上的 Windows CE 进行开发,则必须将 SQL Anywhere 目录下的
ultralite\UltraLiteForMobileVB\ce\arm\ulmvb9.dll 复制到该设备上的
\Program Files\AppForge 目录中.
有关详细信息,请参见 『SQL Anywhere Studio 介绍』 > 「UltraLite 开
发平台」.
目标平台目标平台目标平台目标平台UltraLite for MobileVB 支持以下目标平台:
第1章 UltraLite for MobileVB 介绍
3
Windows CE 3.0 和更高版本,使用 ARM 和 MIPS 处理器的 Pocket
PC.
Palm OS 版本 3.5 和更高版本.
有关详细信息,请参见 『SQL Anywhere Studio 介绍』 > 「UltraLite 目
标平台」.
UltraLite for MobileVB 体系结构
4
UltraLite for MobileVB 体系结构体系结构体系结构体系结构
UltraLite 编程接口提供一组对象,用于使用 UltraLite 数据库的数据操
作.下图描述了对象层次.
下面的列表介绍了一些比较常用的高层次对象.
ULDatabaseManager 管理与 UltraLite 数据库的连接.
有关详细信息,请参见 「ULDatabaseManager 类」 第118页.
ULConnectionParms 包含一组连接参数.
ULDatabaseManager
ULConnectionULDatabaseSchema
ULPublicationSchema
ULSyncParms
ULSyncResult
ULTable
ULTableSchema
ULIndexSchema
ULColumn
ULColumnSchema
ULPrepared Statement
ULResultSet
ULConnectionParmsULResultSetSchema
第1章 UltraLite for MobileVB 介绍
5
您可以使用连接参数控件并在 Visual Basic 属性表中指定连接参
数.
有关详细信息,请参见 「ULConnectionParms 类」 第114页.
ULConnection 用于表示数据库连接和控制事务.
有关详细信息,请参见 「ULConnection 类」 第101页.
ULPreparedStatement,,,,ULResultSet 和和和和 ULResultSetSchema
使用 SQL 管理数据库请求及其结果.
有关详细信息,请参见 「ULPreparedStatement 类」 第131页,
「ULResultSet 类」 第138页和 「ULResultSetSchema 类」 第145
页.
ULTable 和和和和 ULColumn 使用基于表的 API 管理数据.
有关详细信息,请参见 「ULTable 类」 第167页和 「ULColumn
类」 第93页.
ULSyncParms 和和和和 ULSyncResult 通过 MobiLink 同步服务器管理
同步.
有关使用 MobiLink 同步的详细信息,请参见 『MobiLink 客户
端』 > 「UltraLite 客户端」.
UltraLite for MobileVB 体系结构
6
7
第2章
了解了解了解了解 UltraLite for MobileVB 开发开发开发开发
关于本章关于本章关于本章关于本章本章介绍了如何使用 UltraLite for MobileVB 开发应用程序.
有关实践教程,请参见「教程:示例 UltraLite for MobileVB 应用程序」
第49页.
准备使用 UltraLite for MobileVB
8
准备使用准备使用准备使用准备使用 UltraLite for MobileVB
下面的过程说明了您在利用 UltraLite for MobileVB 构建应用程序之前必
须执行的步骤.
将将将将 UltraLite 添加到添加到添加到添加到 MobileVB 设计环境设计环境设计环境设计环境
要从 MobileVB 或 Crossfire 项目访问 UltraLite for MobileVB 控件,您必
须将 UltraLite for MobileVB 添加到设计环境.
添加添加添加添加 UltraLite 连接参数控件连接参数控件连接参数控件连接参数控件
1从 Visual Basic 菜单中选择 [Project] → [Components].
2单击 [Controls] 选项卡.
3向下滚动列表以选择 [UltraLite Connection Parameters 9.0].单击
[确定].
如果可用控件列表中没有这一项,请完成以下步骤:
关闭 MobileVB 并保存您的项目.
打开一个命令提示窗口,转到
ultralite\UltraLiteforMobileVB\win32,然后运行以下命令:
ulmvbreg -r
重新启动 MobileVB 并打开您的项目.
选择 [Project] → [Components].
选择 [UltraLite Connection Parameters 9.0].
工具栏中将增加一个数据库图标.要给您的表单添加
ULConnectionParms 对象,请双击此图标.
第2章 了解 UltraLite for MobileVB 开发
9
添加对添加对添加对添加对 UltraLite for
MobileVB 的引用的引用的引用的引用
安装好 SQL Anywhere Studio 后,UltraLite for MobileVB 就会自动添加
到所有新 MobileVB 项目.因此,通常并不需要手工给项目添加对
UltraLite for MobileVB 的引用.您偶尔也可能会需要手工添加引用,例
如,如果您在安装 SQL Anywhere Studio 之后安装 MobileVB.下面的过
程就是为这样的偶然情况提供的.
添加对添加对添加对添加对 UltraLite for MobileVB 的引用的引用的引用的引用
1从 Visual Basic 菜单中选择 [Project] → [References].
2如果可用引用的列表中包括了 [iAnywhere Solutions, UltraLite for
MobileVB 9.0],请选中它,然后单击 [OK].
如果可用引用的列表中没有 [iAnywhere Solutions, UltraLite for
MobileVB 9.0]:
打开一个命令提示窗口,转到
ultralite\UltraLiteforMobileVB\win32,然后运行以下命令:
ulmvbreg -r
选中 [iAnywhere Solutions, UltraLite for MobileVB 9.0],然
后单击 [OK].
将将将将 UltraLite 添加到添加到添加到添加到 Crossfire 设计环境设计环境设计环境设计环境
虽然 SQL Anywhere Studio 安装程序会自动将 UltraLite 添加到 Crossfire
设计环境,某些情况下,您需要将 UltraLite 手工添加到该环境.例如,
如果在安装 SQL Anywhere Studio 之后安装 Crossfire,就需要执行此过
程.
要了解是否需要将 UltraLite 添加到 Crossfire,请检查新 Crossfire 项目是
否包括对 iAnywhere.UltraLiteForAppForge 的引用.如果未包括,您需
要将 UltraLite 添加到环境.此外,请检查 ULConnectionParms 类是否显
示在工具箱的 AppForge 面板中.如果没有,则需要将 UltraLite 添加到
环境.
准备使用 UltraLite for MobileVB
10
将将将将 UltraLite 引用和控件添加到引用和控件添加到引用和控件添加到引用和控件添加到 Crossfire 项目项目项目项目
1向 Crossfire 注册 UltraLite for MobileVB.
a. 确保 Crossfire 已关闭.
b. 打开命令提示符,并转到 SQL Anywhere 安装目录的
ultralite\UltraLiteforMobileVB\win32 子目录,然后运行以下命
令:
ulmvbreg -r
c. 如果已升级了 MobileVB 项目,请从 Visual Basic.NET
Solution Explorer 中删除对 UltraLiteAFLib 的引用.
d. 添加对 iAnywhere.UltraLiteForAppForge.dll 的引用
i从 [Microsoft Development Environment] 菜单中选择
[Project] → [Add Reference],并浏览至 SQL Anywhere
安装目录的 ultralite\UltraLiteforMobileVB\win32 子目录.
ii选择 iAnywhere.UltraLiteForAppForge.dll,单击 [Open].
iii选择 [OK] 添加此引用.
4将 ULConnectionParms 控件添加到 AppForge 工具箱.
a. 在 [Microsoft Development Environment] 中,右击
[AppForge] 工具箱,然后选择 [Add/Remove Items].出现一
个对话框.
b. 单击 [COM Components] 选项卡.
c. 向下滚动至名为 [ULConnectionParms Class] 的条目.选中此
组件旁边的框,然后单击 [OK].
d. ULConnectionParms 控件即被添加到工具箱中.
第2章 了解 UltraLite for MobileVB 开发
11
使用数据库模式使用数据库模式使用数据库模式使用数据库模式
模式是数据库的结构.它是数据库中的表定义,索引定义和发布定义,
以及它们之间的所有关系的集合.
您通过创建 UltraLite 数据库模式文件来创建 UltraLite 数据库,并通过
在应用程序中调用一个函数来将该文件应用到数据库.
有关创建 UltraLite 数据库模式文件的信息,请参见
创建创建创建创建 UltraLite 数据库模式文件数据库模式文件数据库模式文件数据库模式文件
可以使用 UltraLite 模式管理器或 ulinit 实用程序来创建 UltraLite 模式文
件.
UltraLite 模式管理器模式管理器模式管理器模式管理器 UltraLite 模式管理器是一个图形实用程
序,用于创建和编辑 UltraLite 模式文件.
若要启动模式管理器,请选择 [开始] → [程序] →
[SQL Anywhere 9] → [UltraLite] → [UltraLite 模式管理器],或在
Windows 资源管理器中双击某个模式 (.usm) 文件.
有关使用 UltraLite 模式管理器的详细信息,请参见『UltraLite 数
据库用户指南』 > 「第 1 课:创建 UltraLite 数据库模式」.
ulinit 实用程序实用程序实用程序实用程序 如果您拥有 Adaptive Server Anywhere 数据库管
理系统,则可以使用 ulinit 命令行实用程序来生成 UltraLite 模式文
件.
有关使用 ulinit 实用程序的详细信息,请参见 『UltraLite 数据库用
户指南』 > 「ulinit 实用程序」.
更改数据库的模式更改数据库的模式更改数据库的模式更改数据库的模式
要更改现有数据库的模式,请用新模式创建一个模式文件,然后将此模
式应用于现有的数据库.在大多数情况下,不会发生数据丢失,但是,
如果删除了列,或者,如果将列的数据类型更改为不兼容的类型,就会
发生丢失数据的情况.
使用数据库模式
12
有关这些方法的详细信息,请参见 「ApplyFile 方法」 第126页和
「ApplyFileWithParms 方法」 第126页.
有关准备用于部署的新模式文件的信息,请参见『UltraLite 数据库用户
指南』 > 「升级 UltraLite 数据库模式」.
示例示例示例示例下面的代码应用了新模式文件.
Connection.Schema.ApplyFile("schema_file=\My
Documents\myschema.usm")
第2章 了解 UltraLite for MobileVB 开发
13
连接到连接到连接到连接到 UltraLite 数据库数据库数据库数据库
UltraLite 应用程序必须先连接到数据库,然后才能对数据库中的数据进
行操作.本节将介绍如何连接到 UltraLite 数据库.
使用使用使用使用 ULConnection
对象对象对象对象
下面这些 ULConnection 对象的属性控制着全局应用程序行为.
有关 ULConnection 对象的详细信息,请参见 「ULConnection 类」 第
101页.
提交行为提交行为提交行为提交行为 缺省情况下,UltraLite 应用程序处于 AutoCommit
(自动提交)模式.每个插入,更新或删除语句都被立即提交给数
据库.将 ULConnection.AutoCommit 设置为 false,以便将事务构
建到您的应用程序中.关闭 AutoCommit,然后直接执行提交,可
改善应用程序的性能.
有关详细信息,请参见 「Commit 方法」 第103页.
用户鉴定用户鉴定用户鉴定用户鉴定 您可以使用 GrantConnectTo 和 RevokeConnectFrom 方
法更改应用程序的用户 ID 缺省值 DBA 和口令缺省值 SQL.
有关详细信息,请参见「鉴定用户」 第38页.
同步同步同步同步 可以通过 ULConnection 对象访问控制同步的一组对象.
有关详细信息,请参见「同步数据」 第39页.
表表表表 UltraLite 表可以使用 ULConnection.GetTable 方法来访问.
有关详细信息,请参见 「GetTable 方法」 第104页.
连接到数据库连接到数据库连接到数据库连接到数据库您可以使用 ULConnectionParms 对象或连接字符串来连接数据库.通过
使用 ULConnectionParms 对象的方法,您可以轻松而准确地操作连接参
数.要利用使用连接字符串的方法,您需要成功创建一个连接字符串.
下面的过程使用 ULConnectionParms 对象来连接 UltraLite 数据库.
有关使用 ULConnectionParms 对象连接到 UltraLite 数据库的详细信息,
请参见 「CreateDatabaseWithParms 方法」 第120页和
「OpenConnectionWithParms 方法」 第123页.
连接到 UltraLite 数据库
14
使用使用使用使用 ULConnectionParms 连接连接连接连接 UltraLite 数据库数据库数据库数据库
1创建 ULDatabaseManager 对象.
您应当为每个应用程序仅创建一个 DatabaseManager 对象.该
对象位于对象层次结构的根部.因此,通常最好将
DatabaseManager 对象声明为应用程序范围内的全局对象或类级
变量.
'MobileVB
Public DatabaseMgr As ULDatabaseManager
Set DatabaseMgr = New ULDatabaseManager
'Crossfire
Public DatabaseMgr As New
UltraLiteAFLib.ULDatabaseManager
2声明 ULConnection 对象.
大多数应用程序使用一个连接与 UltraLite 数据库相连,并始终
保持该连接处于打开状态.因此,通常最好将 ULConnection 对
象声明为应用程序范围内的全局对象.
'MobileVB
Public Connection As New ULConnection
'Crossfire
Public Connection As
UltraLiteAFLib.ULDatabaseManager
3创建 ULConnectionParms 对象.
在 MobileVB 工具选项板上双击该 ULConnectionParms 对象.
您的表单上会出现一个 ULConnectionParms 对象.
4设置 ULConnectionParms 对象的必需属性.
在 ULConnectionParms 属性窗口中,指定数据库的位置,模式
文件这样的属性,并且为您的数据库指定用户名和口令.
第2章 了解 UltraLite for MobileVB 开发
15
使用以下属性时,对于 CreateDatabaseWithParms,您必须指定
一个模式文件;对于 OpenConnectionWithParms,您必须指定一
个数据库文件.有关其它属性的信息,请参见「属性」 第114
页.
5打开一个与数据库的连接.
CreateDatabaseWithParms 和 OpenConnectionWithParms 会返回
一个处于打开状态的连接作为 ULConnection 对象.每个方法都
会使用一个 ULConnectionParms 对象作为其参数.
下面的代码会尝试连接现有的数据库.如果数据库不存在,
OpenConnectionWithParms 方法会返回错误.这样就会导致
CreateDatabaseWithParms 使用指定的模式文件创建一个数据
库.
在 Crossfire 中,确保 ULConnectionParms 对象包括 GetOcx 方
法.
'MobileVB
On Error Resume Next
Set Connection =
DatabaseMgr.OpenConnectionWithParms( LoginParms)
If Err.Number ULSQLCode.ulSQLE_NOERROR Then
Set Connection =
DatabaseManager.CreateDatabaseWithParms( LoginParms
)
End If
'Crossfire
Try
Connection = _
DatabaseMgr.OpenConnectionWithParms( _
ULConnectionParms1.GetOcx)
关键字关键字关键字关键字 说明说明说明说明
DatabaseOnCE UltraLite 数据库在 Windows CE 上的路径和文件名.
DatabaseOnDesktop UltraLite 数据库在桌上型计算机上的路径和文件名
SchemaOnCE在 Windows CE 上的 UltraLite 模式的路径和文件名.
SchemaOnDesktop UltraLite 模式在桌上型计算机上的路径和文件名.
连接到 UltraLite 数据库
16
Catch
If Err.Number = _
UltraLiteAFLib.ULSQLCode.ulSQLE_ULTRALITE_DATABASE_
NOT_FOUND _
Then
Err.Clear()
Connection = _
DatabaseMgr.CreateDatabaseWithParms( _
ULConnectionParms1.GetOcx)
End Try
第2章 了解 UltraLite for MobileVB 开发
17
加密和模糊处理加密和模糊处理加密和模糊处理加密和模糊处理
您在使用 UltraLite for MobileVB 时,可以给 UltraLite 数据库加密或进行
模糊处理.
加密加密加密加密要创建加密数据库,请设置 ULConnectionParms.EncryptionKey 属性.
在您调用 CreateDatabaseWithParms 并传入 ConnectionParms 对象时,会
创建数据库并使用指定的密钥将其加密.
有关 EncryptionKey 属性的详细信息,请参见 『UltraLite 数据库用户指
南』 > 「Encryption Key 连接参数 」和 「ChangeEncryptionKey 方法」
第102页.
示例示例示例示例 您可以通过在 Connection 对象上指定新加密密钥来更改加密密钥.在本
示例中,apricot 是加密密钥.
Connection.ChangeEncryptionKey("apricot")
对数据库进行了加密后,与数据库的连接必须指定正确的加密密钥.否
则,连接将失败.
模糊处理模糊处理模糊处理模糊处理若要对数据库进行模糊处理,请指定 obfuscate=1 作为一个创建参数.
有关数据库加密的详细信息,请参见『UltraLite 数据库用户指南』 >
「加密 UltraLite 数据库」.
示例示例示例示例下面的代码会对新数据库进行模糊处理.
open_parms =
"ce_file=\tutorial.udb;ce_schema=\tutorial.usm;obfusca
te=1"
Set Connection = DatabaseManager.CreateDatabase(
open_parms )
使用动态 SQL 处理数据
18
使用动态使用动态使用动态使用动态 SQL 处理数据处理数据处理数据处理数据
UltraLite 应用程序可以使用动态 SQL 或 Table API 访问表数据.本节介
绍如何使用动态 SQL 访问数据.
有关 Table API 的信息,请参见「使用 Table API 处理数据」 第25页.
本节讲解如何使用动态 SQL 执行以下任务.
滚动浏览表中的行.
访问当前行中的值.
定位到表中的行
插入,删除和更新行.
本节不介绍 SQL 语言本身.有关动态 SQL 功能的信息,请参见
『UltraLite 数据库用户指南』 > 「动态 SQL」.
所需操作的顺序类似于任何 SQL 操作.有关概述,请参见『UltraLite
数据库用户指南』 > 「使用动态 SQL」.
数据操作数据操作数据操作数据操作::::INSERT,,,,UPDATE 和和和和 DELETE
使用 UltraLite 可以执行 SQL 数据操作语言操作.这些操作是使用
ExecuteStatement 方法(ULPreparedStatement 类的一个成员)执行的.
有关 ULPreparedStatement 类的详细信息,请参见
「ULPreparedStatement 类」 第131页.
在预准备语句中使用参数在预准备语句中使用参数在预准备语句中使用参数在预准备语句中使用参数
参数的占位符通过使用 字符提供.对于任何 INSERT,UPDATE 或
DELETE 语句,每个 都是根据其在预准备语句中的序号位置引用的.
例如,第一个 引用为 1,第二个引用为 2.
第2章 了解 UltraLite for MobileVB 开发
19
插入一行插入一行插入一行插入一行
1声明 ULPreparedStatement 对象.
'MobileVB
Dim PrepStmt As ULPreparedStatement
'Crossfire
Dimr PrepStmt As
UltraLiteAFLib.ULPreparedStatement
2给预准备语句对象指派 INSERT 语句.在以下代码中,
TableName 和 ColumnName 是表和列的名称.
'MobileVB
Set PrepStmt = Connection.PrepareStatement( _
"INSERT INTO TableName(ColumnName) VALUES (
)")
'Crossfire
PrepStmt = Connection.PrepareStatement( _
"INSERT INTO TableName(ColumnName) VALUES(
)")
3为该语句指派参数值.
Dim NewValue As String
NewValue = "Bob"
PrepStmt.SetStringParameter 1, NewValue
4执行该语句.
PrepStmt.ExecuteStatement
更新一行更新一行更新一行更新一行
1声明 ULPreparedStatement 对象.
Dim PrepStmt As ULPreparedStatement
2给预准备语句对象指派 UPDATE 语句.在以下代码中,
TableName 和 ColumnName 是表和列的名称.
使用动态 SQL 处理数据
20
Set PrepStmt = Connection.PrepareStatement( _
"UPDATE TableName SET ColumnName = WHERE ID =
")
3为该语句指派参数值.
Dim NewValue As String
NewValue = "Bob"
PrepStmt.SetParameter 1, NewValue
PrepStmt.SetParameter 2, "6"
4执行该语句
PrepStmt.ExecuteStatement
删除一行删除一行删除一行删除一行
1声明 ULPreparedStatement 对象.
'MobileVB
Dim PrepStmt As ULPreparedStatement
'Crossfire
Dim PrepStmt As UltraLiteAFLib.ULPreparedStatement
2给预准备语句对象指派 DELETE 语句.
'MobileVB
Set PrepStmt = Connection.PrepareStatement( _
"DELETE FROM customer WHERE ID = ")
'Crossfire
PrepStmt = Connection.PrepareStatement( _
"DELETE FROM customer WHERE ID = ")
3为该语句指派参数值.
Dim IDValue As String
IDValue = "6"
PrepStmt.SetParameter 1, IDValue
4执行该语句.
PrepStmt.ExecuteStatement
第2章 了解 UltraLite for MobileVB 开发
21
数据检索数据检索数据检索数据检索::::SELECT
当您执行 SELECT 语句时,ULPreparedStatement.ExecuteQuery 方法会
返回一个 ULResultSet 对象.
ULResultSet 类包含了用于在结果集中导航的方法.之后,要使用 方法
来访问值.
有关 ULResultSet 对象的详细信息,请参见 「ULResultSet 类」 第138
页.
示例示例示例示例在下面的代码中,通过 ULResultSet 来访问 SELECT 查询的结果.在第
一次指派时,ULResultSet 会放置在第一行之前.然后,调用
ULResultSet.MoveFirst 方法来导航到结果集中的第一条记录.
有关导航结果集的详细信息,请参见「使用动态 SQL 导航」 第23页.
'MobileVB
Dim MyResultSet As ULResultSet
Dim PrepStmt As ULPreparedStatement
PrepStmt = Connection.PrepareStatement( _
"SELECT ID, Name FROM customer")
MyResultSet = PrepStmt.ExecuteQuery
MyResultSet.MoveFirst
'Crossfire
Dim MyResultSet As UltraLiteAFLib.ULResultSet
Dim PrepStmt As UltraLiteAFLib.ULPreparedStatement
PrepStmt = Connection.PrepareStatement( _
"SELECT ID, Name FROM customer")
MyResultSet = PrepStmt.ExecuteQuery
MyResultSet.MoveFirst
UltraLite for MobileVB 为您提供的方法,可从 UltraLite 数据库中将特定
类型的数据获取到结果集中.MobileVB 不支持使用 Va r i a n t 数据类型,
因此,UltraLite for MobileVB 提供了函数来处理所有类型的数据.这些
方法中的每一种都是通过使用以下模板来调用的(其中的 Index 是您的
SELECT 语句中列名的序号位置):
MyResultSetName.MethodName( Index )
示例示例示例示例下面的代码演示了如何使用 GetString 方法来获取当前行的列值.
使用动态 SQL 处理数据
22
GetString 方法使用下面的语法(其中的 Index 是您的 SELECT 语句中
列名的序号位置).
MyResultSetName.GetString(Index)
MoveRelative( 0 ) 方法会从结果集中被调用,以刷新当前缓冲区的内
容,这样就可以包括任何数据修改的效果.
If MyResultSet.RowCount = 0 Then
lblID.Caption = ""
txtName.Text = ""
Else
lblID.Caption = MyResultSet.GetString(1)
txtName.Text = MyResultSet.GetString(2)
MyResultSet.MoveRelative(0)
End If
以下过程使用 SELECT 语句来检索数据库中的信息.查询的结果会被指
派给 ULResultSet 对象.
执行执行执行执行 SELECT 语句语句语句语句
1声明 ULPreparedStatement 对象.
'MobileVB
Dim PrepStmt As ULPreparedStatement
'Crossfire
Dim PrepStmt As UltraLiteAFLib.ULPreparedStatement
2给您的 ULPreparedStatement 对象指派预准备语句.在以下代码
中,TableName 和 ColumnName 是表和列的名称.
Set PrepStmt = Connection.PrepareStatement( _
"SELECT ColumnName FROM TableName")
3执行该查询.
在下面的代码中,一个 AFListBox 会捕获 SELECT 查询的结
果.
第2章 了解 UltraLite for MobileVB 开发
23
Dim MyResultSet As ULResultSet
Set MyResultSet = PrepStmt.ExecuteQuery
While MyResultSet.MoveNext
aflistbox.AddItem MyResultSet.GetString(1)
Wend
使用动态使用动态使用动态使用动态 SQL 导航导航导航导航
UltraLite for MobileVB 为您执行各种各样的导航任务提供了许多在结果
集中导航的方法.
使用下面这些 ULResultSet 对象的方法,您可以在结果集中导航:
MoveAfterLast 移至最后一行之后的位置.
MoveBeforeFirst 移至第一行之前的位置.
MoveFirst 移至第一行.
MoveLast 移至最后一行.
MoveNext 移至下一行.
MovePrevious 移至上一行.
MoveRelative 相对于当前行移动一定数量的行.正索引值在结
果集中向前移动,负索引值在结果集中向后移动,零不移动游
标.如果要重新填充行缓冲区,可以使用零.
示例示例示例示例下面的代码演示了如何使用 MoveFirst 方法在结果集中导航.
'MobileVB
Set PrepStmt = Connection.PrepareStatement( _
"SELECT ID, Name FROM customer")
Set MyResultSet = PrepStmt.ExecuteQuery
MyResultSet.MoveFirst
'Crossfire
PrepStmt = Connection.PrepareStatement( _
"SELECT ID, Name FROM customer")
MyResultSet = PrepStmt.ExecuteQuery
MyResultSet.MoveFirst
所有的 Move 方法都使用这同一种技术.
使用动态 SQL 处理数据
24
有关这些导航方法的详细信息,请参见 「ULResultSet 类」 第138页.
ULResultSet 模式属性模式属性模式属性模式属性
使用 ULResultSet.Schema 属性,您可以检索有关查询中列的信息.此
ULResultSetSchema 对象的属性包括 ColumnName,ColumnCount,
ColumnPrecision,ColumnScale,ColumnSize 和 ColumnSQLType.
示例示例示例示例下面的示例说明了如何使用 ULResultSet.Schema 在一个 MobileVB 网格
中显示模式信息.该示例假定您有一个名为 MyResultSet 的 ULResultSet
和一个名为 grdSchema 的 MobileVB 网格.
Dim i As Integer
For i = 1 To MyResultSet.Schema.ColumnCount
grdSchema.AddItem (MyResultSet.Schema.ColumnName(i)
_
& Chr(9) & MyResultSet.Schema.ColumnSQLType(i)), 0
Next i
grdSchema.AddItem _
("Column Name" & Chr(9) & "Column Type"), 0
第2章 了解 UltraLite for MobileVB 开发
25
使用使用使用使用 Table API 处理数据处理数据处理数据处理数据
UltraLite 应用程序可以使用动态 SQL 或 Table API 访问表数据.本节介
绍如何使用 Table API 访问数据.
有关动态 SQL 的信息,请参见「使用动态 SQL 处理数据」 第18页.
本节讲解如何使用 Table API 执行以下任务.
滚动浏览表中的行.
访问当前行中的值.
使用 Find 和 Lookup 方法来查找表中的行.
插入,删除和更新行.
使用使用使用使用 Table API 导航导航导航导航
UltraLite for MobileVB 为您执行各种各样的导航任务提供了许多在表中
导航的方法.
使用下面这些 ULTable 对象的方法,您可以在结果集中导航:
MoveAfterLast 移至最后一行之后的位置.
MoveBeforeFirst 移至第一行之前的位置.
MoveFirst 移至第一行.
MoveLast 移至最后一行.
MoveNext 移至下一行.
MovePrevious 移至上一行.
MoveRelative 相对于当前行移动一定数量的行.正索引值在表
中向前移动,负索引值在表中向后移动,零不移动游标.如果
要重新填充行缓冲区,可以使用零.
使用 Table API 处理数据
26
示例示例示例示例下面的代码打开 customer 表并在其行间滚动.然后,它显示一个消息
框,其中有各位客户的姓氏.
'MobileVB
Dim TCustomer as ULTable
Set TCustomer = Conn.GetTable("customer")
TCustomer.Open
While TCustomer.MoveNext
MsgBox TCustomer.Column( "lname" ).StringValue
Wend
'Crossfire
Dim TCustomer as UltraLiteAFLib.ULTable
Set TCustomer = Conn.GetTable("Customer")
TCustomer.Open
While TCustomer.MoveNext
MsgBox TCustomer.Column("LName").StringValue
Wend
示例示例示例示例
指定索引指定索引指定索引指定索引打开表对象时,应用程序可以访问表中的行.缺省情况下,这些行按主
键值顺序访问,但您可以指定索引,以便以某种顺序访问行.
示例示例示例示例下面的代码会移动到按 ix_name 索引排序的 customer 表的第一行.
'MobileVB
Set TCustomer = Conn.GetTable("customer")
TCustomer.Open "ix_name"
TCustomer.MoveFirst
'Crossfire
TCustomer = Conn.GetTable("customer")
TCustomer.Open "ix_name"
TCustomer.MoveFirst
访问当前行中的值访问当前行中的值访问当前行中的值访问当前行中的值
任何时候,ULTable 对象都位于以下位置之一.
在表的第一行之前.
在表的某一行上.
第2章 了解 UltraLite for MobileVB 开发
27
在表的最后一行之后.
如果 ULTable 对象放置在行上,您可以将 Column 方法与适合的属性一
起使用,为当前行获取该列的值.
示例示例示例示例下面的代码会从 tCustomer ULTable 对象中检索出三列的值,并在文本
框中显示这些值:
Dim colID, colFirstName, colLastName As ULColumn
Set colID = tCustomer.Column("ID")
Set colFirstName = tCustomer.Column("fname")
Set colLastName = tCustomer.Column("lname")
txtID.Text = colID.IntegerValue
txtFirstName.Text = colFirstName.StringValue
txtLastName.Text = colLastName.StringValue
您还可以使用 ULColumn 的属性来设置值.
colLastName.StringValue = "Kaminski"
通过给这些属性指派值,您不用变更数据库中数据的值.
即使是在该表的第一行之前或最后一行之后,您也可以给属性指派值.
但是,您不能从列中获取值.例如,下面的代码会生成一个错误.
' This code is incorrect
TCustomer.MoveBeforeFirst
id = TCustomer.Column( "ID" ).IntegerValue
要处理二进制数据,请使用 GetByteChunk 方法,而不要使用属性.
有关详细信息,请参见 『UltraLite for MobileVB 用户指南』 >
「GetByteChunk 方法」.
转换值转换值转换值转换值选择的 ULColumn 属性必须与要指派的 Visual Basic 数据类型匹配.
UltraLite 会自动转换不兼容的数据类型,这样,您就可以使用
StringValue 方法将整数值读入字符串变量,等等.
有关访问当前行的值的详细信息,请参见 「ULColumn 类」 第93页.
使用 Table API 处理数据
28
使用使用使用使用 find 和和和和 lookup 来搜索行来搜索行来搜索行来搜索行
UltraLite 具有几种用于处理数据的操作模式.其中,find 和 lookup 两
种模式用于搜索.ULTable 对象具有对应这些模式的方法,可用于定位
表中的特定行.
注意注意注意注意
使用 Find 方法和 Lookup 方法搜索的列必须在用于打开该表的索引中.
Find 方法方法方法方法 按照打开 ULTable 对象时指定的排序顺序,移动到第
一个与指定的搜索值完全匹配的行.
有关 find 方法的详细信息,请参见 「FindBegin 方法」 第169页.
Lookup 方法方法方法方法 按照打开 ULTable 对象时指定的排序顺序,移动到
匹配或大于指定的搜索值的第一行.
有关 lookup 方法的详细信息,请参见「LookupBackward 方法」
第172页.
搜索行搜索行搜索行搜索行
1进入 find 或 lookup 模式.
调用 FindBegin 方法或 LookupBegin 方法.例如,下面的代码
调用 ULTable.FindBegin.
tCustomer.FindBegin
2设置搜索值.
可以通过设置当前行中的值来完成设置.设置这些值会影响缓
冲区,而不影响数据库.例如,下面的代码将缓冲区中的姓氏
列设置为 Kaminski.
tCustomer.Column("lname").StringValue = "Kaminski"
如果是多列索引,第一列的值是必需的,但您可以忽略其它
列.
3搜索行.
第2章 了解 UltraLite for MobileVB 开发
29
使用正确的方法来执行搜索.例如,以下指令在当前索引中查
找与指定值完全匹配的第一行.
tCustomer.FindFirst
插入插入插入插入,,,,更新和删除行更新和删除行更新和删除行更新和删除行
UltraLite 每次向应用程序提供表中的一行.ULTable 对象有一个当前位
置,它可能在表中的某一行上,第一行前面或最后一行后面.
当您的应用程序改变位置时,UltraLite 会在缓冲区中制作一个该行的副
本.获取或设置值的任何操作都只影响该缓冲区中的数据副本,而不会
影响数据库中的数据.
示例示例示例示例下面的语句将缓冲区中 ID 列的值更改为 3.
colID.IntegerValue = 3
使用使用使用使用 UltraLite 模式模式模式模式UltraLite 模式确定缓冲区中的值将用于何种用途.除缺省模式外,
UltraLite 还具有以下四种操作模式.
插入模式插入模式插入模式插入模式 当调用 ULTable.Insert 方法时,缓冲区中的数据将作为
新行添加到表中.
更新模式更新模式更新模式更新模式 当调用 ULTable.Update 方法时,缓冲区中的数据将替
换当前行.
查找模式查找模式查找模式查找模式 在调用某一种 ULTable.Find 方法时,用于定位其值与
缓冲区中的数据完全匹配的行.
查寻模式查寻模式查寻模式查寻模式 在调用某一种 ULTable.Lookup 方法时,用于定位其值
匹配或大于缓冲区中的数据的行.
更新一行更新一行更新一行更新一行
1移动到想要更新的行.
您可以通过滚动浏览表来移动到某一行,也可以使用 Find 方法
和 Lookup 方法通过搜索来移动到该行.
2进入更新模式.
使用 Table API 处理数据
30
例如,以下指令进入表 tCustomer 的更新模式:
tCustomer.UpdateBegin
3为要更新的行设置新值.
例如,以下指令将新值设置为 Elizabeth.
ColFirstName.StringValue = "Elizabeth"
4执行更新.
tCustomer.Update
完成更新操作后,当前行就是刚才更新过的行.如果您更改了在打开
ULTable 对象时指定的索引中的列的值,则当前位置不确定.
缺省情况下,UltraLite 在 AutoCommit(自动提交)模式中运行,所以
更新会被立即应用于永久存储中的行.如果已经禁用了 AutoCommit 模
式,那么只有在执行提交操作后才会应用更新.有关详细信息,请参见
「UltraLite 中的事务处理」 第32页.
注意注意注意注意
不要更新行的主键:而应删除该行并添加新行.
插入行插入行插入行插入行插入行的步骤与更新行的步骤类似,区别在于不需要在执行插入操作前
定位到表中的任何特定行.行会按打开表时指定的索引自动排序.
插入一行插入一行插入一行插入一行
1进入插入模式.
例如,以下指令进入表 CustomerTable 的插入模式:
CustomerTable.InsertBegin
2设置新行的值.
如果没有设置其中一列的值,并且该列有缺省值,则使用该缺
省值.如果该列没有缺省值,则使用 NULL.如果该列不允许
NULL 值,则使用以下缺省值:
第2章 了解 UltraLite for MobileVB 开发
31
对于数字列,添加零.
对于字符列,添加空字符串.
若要显式设置值为 NULL,请使用 setNull 方法.
CustomerTable.Column("FName").StringValue = fname
CustomerTable.Column("LName").StringValue = lname
3执行该插入.
执行 Commit 后,插入的行就会永久保存到数据库中.在
AutoCommit 模式中,执行 Insert 方法本身就包含了 Commit 操
作.
CustomerTable.Insert
删除行删除行删除行删除行没有与插入或更新模式对应的删除模式.
以下过程删除一行.
删除一行删除一行删除一行删除一行
1移到想要删除的行.
2执行该删除.
tCustomer.Delete
处理处理处理处理 BLOB 数据数据数据数据
您可以使用 GetByteChunk 方法来为声明了 BINARY 或 LONG BINARY
的列读取 BLOB 数据.
有关详细信息,请参见 「GetByteChunk 方法」 第95页.
示例示例示例示例下面的代码演示了如何使用 ULColumn.GetByteChunk 方法来获取 BLOB
数据.
使用 Table API 处理数据
32
'MobileVB
Dim table as ULTable
Dim col As ULColumn
Dim data(1 to 1024) As Byte
Dim data_fit As Boolean
Dim size As Long
Set table = Conn.GetTable("image")
table.Open
size = 1024
Set col = table.Column("img_data")
data_fit = col.GetByteChunk(VarPtr(data(1)), size)
If data_fit Then
'No truncation
Else
'data truncated at 1024
End if
table.Close
'Crossfire
Dim table as ULTable
Dim col As ULColumn
Dim data(1 to 1024) As Byte
Dim data_fit As Boolean
Dim size As Long
Set table = Conn.GetTable("image")
table.Open
size = 1024
Set col = table.Column("img_data")
' The data argument must be a local variable
data_fit = col.GetByteChunk(data, size)
If data_fit Then
'No truncation
Else
'data truncated at 1024
End if
table.Close
UltraLite 中的事务处理中的事务处理中的事务处理中的事务处理
UltraLite 提供了事务处理机制以确保数据库中数据的完整性.事务是一
个逻辑工作单元.或者会执行整个事务,或者不执行事务中的任何语
句.
第2章 了解 UltraLite for MobileVB 开发
33
在缺省情况下,UltraLite 在 AutoCommit 模式中运行.在 AutoCommit
模式中,每一次插入,更新或删除都会作为单独的事务来执行.一旦操
作完成后,也就完成了对数据库的更改.
如果设置 ULConnection.AutoCommit 属性为 false,那么可以使用多语句
事务.例如,如果您的应用程序在两个帐户之间转移资金,从源帐户减
除和添加到目标帐户就构成了一次事务.如果 AutoCommit 设置为
false,您必须执行 ULConnection.Commit 语句来完成事务,并对数据库
进行永久更改,或者,您可以执行 ULConnection.Rollback 语句来取消
事务的所有操作.关闭 AutoCommit 可以改善性能.
注意注意注意注意
同步会导致 Commit,即使您将 AutoCommit 设置为 False 也是如此.
访问模式信息
34
访问模式信息访问模式信息访问模式信息访问模式信息
每个 ULConnection,ULTable 和 ULColumn 对象都包含一个模式属性.
这些模式对象提供了有关数据库中表,列,索引和发布的信息.
注意注意注意注意
您无法通过 API 修改模式,只能检索关于模式的信息.
有关修改模式的信息,请参见「更改数据库的模式」 第11页.
ULDatabaseSchema 数据库中表的数量和名称,以及日期和时间
格式等全局属性.
若要获取 ULDatabaseSchema 对象,请访问 ULConnection.Schema
属性.
ULTableSchema 表中的列的数量和名称,以及该表的索引集合.
若要获取 ULTableSchema 对象,请访问 ULTable.Schema 属性.
ULColumnSchema 有关某个列的信息,包括其缺省值,名称以
及它是否是自动增量.
若要获取 ULColumnSchema 对象,请访问 ULColumn.Schema 属
性.
ULIndexSchema 关于索引中的列的信息.由于索引没有与其直
接关联的数据,所以没有单独的 ULIndex 对象,而只有一个
ULIndexSchema 对象.
ULIndexSchema 对象作为使用 ULTableSchema.GetIndex 方法访问
的 .
ULPublicationSchema 发布中包含的表和列的编号和名称.发布
也是只由模式组成的,所以有 ULPublicationSchema 对象而没有
ULPublication 对象.
ULPublicationSchema 对象作为使用
ULDatabaseSchema.GetPublicationSchema 方法访问的 .
第2章 了解 UltraLite for MobileVB 开发
35
ULResultSetSchema 结果集中列的编号和名称.
使用 ULPreparedStatement.ResultSetSchema 属性可以访问
ULResultSetSchema 对象.
处理错误
36
处理错误处理错误处理错误处理错误
在正常操作中,UltraLite for MobileVB 可以引发错误.错误会表示为
SQLCODE 值,用负数来表明错误的具体种类.
有关 UltraLite for MobileVB 所引发错误代码的列表,请参见
「ULSQLCode 枚举」 第147页.
UltraLite for MobileVB 只从 ULDatabaseManager 对象和 ULConnection
对象中引发错误.下面这些 ULDatabaseManager 的方法可以引发错误.
CreateDatabase
CreateDatabaseWithParms
DropDatabase
DropDatabaseWithParms
OpenConnection
OpenConnectionWithParms
UltraLite for MobileVB 中的所有其它错误和异常都会通过 ULConnection
对象来传送.
有关从 ULDatabaseManager 对象和 ULConnection 对象访问错误号的详
细信息,请参见 「ULConnection 类」 第101页和
「ULDatabaseManager 类」 第118页.
您可以使用标准的 MobileVB 或 Crossfire 错误处理功能来处理错误.如
果 UltraLite 对象是错误的源,Err 对象就会被指派一个 ULSQLCode 编
号.ULSQLCode 是指明错误具体种类的负数.ULSQLCode 枚举提供
了一组与这些值关联的说明性常量.
有关详细信息,请参见 「ULSQLCode 枚举」 第147页.
若要使用 MobileVB 环境中的自动语句完成功能,需要创建类似下面的
错误处理函数:
第2章 了解 UltraLite for MobileVB 开发
37
'MobileVB
Public Function GetError() As ULSQLCode
GetError = Err.Number
End Function
然后,您使用 GetError 函数可以很方便地访问 UltraLite 错误.
鉴定用户
38
鉴定用户鉴定用户鉴定用户鉴定用户
必须从现有连接添加新用户.由于所有 UltraLite 数据库都是用缺省用户
ID 和口令(分别为 DBA 和 SQL)创建的,因此必须首先以该初始用
户的身份进行连接.
不能更改用户 ID:只能添加一个用户,然后删除现有用户.每个
UltraLite 数据库最多允许使用四个用户 ID.
有关授予或撤消连接权限的详细信息,请参见 「GrantConnectTo 方法」
第105页和 「RevokeConnectFrom 方法」 第109页.
添加用户或更改现有用户的口令添加用户或更改现有用户的口令添加用户或更改现有用户的口令添加用户或更改现有用户的口令
1以具有 DBA 权限的用户身份连接到数据库.
2授予用户具有所需口令的连接权限.
conn.GrantConnectTo("Robert", "newPassword")
删除现有用户删除现有用户删除现有用户删除现有用户
1以具有 DBA 权限的用户身份连接到数据库.
2像下面这样撤消用户的连接权限.
conn.RevokeConnectFrom("Robert")
第2章 了解 UltraLite for MobileVB 开发
39
同步数据同步数据同步数据同步数据
您可以将 UltraLite 应用程序与中央数据库同步.同步要求有 MobiLink
同步服务器和相应的许可.
本节简要介绍同步,并说明 UltraLite for MobileVB 用户特别感兴趣的一
些功能.有关同步的详细说明,请参见 『MobiLink 客户端』 >
「UltraLite 客户端」.
您还可以参见 CustDB 示例应用程序中的同步工作示例.此示例在
『UltraLite for MobileVB 用户指南』 > 「教程:示例 UltraLite for
MobileVB 应用程序」中介绍
UltraLite for MobileVB 支持 TCP/IP,HTTP 和 HTTPS 同步.同步由
UltraLite 应用程序启动.在所有情况中,您都可以使用 ULConnection
对象的方法和属性来控制同步.
注意注意注意注意
若要使用加密同步 (HTTPS) 进行同步或要使用 TCP/IP 加密,则必须获
取单独授予许可的安全性选件.要订购该选件,请参见 SQL Anywhere
Studio 程序包中的卡片或者访问 http://www.sybase.com/
detail id=1015780.
有关详细信息,请参见『SQL Anywhere Studio 介绍』 > 「欢迎使用
SQL Anywhere Studio」.
通过通过通过通过 TCP/IP 或或或或 HTTP 进行同步进行同步进行同步进行同步
1准备同步信息.
为 ULConnection.SyncParms 对象的必需的属性指派值.
有关应该设置的属性和值的信息,请参见 『MobiLink 客户端』
> 「UltraLite 客户端」.
2执行同步.
调用 ULConnection.Synchronize 方法.
同步数据
40
添加同步模板添加同步模板添加同步模板添加同步模板
UltraLite for MobileVB 提供了一个模板表单,该表单可用于监控同步会
话的状态.此表单有一个对于 Palm OS 和 Pocket PC 都可以使用的版
本.您可以在您的应用程序中使用这些模板,可以自定义它们,或者可
以只是检查它们以了解 UltraLite 同步事件如何工作.
向应用程序添加此模板的方法取决于您使用的是 MobileVB 还是
Crossfire.
向应用程序向应用程序向应用程序向应用程序 (MobileVB) 添加同步模板添加同步模板添加同步模板添加同步模板
1从 [Project] 菜单中,选择 [Add Form].
第2章 了解 UltraLite for MobileVB 开发
41
2选择 [UltraLite for MobileVB Sync Form (Windows CE)] 或
[UltraLite for MobileVB Sync Form (Palm)].
3单击 [打开].该表单的副本就会添加到您的应用程序.
向应用程序向应用程序向应用程序向应用程序 (Crossfire) 添加同步模板添加同步模板添加同步模板添加同步模板
1从 [Project] 菜单中,选择 [Add New Item].
2从 [Local Project Items] → [Ultralite_Crossfire Forms] 中,根据应
用程序选择 [UltraLite Crossfire 9 Sync Form for CE],[Palm] 或
[PalmHires].
3单击 [打开].该表单的副本就会添加到您的应用程序.
编写代码来使用同步表单编写代码来使用同步表单编写代码来使用同步表单编写代码来使用同步表单
调用 InitSyncForm 函数,向它传递您的 ULConnection 对象.每次同步
之前都必须执行这一步.
示例示例示例示例下面的代码使用一个名为 Form_Sync 的同步状态表单以及一个名为
Connection 的 ULConnection 对象.
Form_Sync.InitSyncForm Connection
Connection.Synchronize
每当您的应用程序进行同步时,该同步状态表单都会出现.随着同步的
进行,您的最终用户可以观察到进度条和字节数.当同步完成时,该表
单会关闭.[Cancel] 按钮的作用是让 UltraLite 取消当前同步.
有关更多详细信息,请参见『UltraLite for MobileVB 用户指南』 > 「教
程:示例 UltraLite for MobileVB 应用程序」.
部署 UltraLite 应用程序
42
部署部署部署部署 UltraLite 应用程序应用程序应用程序应用程序
您在完成了应用程序或需要测试应用程序时,需要将它部署到一个设备
上.这一节概要介绍了将 UltraLite 应用程序部署到设备所需的步骤.
将将将将 UltraLite for MobileVB 应用程序部署到应用程序部署到应用程序部署到应用程序部署到 Windows CE
要将 UltraLite 应用程序部署到 Windows CE 上,必须执行以下步骤:
部署应用程序和 UltraLite 组件.
a. 配置应用程序设置.
从 MobileVB 菜单中选择 [MobileVB Settings].出现一
个对话框.
在左窗格中,选择 [Dependencies],然后单击 [User
Dependencies] 选项卡.
单击 [Add] 按钮,并选择
c:\tutorial\mvb\tutCustomer.usm.这向 MobileVB 指明该
文件应当包含在部署中.
选择左窗格中的 [PocketPC Settings] 项.
输入设备安装路径:\tutorial\mvb.
单击 [确定] 关闭对话框.
b. 从 MobileVB 菜单中选择 [Deploy to Device],然后选择
PocketPC 设备.如果对话框提示您是否要保存该项目,请选
择 [Yes].
c. 如果您运行的是 MobileVB 3.0 或更高版本,UltraLite 组件将
自动与您的应用程序一起部署.
如果您使用的是 MobileVB 的早期版本,则需要将 UltraLite 组
件复制到该设备上.将文件 ulmvb9.dll 复制到设备上的
\Program Files\AppForge 目录下.该文件位于 SQL Anywhere 9
安装目录的以下平台特定子目录中:
第2章 了解 UltraLite for MobileVB 开发
43
\UltraLite\UltraLiteForMobileVB\ce\arm 或
\UltraLite\UltraLiteForMobileVB\ce\mips.该步骤对于每个设备只
需执行一次.
部署 UltraLite 数据库或模式的初始副本.
在许多情况下,只需部署 UltraLite 模式文件就足够了.UltraLite
将在第一次尝试连接时使用该模式创建数据库文件.然后,您就
可以使用同步加载数据的初始副本.您可以利用随 Palm Desktop
Organizer 软件提供的 Install Tool 按标准方式部署 .prc 文件.
必须将数据库或模式文件放在应用程序可以找到的位置.
Database On CE 和 Schema On CE 连接参数定义该位置.
请参见 『UltraLite 数据库用户指南』 > 「Database On CE 连接参
数」和 『UltraLite 数据库用户指南』 > 「Schema On CE 连接参
数 」.
为 ActiveSync 部署 MobiLink 提供程序.
只有在应用程序使用 ActiveSync 进行同步的情况下,才需要执行
这一步.
有关说明,请参见『MobiLink 客户端』 > 「安装 ActiveSync 的
MobiLink 提供程序」
将将将将 UltraLite for MobileVB 应用程序部署到应用程序部署到应用程序部署到应用程序部署到 Palm OS
要将 UltraLite 应用程序部署到 Palm OS 设备上,您必须执行以下步骤:
部署应用程序和 UltraLite 组件.
a. 配置应用程序设置.
从 MobileVB 菜单中选择 [MobileVB Settings].出现一
个对话框.
在左窗格中,选择 [Dependencies],然后单击 [User
Dependencies] 选项卡.
部署 UltraLite 应用程序
44
单击 [Add] 按钮,然后选择
c:\tutorial\mvb\tutCustomer.pdb.这向 MobileVB 指明该
文件应当包含在部署中.
在左窗格中选择 [Palm OS Settings] 项,然后输入您的
应用程序的创建者 ID.选择一个有效的 HotSync 名
称.单击 [确定] 关闭对话框.
b. 从 MobileVB 菜单中选择 [Deploy to Device],然后选择
Palm OS 设备.如果对话框提示您是否要保存该项目,请选择
[Yes].
c. 如果您运行的是 MobileVB 3.0 或更高版本,UltraLite 组件将
自动与您的应用程序一起部署.
如果您使用的是 MobileVB 的早期版本,则需要将 UltraLite 组
件复制到该设备上.将文件 ulmvb9.prc 复制到设备上的
\Program Files\AppForge 目录下.该文件位于您的 SQL
Anywhere 安装位置下的 \UltraLite\UltraLiteForMobileVB\palm\68k
子目录中.该步骤对于每个设备只需执行一次.
部署 UltraLite 数据库或模式的初始副本.
在许多情况下,只需部署 UltraLite 模式文件就足够了.UltraLite
将在第一次尝试连接时使用该模式创建数据库文件.然后,您就
可以使用同步加载数据的初始副本.
您可以创建 .prc 文件,以便利用任何 UltraLite 实用程序(包括 [
模式管理器],ulxml 和 ulinit)部署到 Palm OS.
您必须使用正确的创建者 ID 提供一个模式或数据库,以便您的应
用程序能够找到它.Database On Palm 和 Schema On Palm 连接参
数使用该创建者 ID 来查找模式或数据库.
请参见 『UltraLite 数据库用户指南』 > 「Database On Palm 连接
参数」和 『UltraLite 数据库用户指南』 > 「Schema On Palm 连接
参数 」.有关使用虚拟文件系统的信息,请参见 『UltraLite 数据
库用户指南』 > 「VFS On Palm 参数 」.
部署用于 HotSync 的 MobiLink 同步管道.
第2章 了解 UltraLite for MobileVB 开发
45
只有在应用程序使用 HotSync 进行同步的情况下,才需要执行这
一步.
有关说明,请参见『MobiLink 客户端』 > 「部署 MobiLink
HotSync 管道」.
在 UltraLite Palm 应用程序中维护状态
46
在在在在 UltraLite Palm 应用程序中维护状态应用程序中维护状态应用程序中维护状态应用程序中维护状态
Palm OS 设备一次只运行一个应用程序.但是,当用户从您的应用程序
切换到另一个应用程序,然后又返回您的应用程序时,常见的情况是让
应用程序看起来只是在该用户使用其它应用程序时暂停了.为了维护这
种情形,应用程序必须在用户切换到另一应用程序时保存其内部状态.
当再次启动该应用程序时,它必须恢复其内部状态.
在数据库应用程序中保存和恢复状态会很困难,因为该应用程序必须重
新打开结果集并在那些结果集中重新定位应用程序.UltraLite 为您提供
了一种保存和恢复应用程序状态的方法.
结果集上游标的状态会自动维护.使用基于表的 API 的 MobileVB 应用
程序为 ULTable 对象的 Open 方法中的永久名称参数提供了一个值.
了解如何维护状态了解如何维护状态了解如何维护状态了解如何维护状态
对于每一个要保留其状态的表而言,UltraLite 都会为该表存储一个名
称,以及恢复该表状态所需要的足够信息.与该表关联的名称可以是
(但并非必需是)该表的名称.该名称被称为永久名称永久名称永久名称永久名称.
UltraLite 应用程序同时可以打开同一个表的多个实例.在这种情况下,
该表名不是唯一的.例如,下面的代码(使用 MobileVB)将同一个表
打开两次:
' MobileVB
Set table1 = Connection.GetTable( "ULCustomer" )
table1.Open "", "customer1"
' operations here
Set table2 = Connection.GetTable( "ULCustomer" )
table2.Open "", "customer2"
在打开表时,应用程序可以选择提供一个永久名称作为参数.如果该永
久名称的状态已经保存,该表就会打开并定位到正确的行.如果没有,
该表就会打开并定位到第一行之前.
当应用程序终止时,它可能会也可能不会显式关闭打开的表并关闭连
接.如果它不关闭打开的表,那么,UltraLite 就会记录每个得到了永久
名称的打开的表的当前行.没有永久名称的表会关闭.
第2章 了解 UltraLite for MobileVB 开发
47
假定 Connection 对象是 ULConnection 类型,而且数据库中存在一个名
为 ULCustomer 的表.
'MobileVB
Dim table As ULTable
Set table = Connection.GetTable( "ULCustomer" )
table.Open "", "customer"
第二行代码获取表示 ULCustomer 表的表对象.该表尚未打开以供读取
或写入.
在 Open 调用(代码的第三行)中,第一个参数是空字符串,它表明数
据将按主键排序.第二个参数是要指派给该表的永久名称.如果在此表
仍处于打开状态时该应用程序终止,状态 PDB 会将 customer 与
ULCustomer 表关联,并保存当前位置.
永久名称注释永久名称注释永久名称注释永久名称注释 如果永久名称为空,UltraLite 不存储此表的状态信息,或者会在
打开该表时尝试查询它.
如果您不需要存储表的状态,请提供一个空永久名称.该状态以
后在状态数据库中不会被查询.
HotSync 同步不影响您打开的表的状态.当用户按设备上的
HotSync 按钮时,操作系统会关闭该应用程序,关闭方法与它在任
何其它应用程序启动时关闭该应用程序一样.这样,打开的表的
状态就会记录在状态 PDB 中,当用户返回到该应用程序以及重新
打开这些表时,该用户会被定位到所需的行上.如果作为同步的
一部分已将该行删除,该用户会被定位到下一行(如果该行是最
后一行,则定位到最后一行之后).
关闭了自动提交的应用程序在终止时可能会有未提交的事务.
UltraLite 会维护这些事务,这样,它们在应用程序重新启动时不
会丢失.
如果 UltraLite 在状态 PDB 中找到了与您提供的永久名称匹配的
表,它会检查该表和索引与记录位置信息时所使用的表和索引是
否相同.如果不相同,对 Open 的调用就会失败.
使用永久名称是 Palm OS 所独有的特性.如果您为 Windows CE
创建 UltraLite for MobileVB 应用程序,它们不使用永久名称.
Windows CE 上的应用程序在运行时更类似于它们在桌面计算机上
运行.
在 UltraLite Palm 应用程序中维护状态
48
示例示例示例示例::::使用永久名称来维护状态信息使用永久名称来维护状态信息使用永久名称来维护状态信息使用永久名称来维护状态信息
PersistentName 示例程序是一个比较简单的程序,它说明了如何使用维
护的状态信息.其下载网址为 http://www.sybase.com/detail id=1022734.
下面是该示例的一些要点:
'MobileVB
CustomerTable.Open
AddRow "John", "Doe", "Atlanta"
AddRow "Mary", "Smith", "Toronto"
AddRow "Jane", "Anderson", "New York"
AddRow "Margaret", "Billington", "Vancouver"
AddRow "Fred", "Jones", "London"
AddRow "Jack", "Frost", "Dublin"
AddRow "David", "Reiser", "Berlin"
AddRow "Kathy", "Stevens", "Waterloo"
AddRow "Rebecca", "Gable", "Paris"
AddRow "George", "Jenkins", "Madrid"
CustomerTable.Close
此代码给 ULCustomer 表添加了十行.它在表上调用 Open,但在此情况
下,不提供永久名称,因为我们对于维护表中的位置不感兴趣.由于该
代码只插入数据,所以表中的位置是不相关的.
下面的行打开 ULCustomer 表,按主键给行排序并指派 [customer] 作为
永久名称.
CustomerTable.Open "" , "customer"
如果以前运行了该应用程序,则在状态数据库中为 [customer] 完成了查
询.否则,[customer] 会与此表关联.
customer 表会在应用程序运行期间保持打开状态.如果用户切换到另一
应用程序,UltraLite 会记录表中用户离开时的位置.当应用程序再次启
动时,该表会打开,并且 UltraLite 会确定该位置信息对于永久名称为
[customer] 的表是已知的,所以它会将用户定位回该行.
当用户单击 [End] 按钮时,customer 表和连接会关闭,然后应用程序消
失.这样就相当于放弃 customer 表的任何状态信息,所以,当该应用程
序重新启动时,该用户会被定位到第一行.
49
第3章
教程教程教程教程::::示例示例示例示例 UltraLite for MobileVB 应用程序应用程序应用程序应用程序
关于本章关于本章关于本章关于本章本章提供的教程可指导您完成为 PocketPC 或 Palm OS 设备构建
UltraLite for MobileVB 应用程序的过程.
简介
50
简介简介简介简介
本教程指导您完成使用表 API 构建 UltraLite for MobileVB 应用程序的过
程.在本教程结束时,您的 Windows CE 设备上将有一个与中央数据库
同步的应用程序和小型数据库.
有关表 API 的详细信息,请参见 『UltraLite for MobileVB 用户指南』 >
「UltraLite for MobileVB API 参考」.
计时计时计时计时 如果您复制并粘贴代码,此教程需要大约 30 分钟时间.如果您自己输
入代码,则会大大延长所需时间.
能力和经验能力和经验能力和经验能力和经验本教程假定:
您的计算机上安装了 MobileVB 和 Microsoft Visual Basic 6
您能够编写,测试 MobileVB 应用程序,还能排除它的故障
您知道如何使用 UltraLite 模式管理器创建 UltraLite 模式
有关详细信息,请参见 『UltraLite 数据库用户指南』 >
「UltraLite 模式管理器」.
您已经安装了 AppForge Booster
如果您没有 Booster,可以从 http://www.appforge.com/booster.html
下载.
注意注意注意注意
用户无需 SQL Anywhere Studio 就可以完成本教程的大部分内容.本教
程的同步操作部分需要 SQL Anywhere Studio.
目标目标目标目标 本教程的目标是让您掌握和熟悉 UltraLite 应用程序的开发过程.
第3章 教程:示例 UltraLite for MobileVB 应用程序
51
第第第第 1 课课课课::::创建项目体系结构创建项目体系结构创建项目体系结构创建项目体系结构
第一个过程介绍了如何创建 UltraLite 数据库模式.数据库模式是对数据
库的描述.它描述数据库中的表,索引,键和发布,以及它们之间的所
有关系.
有关数据库模式的详细信息,请参见「创建 UltraLite 数据库模式文件」
第11页.
创建创建创建创建 UltraLite 数据库模式数据库模式数据库模式数据库模式
1为本教程创建一个目录.
本教程假定该目录为 c:\Tutorial\mvb.如果您创建其他名称的目
录,请在教程中自始至终使用该目录,而不要使用
c:\Tutorial\mvb 目录.
2使用 UltraLite 模式管理器创建数据库模式.
有关创建数据库模式的详细信息,请参见 『UltraLite 数据库用
户指南』 > 「第 1 课:创建 UltraLite 数据库模式」.
模式文件名模式文件名模式文件名模式文件名 tutcustomer.usm
表名表名表名表名 customer
customer 中的列中的列中的列中的列
主键主键主键主键 升序 id
列名
数据类型
(大小)
列是否允许
NULL 值
缺省值
id integer否自动增量
fname char(15)否无
lname char(20)否无
city char(20)是无
phone char(12)是555-1234
第 1 课:创建项目体系结构
52
3如果您使用的是 Palm 设备,请使用 Syb3 作为创建者 ID,将该
模式导出到 Palm.
a. 从 [文件] 菜单选择 [导出用于 Palm 的模式].
b. 输入 Syb3 作为创建者 ID.
c. 在您的教程目录中将该文件保存为 tutcustomer.pdb.
关于关于关于关于 Palm 创建者创建者创建者创建者 ID 的说明的说明的说明的说明
Palm 创建者 ID 是由 Palm 指派给用户的.在创建示例应用程序时,
您可以使用 Syb3 作为创建者 ID.但是,如果您创建商业应用程
序,则应当使用自己的创建者 ID.
创建创建创建创建 MobileVB 项目项目项目项目
下面的过程为您的应用程序创建 MobileVB 项目,并添加对 UltraLite for
MobileVB 控件的引用.
在 Visual Basic 环境左侧的 Visual Basic 工具栏上,除了出现标准 Visual
Basic 工具外,还将出现 MobileVB 工具.
添加添加添加添加 UltraLite 连接参数控件连接参数控件连接参数控件连接参数控件
1启动 MobileVB.
选择 [开始] → [程序] → [AppForge MobileVB] → [Start
MobileVB].
MobileVB Project Manager 即会出现.
2从 Visual Basic 菜单中选择 [Project] → [Components].
3单击 [Controls] 选项卡.
第3章 教程:示例 UltraLite for MobileVB 应用程序
53
4向下滚动列表以选择 [UltraLite Connection Parameters 9.0].单击
[确定].
如果可用控件列表中没有这一项,请完成以下步骤:
关闭 MobileVB 并保存您的项目.
打开一个命令提示窗口,转到
ultralite\UltraLiteforMobileVB\win32,然后运行以下命令:
ulmvbreg -r
重新启动 MobileVB 并打开您的项目.
选择 [Project] → [Components].
选择 [UltraLite Connection Parameters 9.0].
工具栏中将增加一个数据库图标.双击此图标即可将
ULConnectionParms 对象添加到窗体.
创建对创建对创建对创建对 UltraLite for MobileVB 控件的引用控件的引用控件的引用控件的引用
1启动 MobileVB.
选择 [开始] → [程序] → [AppForge MobileVB] → [Start
MobileVB] .
MobileVB Project Manager 即会出现.
2创建一个新项目.
单击 [New Project].当出现 [Design Target] 提示时,选择相应的
目标.本教程提供适用于 Palm OS 和 PocketPC 设备的说明.
3创建对 UltraLite for MobileVB 的引用.
选择 [Project] → [References].
选择 [iAnywhere Solutions],UltraLite for MobileVB 9.0 然
后单击 [OK].
第 1 课:创建项目体系结构
54
如果可用引用的列表中没有该控件,请退出 MobileVB,
然后运行以下命令.
ulmvbreg -r
4为该项目命名.
单击 [Project] → [MobileVBProject1 Properties]
在 [Project Name] 下,键入 [UltraLiteTutorial].这就是将
在设备上显示的应用程序名称.
单击 [确定].
5保存该项目:
选择 [File] → [Save Project].
将窗体另存为 c:\tutorial\mvb\Tutorial.frm.
将项目另存为 c:\tutorial\mvb\Tutorial.vbp.
第3章 教程:示例 UltraLite for MobileVB 应用程序
55
第第第第 2 课课课课::::创建窗体创建窗体创建窗体创建窗体
完成「第 1 课:创建项目体系结构」 第51页的步骤之后,项目中应显
示一个窗体.下面的过程使用该窗体创建用户界面.本示例使用标签作
为输出,使用文本框和按钮作为输入,这与实际应用程序类似.
向项目中添加控件向项目中添加控件向项目中添加控件向项目中添加控件
1向窗体添加下表指定的控件和属性:
类型类型类型类型名称名称名称名称标题或文本标题或文本标题或文本标题或文本
AFTextBoxtxtfname
AFTextBoxtxtlname
AFTextBoxtxtcity
AFTextBoxtxtphone
AFLabellblID
AFButtonbtnInsert Insert
AFButtonbtnUpdate Update
AFButtonbtnDelete Delete
AFButtonbtnNext Next
AFButtonbtnPrevious Previous
AFButtonbtnSync Synchronize
第 2 课:创建窗体
56
2检查应用程序.
选择 [MobileVB] → [Compile and Validate].
您的窗体看起来应该与下面的图形类似:
AFButtonbtnDone End
类型类型类型类型名称名称名称名称标题或文本标题或文本标题或文本标题或文本
第3章 教程:示例 UltraLite for MobileVB 应用程序
57
第第第第 3 课课课课::::编写示例代码编写示例代码编写示例代码编写示例代码
本课指导您完成编写 Visual Basic 代码来连接数据库,在数据库内导航
以及操作数据库中的数据.
本课还将指导您如何让自己的应用程序与 Adaptive Server Anywhere 数
据库保持同步.本课的这一部分属可选内容,它需要 SQL Anywhere
Studio.
编写用于连接到数据库的代码编写用于连接到数据库的代码编写用于连接到数据库的代码编写用于连接到数据库的代码
在此应用程序中,您在 Form_Load 事件过程中连接到数据库.您也可
以使用常规模块连接到数据库.
本示例使用 ULConnectionParms 对象连接到数据库.您也可以使用连接
字符串.
有关参考信息,请参见 「ULConnectionParms 类」 第114页.
编写用于连接编写用于连接编写用于连接编写用于连接 UltraLite 数据库的代码数据库的代码数据库的代码数据库的代码::::
1双击窗体,打开 [Code] 窗口.
2声明所需的 UltraLite 对象.
在窗体的 declarations 区域中输入以下代码:
Public DatabaseMgr As New ULDatabaseManager
Public Connection As ULConnection
Public CustomerTable As ULTable
3指定连接参数.
将 ULConnectionParms 对象添加到名为
ULConnectionParms1 的窗体中.ULConnectionParms 控件
是工具箱上的数据库图标.
在 [Properties] 窗口中,指定 ULConnectionParms 属性.
如果您在部署到 Windows CE 设备,请指定下列属性:
第 3 课:编写示例代码
58
如果您要部署到 Palm 设备,请指定下列属性:
4在 Form_Load 事件中添加用于连接到数据库的代码.
数据库管理器尝试打开由 ULConnectionParms1 对象指定的到数
据库的连接.如果该数据库不存在,它将使用给定模式创建新
数据库.
Sub Form_Load()
' enable error handling
On Error Resume Next
' try to connect to an existing database
Set Connection = _
DatabaseMgr.OpenConnectionWithParms( _
ULConnectionParms1)
' if the database does not exist, create one
If Err.Number = ULSQLCode.ulSQLE_NOERROR Then
MsgBox "Connected to an existing database"
ElseIf Err.Number = _
ULSQLCode.ulSQLE_ULTRALITE_DATABASE_NOT_FOUND
_
Then
Err.Clear
Set Connection = _
属性值
DatabaseOnDesktop c:\tutorial\mvb\tutCustomer.udb
DatabaseOnCE \tutorial\mvb\tutCustomer.udb
SchemaOnDesktop c:\tutorial\mvb\tutCustomer.usm
SchemaOnCE \tutorial\mvb\tutCustomer.usm
属性值
DatabaseOnDesktop c:\tutorial\mvb\tutCustomer.pdb
DatabaseOnPalm Syb3
SchemaOnDesktop c:\tutorial\mvb\tutCustomer.usm
SchemaOnPalm tutCustomer
第3章 教程:示例 UltraLite for MobileVB 应用程序
59
DatabaseMgr.CreateDatabaseWithParms( _
ULConnectionParms1)
If Err.Number = ULSQLCode.ulSQLE_NOERROR _
Then
MsgBox "Connected to a new database"
Else
MsgBox Err.Description
End If
Else
MsgBox Err.Description
End If
End Sub
5单击 [End] 按钮时,请添加用于结束应用程序和关闭连接的代
码.
Sub btnDone_Click()
Connection.Close
End
End Sub
6运行应用程序.
选择 [Run] → [Execute].
在初始消息框出现后,将加载窗体.
要终止应用程序,请单击右上角的End.
编写用于导航和数据操作的代码编写用于导航和数据操作的代码编写用于导航和数据操作的代码编写用于导航和数据操作的代码
以下过程实现数据操作和导航.
打开表打开表打开表打开表::::
1编写代码以便初始化表并移到第一行.
此代码将数据库中的 customer 表指派给 CustomerTable 变量.
调用 Open 将打开该表,这样就可以读取或操作表数据.它也
将应用程序定位在表的第一行之前.
第 3 课:编写示例代码
60
紧接在 End Sub 指令的前面,将以下代码添加到 Form_Load 事
件中:
Set CustomerTable = Connection.GetTable("customer")
CustomerTable.Open
If Err.Number ULSQLCode.ulSQLE_NOERROR Then
MsgBox Err.Description
End If
2创建一个名为 DisplayCurrentRow 的新过程并实现该过程,如下
所示.
如果表中没有行,下面的过程将导致应用程序显示空控件.否
则,它显示存储在数据库的当前行的每一列中的值.
Private Sub DisplayCurrentRow()
If CustomerTable.RowCount = 0 Then
txtFname.Text = ""
txtLname.Text = ""
txtCity.Text = ""
txtPhone.Text = ""
lblID.Caption = ""
Else
lblID.Caption = _
CustomerTable.Column("Id").StringValue
txtFname.Text = _
CustomerTable.Column("Fname").StringValue
txtLname.Text = _
CustomerTable.Column("Lname").StringValue
If CustomerTable.Column ("City").IsNull Then
txtCity.text =""
Else
txtCity.Text = _
CustomerTable.Column("City").StringValue
End If
If CustomerTable.Column("Phone").IsNull Then
txtphone.Text = ""
Else
txtphone.Text = _
CustomerTable.Column("Phone").StringValue
End If
End If
End Sub
3从 Form_Activate 过程调用 DisplayCurrentRow.此调用确保在
应用程序启动时字段得到更新.
第3章 教程:示例 UltraLite for MobileVB 应用程序
61
Private Sub Form_Activate()
DisplayCurrentRow
End Sub
在表中插入行在表中插入行在表中插入行在表中插入行::::
1编写用于实现 [Insert] 按钮的代码.
在下面的过程中,调用 InsertBegin 可以将应用程序置于插入模
式下,并将行内的所有值设为其缺省值.例如,ID 列收到下一
个自动增量值.设置列值,然后插入新行.
在窗体中添以下过程.
Private Sub btnInsert_Click()
Dim fname As String
Dim lname As String
Dim city As String
Dim phone As String
fname = txtFname.Text
lname = txtLname.Text
city = txtCity.Text
phone = txtPhone.Text
On Error GoTo InsertError
CustomerTable.InsertBegin
CustomerTable.Column("Fname").StringValue = _
fname
CustomerTable.Column("Lname").StringValue = _
lname
If Len(city) > 0 Then
CustomerTable.Column("City").StringValue =
_
city
End If
If Len(phone) > 0 Then
CustomerTable.Column("Phone").StringValue =
_
phone
End If
CustomerTable.Insert
CustomerTable.MoveLast
DisplayCurrentRow
第 3 课:编写示例代码
62
Exit Sub
InsertError:
MsgBox "Error: " & CStr(Err.Description)
End Sub
2运行应用程序.
在初始消息框出现后,将显示窗体.
3在数据库中插入两行.
在第一个文本框中输入名字 [Jane],在第二个框中输入姓
[Doe].单击 [Insert].
即会在表中添加包含这些值的行.应用程序移动到表中的
最后一行并显示该行.标签显示 UltraLite 指派给该行的
ID 列的自动增量值.
在第一个文本框中输入名字 [John],在第二个框中输入姓
[Smith].单击 [Insert].
4单击 [End] 以结束程序运行.
在表中的行之间移动在表中的行之间移动在表中的行之间移动在表中的行之间移动::::
1编写用于实现 [Next] 和 [Previous] 按钮的代码.
在窗体中添加以下过程.
Private Sub btnNext_Click()
If Not CustomerTable.MoveNext Then
CustomerTable.MoveLast
End If
DisplayCurrentRow
End Sub
Private Sub btnPrevious_Click()
If Not CustomerTable.MovePrevious Then
CustomerTable.MoveFirst
End If
DisplayCurrentRow
End Sub
2运行应用程序.
第3章 教程:示例 UltraLite for MobileVB 应用程序
63
当窗体第一次显示时,由于当前位置是在第一行的前面,所以
控件是空的.
在窗体显示后,单击 [Next] 和 [Previous] 按钮在表中的行之间
移动.
更新和删除表中的行更新和删除表中的行更新和删除表中的行更新和删除表中的行::::
1编写用于实现 [Update] 按钮的代码.
在下面的代码中,调用 UpdateBegin 可以将应用程序置于更新
模式下.更新列值,然后通过调用 Update 来更新行本身.
在窗体中添以下过程.
Private Sub btnUpdate_Click()
Dim fname As String
Dim lname As String
Dim city As String
Dim phone As String
fname = txtFname.Text
lname = txtLname.Text
city = txtCity.Text
phone = txtPhone.Text
On Error GoTo UpdateError
CustomerTable.UpdateBegin
CustomerTable.Column("Fname").StringValue =
fname
CustomerTable.Column("Lname").StringValue =
lname
If Len(city) > 0 Then
CustomerTable.Column("City").StringValue =
city
Else
CustomerTable.Column("City").SetNull
End If
If Len(phone) > 0 Then
CustomerTable.Column("Phone").StringValue =
phone
End If
CustomerTable.Update
DisplayCurrentRow
第 3 课:编写示例代码
64
Exit Sub
UpdateError:
MsgBox "Error: " & CStr(Err.Description)
End Sub
2编写用于实现 [Delete] 按钮的代码.
在下面的代码中,调用 Delete 可以删除应用程序所定位的当前
行.
在窗体中添以下过程.
Private Sub btnDelete_Click()
If CustomerTable.RowCount = 0 Then
Exit Sub
End If
CustomerTable.Delete
CustomerTable.MoveRelative 0
DisplayCurrentRow
End Sub
3运行应用程序.
编写同步代码编写同步代码编写同步代码编写同步代码
下面的过程实现同步.同步需要 SQL Anywhere Studio.教程的这一部
分属可选内容.
编写用于同步按钮的代码编写用于同步按钮的代码编写用于同步按钮的代码编写用于同步按钮的代码::::
编写用于实现 [Synchronize] 按钮的代码.
在下面的代码中,ULSyncParms 对象包含同步参数.例如,
ULSyncParms.UserName 属性指定在 MobiLink 启动时,它将添
加新用户.ULSyncParms.SendColumnNames 属性指定列名称将
被发送到 MobiLink,以便生成上载和下载脚本.
在窗体中添以下过程.
第3章 教程:示例 UltraLite for MobileVB 应用程序
65
Private Sub btnSync_Click()
With Connection.SyncParms
.UserName = "afsample"
.Stream = ULStreamType.ulTCPIP
.Version = "ul_default"
.SendColumnNames = True
End With
Connection.Synchronize
DisplayCurrentRow
End Sub
同步应用程序同步应用程序同步应用程序同步应用程序
ASA 9.0 Sample 数据库中 Customer 表的某些列与 UltraLite 数据库中
customer 表的某些列匹配.下面的过程将您的数据库与 ASA 9.0
Sample 数据库同步.
同步应用程序同步应用程序同步应用程序同步应用程序
1在命令提示符下,运行以下命令行来启动 MobiLink 同步服务
器.
dbmlsrv9 -c "dsn=ASA 9.0 Sample" -v+ -zu+ -za
-zu+ 和 -za 命令行选项提供自动添加用户和生成同步脚本的功
能.有关这些选项的详细信息,请参见 『MobiLink 管理指南』
> 「MobiLink 同步服务器选项」.
2启动 UltraLite 应用程序.
3删除表中的所有行.
表中的所有行将被上载到 ASA 9.0 Sample 数据库中的 Customer
表.
4同步应用程序.
单击 [Synchronize].
MobiLink 同步服务器窗口显示同步进度.
第 3 课:编写示例代码
66
5在同步完成后,单击 [Next] 和 [Previous] 按钮可在表中的行之
间移动.
第3章 教程:示例 UltraLite for MobileVB 应用程序
67
第第第第 4 课课课课::::在设备上部署在设备上部署在设备上部署在设备上部署
下面的过程将您的应用程序部署到 Palm OS 或 PocketPC 设备.
部署到部署到部署到部署到 PocketPC 设备设备设备设备
1配置应用程序设置.
从 MobileVB 菜单中选择 [MobileVB Settings].出现一个
对话框.
在左窗格中,选择 [Dependencies],然后单击 [User
Dependencies] 选项卡.
单击 [Add] 按钮,并选择 c:\tutorial\mvb\tutCustomer.usm.
这向 MobileVB 指明该文件应当包含在部署中.
选择左窗格中的 [PocketPC Settings] 项.
输入设备安装路径:\tutorial\mvb.
单击 [确定] 关闭对话框.
2从 MobileVB 菜单中选择 [Deploy to Device],然后选择
PocketPC 设备.如果对话框提示您是否要保存该项目,请选择
[Yes].
3如果您运行的 MobileVB 版本早于 3.0 版,则还需要将 UltraLite
控件复制到设备上.
将文件 ulmvb9.dll 复制到设备上的 \Program Files\AppForge 目录
下.该文件位于 SQL Anywhere 9 安装目录的以下平台特定子目
录中:\UltraLite\UltraLiteForMobileVB\ce\arm 或
\UltraLite\UltraLiteForMobileVB\ce\mips.该步骤对于每个设备只
需执行一次.
4在您的设备上,点按 [Start] → [Programs].
5点按 [UltraLiteTutorial],以运行应用程序.
第 4 课:在设备上部署
68
部署到部署到部署到部署到 Palm 设备设备设备设备::::
1配置应用程序设置.
从 MobileVB 菜单中选择 [MobileVB Settings].
在出现的对话框中,选择左窗格的 [Dependencies],然后
单击 [User Dependencies] 选项卡.
单击 [Add] 按钮,并选择 [c:\tutorial\mvb\tutCustomer.pdb].
这向 MobileVB 指明该文件应当包含在部署中.
选择左窗格中的 [Palm OS Settings] 项,然后输入 [Syb3]
作为创建者 ID.选择一个有效的 HotSync 名称.
单击 [确定] 关闭对话框.
2从 MobileVB 菜单中选择 [Deploy to Device],然后选择 Palm OS
设备.如果对话框提示您是否要保存该项目,请选择 [Yes].
3对您的设备执行 HotSync,确保将应用程序发送到该设备中.
在 HotSync 过程完成后,应用程序将在设备上进行解压缩.
4在设备上单击 [Home],然后选择 [UltraLiteTutorial],以运行应
用程序.
第3章 教程:示例 UltraLite for MobileVB 应用程序
69
小结小结小结小结
学到的知识学到的知识学到的知识学到的知识 在本教程中,您学习了以下内容:
创建一个数据库模式
创建一个 UltraLite for MobileVB 应用程序
将一个 UltraLite 远程数据库与一个 Adaptive Server Anywhere 统一
数据库同步
掌握了开发 UltraLite for MobileVB 应用程序的过程
更多示例更多示例更多示例更多示例 您可以在 iAnywhere CodeXchange 找到更多示例应用程序和实用程序.
小结
70
71
第4章
教程教程教程教程::::AppForge Crossfire 的示例应用程序的示例应用程序的示例应用程序的示例应用程序
关于本章关于本章关于本章关于本章本教程指导您完成使用 AppForge Crossfire 构建用于 PocketPC 或 Palm
OS 设备的 UltraLite 应用程序的过程.
简介
72
简介简介简介简介
本教程介绍如何使用 AppForge Crossfire 构建 UltraLite 应用程序.在本
教程结束时,您的 Windows CE 设备上将有一个与中央统一数据库同步
的应用程序和小型数据库.
有关表 API 的详细信息,请参见 『UltraLite for MobileVB 用户指南』 >
「UltraLite for MobileVB API 参考」.
计时计时计时计时 如果您复制并粘贴代码,此教程需要大约 30 分钟时间.如果您自己输
入代码,则会大大延长所需时间.
前提条件前提条件前提条件前提条件 本教程假定您已经在计算机上安装了 AppForge Crossfire.还假定您基本
上熟悉 Crossfire 开发.
本教程还假定您知道如何使用 UltraLite 模式管理器创建 UltraLite 模式.
有关详细信息,请参见 『UltraLite 数据库用户指南』 > 「UltraLite 模
式管理器」.
注意注意注意注意
用户无需 SQL Anywhere Studio 即可完成本教程的大部分内容.本教程
的同步操作部分需要 SQL Anywhere Studio.
第4章 教程:AppForge Crossfire 的示例应用程序
73
第第第第 1 课课课课::::创建项目体系结构创建项目体系结构创建项目体系结构创建项目体系结构
第一个过程介绍了如何创建 UltraLite 数据库模式.数据库模式是对数据
库的描述.它描述数据库中的表,索引,键和发布,以及它们之间的所
有关系.
有关数据库模式的详细信息,请参见「创建 UltraLite 数据库模式文件」
第11页.
创建创建创建创建 UltraLite 数据库模式数据库模式数据库模式数据库模式
1为本教程创建一个目录.
本教程假定该目录为 c:\Tutorial\crossfire.如果您创建具有不同
的目录名的目录,请在整个教程中都使用该目录.
2使用 UltraLite 模式管理器创建数据库模式.
有关创建数据库模式的详细信息,请参见 『UltraLite 数据库用
户指南』 > 「第 1 课:创建 UltraLite 数据库模式」.
模式文件名模式文件名模式文件名模式文件名 tutcustomer.usm
表名表名表名表名 Customer
customer 中的列中的列中的列中的列
在同步应用程序中,通常为主键选择全局自动增量或 UUID
数据类型.这里选择自动增量方法以使本教程进行得更快.
列名
数据类型
(大小)
列是否允许
NULL 值
缺省值
ID integer否自动增量
FName char(15)否无
LName char(20)否无
City char(20)是无
Phone char(12)是555-1234
第 1 课:创建项目体系结构
74
主键主键主键主键 升序 ID
3保存数据库模式.
如果开发用于 Windows 或 Windows CE 的应用程序,请选择
[File] → [Save],并在教程目录中选择 tutcustomer.usm 作为文件
名.
如果开发用于 Palm OS 的应用程序:
a. 从 [文件] 菜单选择 [导出用于 Palm 的模式].
b. 输入 Syb3 作为创建者 ID.
c. 在您的教程目录中将该文件保存为 tutcustomer.pdb.
有关有关有关有关 Palm 创建者创建者创建者创建者 ID 的说明的说明的说明的说明
创建者 ID 是由 Palm 指派给您的.在创建示例应用程序时,您可以
使用 Syb3 作为创建者 ID.但是,如果您创建商业应用程序,则应
当使用自己的创建者 ID.
创建创建创建创建 Crossfire 新项目新项目新项目新项目
下面的过程为应用程序创建一个 AppForge Crossfire 项目,并添加对
UltraLite 控件的引用.
在开发环境左侧的工具栏上,除了出现标准 Visual Basic 工具外,还将
出现 AppForge 工具.
创建用于创建用于创建用于创建用于 UltraLite 的的的的 Crossfire 项目项目项目项目
1启动 Crossfire.
a. 选择 [开始] → [程序] → [AppForge] → [Crossfire].
Crossfire Project Manager 即会出现.
b. 单击 [New Project].Microsoft 开发环境的 [New Project] 对
话框即会出现.
第4章 教程:AppForge Crossfire 的示例应用程序
75
c. 在 [Project Types] 窗口中打开 [Visual Basic Projects] 文件夹.
d. 在 [Templates] 窗口中,单击 [Crossfire Application].
e. 以 CrossfireApp1 作为项目名,并输入教程目录
(c:\tutorial\crossfire) 作为位置.单击 [OK].
f. 选择部署平台并单击 [OK] 创建项目.
此时应在 Microsoft Visual Basic .NET 开发环境中看到 Crossfire
窗体.
2如果没有出现 Toolbox,则选择 [View] → [Toolbox] 将其打开.
打开 [AppForge] 选项卡.
3向下滚动 AppForge 控件列表到 ULConnectionParms Class 并双
击.
疑难解答疑难解答疑难解答疑难解答如果 Crossfire 项目不包含对 iAnywhere.UltraLiteForAppForge.dll 的引
用,且如果 ULConnectionParms 类未显示在 AppForge 控件列表中,则
需要在 Crossfire 中注册 UltraLite.例如,如果在安装 SQL Anywhere 后
安装 Crossfire,就可能发生这种情况.
有关向 Crossfire 添加 UltraLite 的说明,请参见「将 UltraLite 添加到
Crossfire 设计环境」 第9页.
下一步做什么下一步做什么下一步做什么下一步做什么您现在拥有一个 UltraLite 数据库模式和一个窗体中含有 UltraLite 控件
的 Crossfire 项目.下一步是创建应用程序界面.
第 2 课:创建应用程序界面
76
第第第第 2 课课课课::::创建应用程序界面创建应用程序界面创建应用程序界面创建应用程序界面
下面的过程使用该窗体创建用户界面.本示例使用标签作为输出,使用
文本框和按钮作为输入,这与实际应用程序类似.
向项目中添加控件向项目中添加控件向项目中添加控件向项目中添加控件
1从 AppForge 控件中将下列控件添加到窗体中:
2检查应用程序.
选择 [Build] → [Build Solution].
窗体看起来应如下所示:
类型类型类型类型名称名称名称名称标题或文本标题或文本标题或文本标题或文本
TextBox txtFName
TextBox txtLName
TextBox txtcity
TextBox txtphone
Label lblID
Button btnInsert Insert
Button btnUpdate Update
Button btnDelete Delete
Button btnNext Next
Button btnPrevious Previous
Button btnSync Synchronize
Button btnDone End
第4章 教程:AppForge Crossfire 的示例应用程序
77
第 3 课:编写示例代码
78
第第第第 3 课课课课::::编写示例代码编写示例代码编写示例代码编写示例代码
本课指导您完成编写用于连接到数据库,浏览数据库和操作数据库数据
的代码的过程.
本课还将指导您如何让自己的应用程序与 Adaptive Server Anywhere 数
据库保持同步.本课的这一部分属可选内容,它需要 SQL Anywhere
Studio.
编写用于连接到数据库的代码编写用于连接到数据库的代码编写用于连接到数据库的代码编写用于连接到数据库的代码
在此应用程序中,您在 Form_Load 事件过程中连接到数据库.您也可
以使用常规模块连接到数据库.
此示例使用一个 ULConnectionParms 对象来连接 tutcustomer 数据库.
编写用于连接编写用于连接编写用于连接编写用于连接 UltraLite 数据库的代码数据库的代码数据库的代码数据库的代码
1双击窗体,打开 [Code] 窗口.
2声明所需的 UltraLite 对象.
紧接行 Public Class CrossfireForm1 Inherits
System.Windows.Forms.Form 之后输入下面的代码.
Public DatabaseMgr As New
UltraLiteAFLib.ULDatabaseManager
Public Connection As UltraLiteAFLib.ULConnection
Public CustomerTable As UltraLiteAFLib.ULTable
3指定连接参数.
选择 ULConnectionParm1 控件.在 [Properties] 窗口中,
指定此数据库的连接属性.
如果您在部署到 Windows CE 设备,请指定下列属性:
第4章 教程:AppForge Crossfire 的示例应用程序
79
如果您要部署到 Palm 设备,请指定下列属性:
4在 Form Load 事件中,将代码添加到数据库的连接中.
进行连接的标准方法是尝试打开由连接字符串指定的数据库连
接.如果该数据库不存在,它将使用模式创建新数据库.在
Crossfire 中,必须将 .GetOcx 添加到 ULConnectionParms1 对象
中.
Private Sub CrossfireForm1_Load(ByVal sender As
System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load
Try
Connection = _
DatabaseMgr.OpenConnectionWithParms( _
ULConnectionParms1.GetOcx)
' if the database does not exist, create one
MsgBox("Connected to an existing database")
Catch
If Err.Number = _
UltraLiteAFLib.ULSQLCode.ulSQLE_ULTRALITE_DATABASE_
NOT_FOUND _
属性值
DatabaseOnCE \tutorial\crossfire\tutCustomer.udb
DatabaseOnDesktop c:\tutorial\crossfire\tutCustomer.udb
SchemaOnCE \tutorial\crossfire\tutCustomer.usm
SchemaOnDesktop c:\tutorial\crossfire\tutCustomer.usm
属性值
DatabaseOnDesktop c:\tutorial\crossfire\tutCustomer.pdb
DatabaseOnPalm Syb3
SchemaOnDesktop c:\tutorial\crossfire\tutCustomer.usm
SchemaOnPalm tutCustomer
第 3 课:编写示例代码
80
Then
Err.Clear()
Connection = _
DatabaseMgr.CreateDatabaseWithParms( _
ULConnectionParms1.GetOcx)
If Err.Number =
UltraLiteAFLib.ULSQLCode.ulSQLE_NOERROR _
Then
MsgBox("Connected to a new database")
Else
MsgBox(Err.Description)
End If
Else
MsgBox(Err.Description)
End If
End Try
End Sub
5将下面的代码添加到 [End] 按钮 (btnDone) 的 click 事件中:
Connection.Close
End
6运行应用程序.
选择 [Debug] → [Start].
在初始消息框出现后,将加载窗体.
要终止应用程序,请单击 [End].
在第一次连接数据库时,UltraLite 根据模式文件创建数据库文
件 (tutCustomer.udb).如果再次运行应用程序,则消息框会显示
与现有数据库相连接.
疑难解答疑难解答疑难解答疑难解答现在连接数据库所需的基本代码已放置在合适的位置.
如果在尝试连接时发生了数据类型转换错误,请确保已在
ULConnectionParms1 对象上提供了 GetOcx 方法.
如果未找到模式文件,请检查该文件是否处于 ULConnectionParms1
SchemaOnDesktop 设置所指的位置.
第4章 教程:AppForge Crossfire 的示例应用程序
81
编写用于导航和数据操作的代码编写用于导航和数据操作的代码编写用于导航和数据操作的代码编写用于导航和数据操作的代码
以下过程实现数据操作和导航.该代码使用 Table API,后者可提供用
于在表中的行之间移动和修改表中的行(每次一行)的方法.对于更
复杂的应用程序,UltraLite 提供了 SQL 实现.
打开表打开表打开表打开表
1编写代码以便初始化表并移到第一行.
此代码将数据库中的 Customer 表指派给 CustomerTable 变量.
调用 Open 将打开该表,这样就可以读取或操作表数据.它也
将应用程序定位在表的第一行之前.
紧接在 End Sub 指令的前面,将以下代码添加到 Form_Load 事
件中:
Try
CustomerTable = Connection.GetTable("Customer")
CustomerTable.Open()
Catch
If Err.Number
UltraLiteAFLib.ULSQLCode.ulSQLE_NOERROR _
Then
MsgBox(Err.Description)
End If
End Try
2创建一个名为 DisplayCurrentRow 的新过程并实现该过程,如下
所示.
如果表中没有行,下面的过程将导致应用程序显示空控件.否
则,它显示存储在数据库的当前行的每一列中的值.
Private Sub DisplayCurrentRow()
If CustomerTable.RowCount = 0 Then
txtFname.Text = ""
txtLname.Text = ""
txtCity.Text = ""
txtPhone.Text = ""
lblID.Caption = ""
Else
lblID.Caption = _
第 3 课:编写示例代码
82
CustomerTable.Column("ID").StringValue
txtFname.Text = _
CustomerTable.Column("FName").StringValue
txtLname.Text = _
CustomerTable.Column("LName").StringValue
If CustomerTable.Column ("City").IsNull Then
txtCity.text =""
Else
txtCity.Text = _
CustomerTable.Column("City").StringValue
End If
If CustomerTable.Column("Phone").IsNull Then
txtphone.Text = ""
Else
txtphone.Text = _
CustomerTable.Column("Phone").StringValue
End If
End If
End Sub
3从窗体的 Activated 事件调用 DisplayCurrentRow.此调用确保
在应用程序启动时字段得到更新.
DisplayCurrentRow
在表中插入行在表中插入行在表中插入行在表中插入行
1编写用于实现 [Insert] 按钮的代码.
在下面的过程中,调用 InsertBegin 可以将应用程序置于插入模
式下,并将行内的所有值设为其缺省值.例如,ID 列收到下一
个自动增量值.设置列值,然后插入新行.
将下面的过程添加到 [Insert] 按钮 (btnInsert) 的 Click 事件中.
Dim fname As String
Dim lname As String
Dim city As String
Dim phone As String
fname = txtFname.Text
lname = txtLname.Text
city = txtCity.Text
phone = txtPhone.Text
第4章 教程:AppForge Crossfire 的示例应用程序
83
Try
CustomerTable.InsertBegin
CustomerTable.Column("FName").StringValue = _
fname
CustomerTable.Column("LName").StringValue = _
lname
If Len(city) > 0 Then
CustomerTable.Column("City").StringValue =
_
city
End If
If Len(phone) > 0 Then
CustomerTable.Column("Phone").StringValue =
_
phone
End If
CustomerTable.Insert
CustomerTable.MoveLast
DisplayCurrentRow
Exit Sub
Catch
MsgBox "Error: " & CStr(Err.Description)
End Try
2运行应用程序.
在初始消息框出现后,将显示窗体.
3在数据库中插入两行.
在第一个文本框中输入名字 [Jane],在第二个框中输入姓
[Doe].单击 [Insert].
即会在表中添加包含这些值的行.应用程序移动到表中的
最后一行并显示该行.标签显示 UltraLite 指派给该行的
ID 列的自动增量值.
在第一个文本框中输入名字 [John],在第二个框中输入姓
[Smith].单击 [Insert].
4单击 [End] 结束程序.
第 3 课:编写示例代码
84
在表中的行之间移动在表中的行之间移动在表中的行之间移动在表中的行之间移动
1编写用于实现 [Next] 和 [Previous] 按钮的代码.
将下面的代码添加到 [Next] 按钮 (btnNext) 的 Click 事件中.
If Not CustomerTable.MoveNext Then
CustomerTable.MoveLast
End If
DisplayCurrentRow
将下面的代码添加到 [Previous] 按钮 (btnPrevious) 的 Click 事件
中.
If Not CustomerTable.MovePrevious Then
CustomerTable.MoveFirst
End If
DisplayCurrentRow
2运行应用程序.
当窗体第一次显示时,由于当前位置是在第一行的前面,所以
控件是空的.
在窗体显示后,单击 [Next] 和 [Previous] 按钮在表中的行之间
移动.
在这一阶段,可以输入数据并在表中的行之间滚动.
更新和删除表中的行更新和删除表中的行更新和删除表中的行更新和删除表中的行
1编写用于实现 [Update] 按钮的代码.
在下面的代码中,调用 UpdateBegin 可以将应用程序置于更新
模式下.更新列值,然后通过调用 Update 来更新行本身.
将下面的代码添加到 [Update] 按钮 (btnUpdate) 的 Click 事件
中:
Dim fname As String
Dim lname As String
Dim city As String
Dim phone As String
第4章 教程:AppForge Crossfire 的示例应用程序
85
fname = txtFname.Text
lname = txtLname.Text
city = txtCity.Text
phone = txtPhone.Text
Try
CustomerTable.UpdateBegin
CustomerTable.Column("FName").StringValue =
fname
CustomerTable.Column("LName").StringValue =
lname
If Len(city) > 0 Then
CustomerTable.Column("City").StringValue =
city
Else
CustomerTable.Column("City").SetNull
End If
If Len(phone) > 0 Then
Cust
