Office中国论坛/Access中国论坛

标题: [求助]请问如何判断某查询是否存在? [打印本页]

作者: bjyizhang    时间: 2006-4-13 23:28
标题: [求助]请问如何判断某查询是否存在?
因为我要在程序中删除查询后新建此查询,可老是提示此查询不存在,请问如何判断某查询是否存在?谢谢

Dim Conn As New ADODB.Connection
Set Conn = CurrentProject.Connection
Conn.Execute "drop table currentQuery"
Set Conn = Nothing

'**************
Dim dbs As Database, qdf As QueryDef, strSQL As String, dmonth As String
dmonth = Year(Now()) & month(Now())
Set dbs = CurrentDb

'************** judge month and create new Query
Select Case dmonth
  Case 20064
  MsgBox "20064"
  strSQL = "SELECT JobName.[Job No], StaffName.[Staff Name], Jobschedule.[2006-4], Jobschedule.[2006-5], Jobschedule.[2006-6], Jobschedule.[2006-7], Jobschedule.[2006-8], Jobschedule.[2006-9], Jobschedule.[2006-10], Jobschedule.[2006-11], Jobschedule.[2006-12], Jobschedule.[2007-1], Jobschedule.[2007-2], Jobschedule.[2007-3], Jobschedule.[2007-4] FROM StaffName INNER JOIN (JobName INNER JOIN Jobschedule ON JobName.[Job No] = Jobschedule.[Job No]) ON StaffName.[Staff Name] = Jobschedule.[Stuff Name];"
  Set qdf = dbs.CreateQueryDef("currentQuery", strSQL)

[此贴子已经被作者于2006-4-13 15:29:09编辑过]


作者: fan0217    时间: 2006-4-13 23:31
用你刚才提到的系统报错,就可以实现的.用错误处理拦截错误代码.

不过也可以用查询Access系统对象表来实现.

[此贴子已经被作者于2006-4-13 15:32:08编辑过]


作者: 一点通    时间: 2006-4-13 23:35
删除查询又创建这样的查询,有这个必要吗?
作者: bjyizhang    时间: 2006-4-13 23:40
我是要求根据系统时间建立不同的查询,因为名字要一样,所以只好这样做了.



作者: 一点通    时间: 2006-4-13 23:43
晕,未见过这样建查询的
作者: fan0217    时间: 2006-4-13 23:44
我觉得没有这各必要.

动态建立查询的意义不大.
作者: bjyizhang    时间: 2006-4-13 23:45
因为字段是不能为变量的么,而且老板要的又着急,只好对付一下,见笑了.
作者: bjyizhang    时间: 2006-4-14 00:17
请问:如何用变量取代字段名?

1 Dim f1 As String
2 f1 = Year(Now()) & "-" & month(Now())
3 strSQL = "SELECT JobName.[Job No], StaffName.[Staff Name], Jobschedule.[f1]
4 strSQL = "SELECT JobName.[Job No], StaffName.[Staff Name], Jobschedule.[2006-4]

如何使第3句和第4句有相同效果?我试验,他会提示请输入f1

thanks
作者: hi-wzj    时间: 2006-4-14 06:19
可用命令更新查询语句的.
作者: andymark    时间: 2006-4-14 07:31
如果查询存在则执行删除

   Dim Rs As New ADODB.Recordset
   Dim TemName As String
   
    Rs.Open "SELECT Name FROM MSysObjects WHERE Type=5 and MSysObjects.Flags=0", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
   Do While Not Rs.EOF
       If Rs.Fields("name") = "currentQuery" Then
      
          DoCmd.DeleteObject acQuery, "currentQuery"
        End If
      Rs.MoveNext
   Loop


   Set Rs = Nothing
作者: hi-wzj    时间: 2006-4-14 18:07
Dim dbsCurrent As Database
Dim qryTest As QueryDef

Set dbsCurrent = CurrentDb
Set qryTest = dbsCurrent.QueryDefs("要更改的查询名称")
qryTest.SQL = "更新后的sql语句"




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3