以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  语法错误  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=148474)

--  作者:nxqtxwz
--  发布时间:2020/4/8 17:41:00
--  语法错误

很不好意思总是麻烦老师,下面的代码运行基本正常,只是只要输入条件(不论是一个条件还是多个条件)筛选时服务器上报错:“=”号附近有语法错误,点确定后手机上能显示结果。什么条件都不输入直接按确定按钮正常。

 


[此贴子已经被作者于2020/4/21 21:22:21编辑过]

--  作者:有点蓝
--  发布时间:2020/4/9 8:37:00
--  
yjbb = e.PostValues(flt)
--  作者:nxqtxwz
--  发布时间:2020/4/9 10:16:00
--  
改为
yjbb = e.PostValues(flt)
问题依然存在。点确定按钮后出现“=”附近有语法错误。
--  作者:有点蓝
--  发布时间:2020/4/9 10:17:00
--  
自己看看完整的sql:http://www.foxtable.com/webhelp/scr/1485.htm
--  作者:nxqtxwz
--  发布时间:2020/4/9 11:42:00
--  

Dim cmd As New SQLCommand
cmd.C \'记得设置数据源名称
Dim yjbb As String          \'定义一个变量,为excel报表传递查询条件
cmd.CommandText = "Select Count(*) Fro  m {控缀保学}"
\'msgbox(3)
If flt > "" Then
    msgbox(flt)                     输入的筛选条件没问题,语法正确,很规范。
    cmd.CommandText = cmd.CommandText & "where" & flt
    msgbox(1)                       此处正常
    yjbb = e.PostValues(flt)
    wb.AppendCookie("yjbb",flt)                \'将flt的值赋给yjbb变量
    msgbox("Select * fro  m {控缀保学} where " & e.Cookies("yjbb"))                   显示的值没有变化,一直都是一样的。
msgbox(yjbb)                                                                                                  显示为空

End If

msgbox(2)                            正常
Dim Count As Integer = cmd.ExecuteScalar() \'获取总的行数                 这一行出错,=号附近有语法错误。cmd.ExecuteScalar() 不知如何用,帮助中也找不以用法。
msgbox(3)                正常
cmd.CommandText = "Select * Fro  m (Select Row_Number() Over(Order by 出生日期) As [NO.],[_Identify],学生姓名,年级,班级,年龄,家长姓名,联系电话,地址 Fro  m 控缀保学"
msgbox(4)            正常,后面都正常。
If flt > "" Then
    cmd.CommandText = cmd.CommandText & " where " & flt
    msgbox(5)
End If
\'cmd.CommandText = "select top 10 * fro   m {控缀保学} where 出生日期 > " & (page * pageRows ) \'内部表测试用

cmd.CommandText = cmd.CommandText & ") As a "
msgbox(6)
cmd.CommandText = cmd.CommandText & "  Where [NO.]>= " & StartRow & " And [NO.] <= " & EndRow
msgbox(7)
With wb.AddActionSheet("","menu") \'设计菜单


--  作者:有点蓝
--  发布时间:2020/4/9 12:00:00
--  
Dim e As RequestEventArgs = args(0)
Dim wb As New WeUI
Dim flt As String = e.Cookies("yjbb")
If flt = "" Then
    If e.PostValues.ContainsKey("product") Then
        flt &= "年级 = \'" & e.PostValues("product") & "\'"
    End If
    ……原来生成条件的其他代码
    wb.AppendCookie("yjbb",flt)
End If

Dim page As Integer = 0 \'默认page为0,显示第一页
Dim pageRows As Integer = 10 \'每页10行
If e.GetValues.ContainsKey("page") Then  \'如果地址中有page参数
    Integer.TryParse(e.GetValues("page"), page) \'提取page参数
End If
Dim StartRow As Integer = page * pageRows + 1 \'此页第一行
Dim EndRow As Integer = (page + 1) * pageRows \'此页最后一行
\'\'提取此页数据
Dim cmd As New SQLCommand
cmd.C \'记得设置数据源名称
Dim yjbb As String          \'定义一个变量,为excel报表传递查询条件
cmd.CommandText = "Select Count(*) From {控缀保学}"
\'\'msgbox(3)
If flt > "" Then
    cmd.CommandText = cmd.CommandText & "where" & flt
End If
Dim Count As Integer = cmd.ExecuteScalar() \'获取总的行数

……

--  作者:nxqtxwz
--  发布时间:2020/4/9 13:16:00
--  

还是老问题:

 

