Delphi+Access 生成表查询的问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 15:36:49
使用Delphi 7+ Access 2003写一个小管理系统
使用了两个数据库操作函数
SetQuery(SQLText) 执行SQL无返回值
GetQuery(SQLText) 执行SQL有返回值
和一个获得"生成表查询"SQL语句的函数
GetSQLText

--------问题说明-----------
SetQuery('Drop Table TempChild'); //先删除生成表
SetQuery(GetSQLText); //执行生成表查询
DataSource1.DataSet := GetQuery('Select * from TempChild');//显示生成表的内容

//这里先假设GetSQLText = SELECT * INTO TempChild FROM TempTable WHERE (((TempTable.No) ='00000002'))
执行以上程序后
可以成功得查询出编号为00000002的内容

接下来就有问题了
//这里假设GetSQLText = SELECT * INTO TempChild FROM TempTable WHERE (((TempTable.No) ='*00000002*'))
执行以上程序后没有查询出任何内容
TempChild 也没有内容

在access中执行这个查询却可以执行,并且TempChild 也有相应查询出来的内容
---------------------------
这是怎么回事?模糊查询不可以进行生成表查询吗?
写错了一个地方
模糊查询的
//这里假设GetSQLText = SELECT * INTO TempChild FROM TempTable WHERE (((TempTable.No) Like '*00000002*'))

这并不是一个普通的Select语句,加上Into之后,会在数据库里面生成实际的表,也就不会返回在内存中的临时表了,即不返回记录而只执行操作。加在一起的功能就是根据where的条件查询TempTable表中的记录,并用返回的记录生成一个新表TempChild。如果想得到记录集的话,去掉INTO TempChild即可

啊,原来是这个意思啊,我理解错误了,为了补回,我做了下实验,发现在DELPHI中确实不能用,不过原因在于模糊查询得不到正常的返回值。虽说相同的语句在ACCESS里面可以,但是在Delphi中用ADO控件是不行的,你可以把查询中的通配符“*”用“%”替换就可以了,虽说有点不可思议,但确实如此。