2011-12-30 93 views
0

我大多只使用ColdFusion的查询,直到现在从来没有需要的结构或任何对象符号。我正在使用的服务器没有打开调试,只有一个“500内部服务器错误”,所以我不明白为什么我的代码不工作,可悲的是我没有能力打开调试。coldfusion结构语法和查询数据

通过试验和错误与评论块出我已经注意到错误发生在我的结构行,并将结构添加到我的数组。从我读过的CF文档中,我没有看到任何语法错误,但是如果我有任何错误的逻辑或错误,我们将非常感谢任何帮助。

<cfset dataArray = []> 
<cfset i = 0> 
<cfloop query="getMembers"> 
     <cfquery name="getmaps" datasource=“a" dbtype="odbc"> 
     SELECT  member_id, mlong, mlat 
     FROM   maps 
     WHERE  member_id = '#getMembers.MemberID#' 
     </cfquery> 
     <cfif getmaps.recordcount eq 1> 
      <!--- temp structure to insert into array ---> 
      <cfset dataTemp = { 
       memberID = getMemebers.memberID, 
       name = getMemebers.MemberName, 
       long = getmaps.mlong, 
       lat = getmaps.mlat 
      }> 
      <cfset dataArray[i] = dataTemp> 
      <cfset i++> 
     </cfif> 
    </cfloop> 
+3

那么,你的结构键值的名称中有错别字,对于初学者来说:getMemebers!= getMembers。 – 2011-12-30 05:53:20

回答

5

我除了肖恩的评论,我相信你有从0开始的数组索引出了问题,而不是1 ColdFusion的在1

编辑一些更多的建议,开始数组索引:

<cfset dataArray = []> 
<cfloop query="getMembers"> 
     <!--- Not usually a good idea to query each time through a loop - should be able to do a single query outside it ---> 
     <cfquery name="getmaps" datasource=“a" dbtype="odbc"> 
     SELECT  member_id, mlong, mlat 
     FROM   maps 
     WHERE  member_id = <cfqueryparam value='#getMembers.MemberID#' cfsqltype="cf_sql_varchar"><!--- assuming varchar since you had quotes around it ---> 
     </cfquery> 
     <cfif getmaps.recordcount eq 1> 
      <!--- temp structure to insert into array ---> 
      <cfset dataTemp = { 
       memberID = getMembers.memberID, 
       name = getMembers.MemberName, 
       long = getmaps.mlong, 
       lat = getmaps.mlat 
      }> 
      <cfset ArrayAppend(dataArray,dataTemp)> 
     </cfif> 
</cfloop> 
+0

我应该指出,在我的例子中,我完全删除了'i'变量,而是选择了内置的CF Array操作函数ArrayAppend。这样你就可以减少一个变量来处理。 – 2011-12-30 06:50:19

3

您应该考虑将两个查询组合成一个查询。

<cfquery name="qryMemberMaps" datasource="a" dbtype="ODBC"> 
SELECT 
    members.memberID, members.MemberName, 
    maps.mlong, maps.mlat 
FROM 
    [members_database].dbo.members JOIN [maps_database].dbo.maps ON members.memberID = maps.member_id 
</cfquery> 

当你只需要一个当前的方法可能会产生成千上万的查询!

无论何时您发现自己循环查询并调用其他查询,修改原始查询并保存锤击数据库服务器是个不错的主意。

为了将数据放入结构数组中,Jake的答案效果很好。

+0

地图表可悲地在一个单独的数据库中,我可以在CF中的数据库中加入吗?我已经尝试过,只能得到错误。 – rajh2504 2011-12-30 15:47:31

+0

通常,是的。假设数据源帐户对*两个*数据库都有权限。 – Leigh 2011-12-30 17:26:28

+0

如果数据库都是Microsoft SQL Server,我一定知道你可以。您将不得不完全限定FROM子句中的数据库表。我更新了上面的查询以包含完全限定数据库表的示例。 – 2011-12-31 22:01:50

0

如果您要加入多个数据库,请确保您在将充当主键/外键的列上创建非聚集索引。

+0

我不确定你的意思是非聚集索引,你能告诉我一个例子吗? – rajh2504 2012-01-04 20:59:20