Dim e As RequestEventArgs = args(0)
Dim wb As New WeUI
Dim flt As String    \' = e.Cookies("yjbb")
If flt = "" Then
    If e.PostValues.ContainsKey("product") Then
        flt &= "年级 = \'" & e.PostValues("product") & "\'"
    End If
    If e.PostValues.ContainsKey("bj") Then
        If flt > "" Then
            flt = flt & " and  "
        End If
        flt &= "班级 = \'" & e.PostValues("bj") & "\'"
    End If
   
    If e.PostValues.ContainsKey("jdc") Then
        If flt > "" Then
            flt = flt & "and "
        End If
        flt &= "街道村 = \'" & e.PostValues("jdc") & "\'"
    End If
   
   
    If e.PostValues.ContainsKey("dqzt") Then
        If flt > "" Then
            flt = flt & " and "
        End If
        flt &= "当前状态 = \'" & e.PostValues("dqzt") & "\'"
    End If
   
    If e.PostValues.ContainsKey("cxyy") Then
        If flt > "" Then
            flt = flt & "and  "
        End If
        flt &= "辍学原因 = \'"& e.PostValues("cxyy") & "\'"
    End If
   
   
    If e.PostValues.ContainsKey("ksnl") Then
        If flt > "" Then
            flt = flt & "and "
        End If
        flt &= flt & "年龄 > \'" & e.PostValues("ksnl") & "\'"
    End If
   
   
    If e.PostValues.ContainsKey("jsnl") Then
        If flt > "" Then
            flt = flt & "and "
        End If
        flt &= flt & "年龄 < \'" & e.PostValues("jsnl") & "\'"
    End If
    msgbox(1)
    msgbox(flt)                  正确
   
    wb.AppendCookie("yjbb",flt)
End If
msgbox("Select * fro    m {控缀保学} where " & e.Cookies("yjbb"))      正确


Dim page As Integer = 0 \'默认page为0,显示第一页
Dim pageRows As Integer = 10 \'每页10行
If e.GetValues.ContainsKey("page") Then  \'如果地址中有page参数
    Integer.TryParse(e.GetValues("page"), page) \'提取page参数
End If
msgbox(2)
msgbox(flt)             弹出

Dim StartRow As Integer = page * pageRows + 1 \'此页第一行
Dim EndRow As Integer = (page + 1) * pageRows \'此页最后一行
msgbox(3)   \'提取此页数据             弹出
Dim cmd As New SQLCommand
cmd.C        \'记得设置数据源名称
Dim yjbb As String          \'定义一个变量,为excel报表传递查询条件
cmd.CommandText = "Select Count(*) Fr  om {控缀保学}"
If flt > "" Then
    msgbox(4)         弹出

cmd.CommandText = cmd.CommandText & "where" & flt
End If
msgbox(5)              正常弹出
Dim Count As Integer = cmd.ExecuteScalar() \'获取总的行数              cmd.ExecuteScalar()  不知怎么用。分页不正确,少于10行正确,多于10行只显示10行,且显示的内容不都是筛选的内容。
msgbox(6)           弹出前报错:“=”附近有语法错误。
cmd.CommandText = "Select * Fro   m (Select Row_Number() Over(Order by 出生日期) As [NO.],[_Identify],学生姓名,年级,班级,年龄,家长姓名,联系电话,地址 Fro  m 控缀保学"
If flt > "" Then
    cmd.CommandText = cmd.CommandText & " where " & flt
End If

cmd.CommandText = cmd.CommandText & ") As a "

cmd.CommandText = cmd.CommandText & "  Where [NO.]>= " & StartRow & " And [NO.] <= " & EndRow

With wb.AddActionSheet("","menu") \'设计菜单
    .Add("mnudAdd", "增加记录").Attribute =""
    .Add("mnuEdit", "编辑记录").Attribute =""
    .Add("mnuEdit", "生成Excel报表","kcbxexcel.htm")
    .Add("mnuCancel","取消","",True)
    \'.Add("mnuStatistics", "数据统计","tongji.htm")
 ....................


--  作者:有点蓝
--  发布时间:2020/4/9 13:54:00
--  
Dim flt As String
If e.Cookies.ContainsKey("yjbb")
  flt  = e.Cookies("yjbb")

End
 If
If flt = "" Then
……

--  作者:nxqtxwz
--  发布时间:2020/4/9 14:21:00
--  
以下是引用有点蓝在2020/4/9 13:54:00的发言:
Dim flt As String
If e.Cookies.ContainsKey("yjbb")
  flt  = e.Cookies("yjbb")

End
 If
If flt = "" Then
……

问题还是依然存在,仍然是老地方出错。

上面的代码会造成进不了If flt = "" Then这个条件嵌套内,因为第一次输入条件后,flt肯定不为空。


--  作者:有点蓝
--  发布时间:2020/4/9 14:23:00
--  
flt不为空就没有必要重新生成了,直接使用即可。

上传实例测试