【发布时间】:2019-08-09 12:30:06
【问题描述】:
您好,我正在 Google Appmaker 上制作一个简单的结算应用。为采购订单、账单和客户创建 CloudSql 模型。这些 SQL 表相互关联,因为一个客户可以有很多 PO,而一个 PO 可以有很多账单。
一切都很好,我添加了字段和关系。在页面上放置一些表格以显示和输入新项目的表格。
当我想在一个页面上显示一个包含有关订单信息的概览表时出现问题 - 包含有关订单本身、其客户以及已向此类采购订单收取多少费用的字段。
该表本身似乎是使用命名为 (CalcSum) 的计算数据模型的好主意 - 我加入了我的不同表并进行了一些计算。没问题
SELECT
(Orders.Sum-SUM(Bills.Sum)) AS NotInvoiced,
SUM(Bills.Sum) AS Invoiced,
Orders.OrderCode,
Orders.Currency,
Orders.PODate,
DepCode,
ProjCode,
Client.Name AS Client,
Orders.Sum AS OrderAmount
FROM Orders
LEFT JOIN Bills ON Bills.Po_fk = Orders.Id
LEFT JOIN Client ON Orders.Client_fk = Client.Id
GROUP BY Orders.Id;
现在引起的问题如下。不能对计算模型使用查询过滤。 (如本教程中所见https://www.youtube.com/watch?v=jo-5AE5P1HA) 我在想我可以使用自己的查询参数,尽管这看起来很麻烦,因为我必须定义很多参数并编写更长的 SQL。 所以我尝试了一个这样的例子——把前面的代码块改成
GROUP BY Orders.Id HAVING DepCode LIKE '%:DepSearch%';
然后,我在此概览表的标题中添加了一个 searchContent 文本框,并将该框绑定到 @datasource.query.parameters.DepSearch。我也对这个框进行了 onValue 更改 重新加载数据源。所以它的完成方式很像 youtube 示例,只是我替换了我自己的 quwery 参数,而不是可用的自动过滤器术语 到非计算模型。我希望它应该可以工作,但我得到了控制台错误。
Exception: JDBC backend failure. More information: Failed to execute connection with error: Parameter index of '1' is greater than number of parameters, which is '0'..
Executing query for datasource CalcSum: (Error) : JDBC backend failure. More information: Failed to execute connection with error: Parameter index of '1' is greater than number of parameters, which is '0'..
at Orderid.Table1.Table1Header.Panel1.TextBox1.onValueChange:1:19
Executing query for datasource CalcSum failed.
我完全没有想法。我该如何解决这个问题,或者有任何其他想法如何制作包含这三个模型中的字段并包括计算字段的概述 可以以任何其他方式过滤。在我看来,计算模型是解决这个问题前半部分的方法,但它似乎与另一部分混淆了。
【问题讨论】:
-
我认为在您的 SQL 查询中,您需要将参数定义为 :DepSearch。所以删除开头的 '%' 和结尾的 %'。请参阅此官方文档developers.google.com/appmaker/models/…。
-
你说得对,appMaker 不会理解引号内的参数。我必须使用 Concat 函数才能将 LIKE 子句与模式一起使用,同时访问参数。