欢迎来到天天文库
浏览记录
ID:10725327
大小:56.00 KB
页数:4页
时间:2018-07-07
《应用技巧:在数据库中搜索文本--》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、应用技巧:在数据库中搜索文本>> 对于数据库而言,没有可用的搜索工具。事实上,它还没有提供。那么当在数据库中定位字符串时会怎样呢?如果你打开这个数据库,展示在你面前的就是一个应用程序或可能是众多的表和很少的基本工具来搜索这些表或是一个很麻烦的查询界面。这意味着你需要非常了解这个数据库,从而猜到这个字符串在哪或它是否存在。这篇文章告诉你在一个Access数据库中你可以怎样搜索所有的表,然后返回哪些表包含所搜索的字符串。使用强大的MicrosoftAccess链接技术可以将相同的技术应用于其它的数据库格式。
2、 找到一个文本字符串 驱使数据库搜索的Access表单(见图1)可以引入到你的数据库中。这个搜索工具会搜索数据库中的每一个表或链接表。这个软件具有以下特点: 建有一个前端Access数据库并链接到所有你希望某个特定用户或用户组搜索的后台表。Access允许你链接到Access数据库、文本文件和电子数据表,并通过从ODBC到特定驱动到更通用的后台数据库,例如SQLServer或MySQL或Oracle。 然后系统表会被分析,以便我们可以在这个数据库中创建所有的表。 所有这些表都被搜索以查找这些表里
3、包含文本数据的所有字段。在这个过程中,所有数字的、日期的和blob类型数据字段都会被忽略。然后会生成一个SQL语句来查找每个表中的所有文本字段。 然后我们使用记录集对每个表运行这个查询,然后找到和报告任何成功的(第一个)匹配,以便用户知道哪些表含有所查找的字符串。 图1–搜索后台数据库中字符串位置的工具 代码 这个搜索工具的所有都在这个搜索按钮之下。这个软件采用的第一个技术是循环Table集合中所有的表(略过Jet系统表和临时表)。 'Establishthephr
4、asestobeusedforsearchingfrom 'thefieldsontheform.Thedatabasefileisselected 'usingstandardVBfilecontrols SetmyDb=CurrentDb'es Fori=0TomyDb.TableDefs.Count-1 SetMyTable=myDb.TableDefs(i) tableName=MyTable.Name IfLeft(tableName,4)<>M
5、SysAndLeft(tableName,4)<>usys_ AndLeft(tableName,1)<>~Then 现在这个软件打开一个记录集并循环每个表中的所有字段来确认哪些字段是文本字段。在这个过程中,我们在搜索每个表时要使用的过滤是重置。 'NoFields=MyTable.Fields.Count SetrstSearchTable=myDb.OpenRecordset(_ tableName,dbOpenSnapshot) Fields-1 S
6、etmyField=MyTable.Fields(j) fldStr=myField.Name fldType=myField.Type IffldType=dbTextThen 接下来,也是对于Access数据库很重要的一个步骤,就是管理可以用来命名字段的众多名称。遵循明确命名规范的表和字段名称使得事情容易得多。大多数情况下,你会看到的是具有空格的扩展描述,比如EmergencyContactFirstName或%、#,或者甚至是句号.。Access在内部管理这些,它允许你使用方括号将字段或表名
7、称括起来[]。下面的代码显示了怎样处理这些。 'Jetfieldnamescanincludeunusualletters blankpos=InStr(1,fldStr,)+_ InStr(1,fldStr,#)+_ InStr(1,fldStr,-)+_ InStr(1,fldStr,/) Ifblankpos>1Then 'Makesureblankspacesandotherodd 'fieldnamecharactersarehandledco
8、rrectly fldStr=[fldStr] EndIf 现在我们将根据主屏幕上搜索所用的内容来组装这个SQL过滤字符串。对于这个系统,这些搜索利用Jet引擎LIKE语句,这和一个SQL后台数据库中的MATCHES是一样的。在Jet中的通配符是一个*,而在ANSISQL中它可以是一个百分号%也可以是一个下划线。Jet引擎用哪种方法排序都和你使用什么后台数据库无关。SearchString是表格上你输入搜索字符串的字段。
此文档下载收益归作者所有