大部分企业应用程序都是以数据为中心的,这意味着你需要知道如何储存信息。我的爱好是存储数据,当Pocket PC上使用的是真正的数据库——SQL Server 2000 Windows CE Edition。因此,我的第一个建议是得到你所需要的一个SQL Server 2000 Developer Edition的许可。
当你安装了SQL Server 2000 Windows CE Edition后,你将同时得到ADOCE 3.1,最新的版本。我将用它和PC上最新版的ADO 2.6进行比较。
' Create objects Set laco = CreateObject("ADODB.Connection") Set lars = CreateObject("ADODB.Recordset")
' Open Connection laco.Open "Provider=SQLOLEDB;Data Source=SERVERNAME;" & _ "Initial Catalog=DBNAME;Trusted_Connection=Yes"
' Open Recordset lsSQL = "SELECT * FROM Article" lars.Open lsSQL, laco, adOpenForwardOnly, adLockReadOnly
' Clear list and get item rows Do While Not lars.EOF Set litm = lvwArticles.ListItems.Add(, , lars("Description").Value) litm.SubItems(1) = lars("Price").Value litm.SubItems(2) = lars("Stock").Value lars.MoveNext Loop
' Close Recordset and Connection lars.Close laco.Close 你在Pocket PC上将这样做:
Dim litm As ListItem Dim laco As Connection Dim lars As Recordset Dim lsSQL As String
' Create objects Set laco = CreateObject("ADOCE.Connection.3.1") Set lars = CreateObject("ADOCE.Recordset.3.1")
' Open Connection laco.Open "Provider=Microsoft.SQLSERVER.OLEDB.CE.1.0;" & _ "Data Source=/DBNAME.sdf"
' Open Recordset lsSQL = "SELECT * FROM Article" lars.Open lsSQL, laco, adOpenForwardOnly, adLockReadOnly
' Clear list and get item rows Do While Not lars.EOF Set litm = lvwArticles.ListItems.Add(, , lars("Description").Value) litm.SubItems(1) = lars("Price").Value litm.SubItems(2) = lars("Stock").Value lars.MoveNext Loop
' Close Recordset and Connection lars.Close laco.Close
正如你看到的,在两个例子中有一些较小的差别。比较明显的是Connection对象的Open方法的连接字符串不同。假如你忽略Provider参数,ADOCE将假设你想访问一个Pocket access数据库文件。而SQL Server CE始终是作为一个文件名被引用。这种情况下,文件将被放置到设备的根目录下,但是也可以被放置在你的应用程序目录中(例如,Data Source=/Program Files/AppName/AppName.sdf)。
' Update Article If Not lars.EOF Then lars("Price").Value = 200 lars.Update End If 像在PC上一样用SQL声明(SELECT)来创建一个可更新Recordset是不可能的,你可以使用Find方法得到Recordset中想要的位置。
' Delete Article If Not lars.EOF Then lars.Delete 这里和更新的代码非常像。请注重Find方法的结果集是一个只包含与搜索标准相匹配记录的Recordset。这意味着你在PC和Pocket PC中会得到相同内容的Recordset。我说这个,是为了防止你想对Pocket PC上的Recordset做更多的事情,因为你打开了相同的表。
此外,你可以用一个SQL DELETE语句来做几乎相同的事情:
laco.Execute "DELETE Article WHERE Description='Test'"