我正在将电子表格读入查询中。然后将值插入数据库表。我只想在目标表中不存在其中一个值(即PartNumber)时执行插入。
我使用下面的代码首先检查重复项。但是,在插入itemPN
列时,我仍然遇到重复的问题,该列不允许重复值。
如果我刷新下面的页面,它会插入几十个值并因为另一个重复而挂起。如果我刷新它4次左右,它将插入我需要的117条记录。我很困惑为什么代码有时工作,但其他时候失败。它似乎在每次尝试时挂起相同的行。格式化变量的不同尝试产生了相同的结果。
<cfspreadsheet action="read"
src="#downloadDir#import.xls"
query="qxldata"
excludeheaderrow="yes"
columnnames="PartNumber,Name,Price,Category,IsActive,Location,Description,remarks,SubLocation">
<cfoutput query="qxldata" startrow="3">
<cfset xlPN=qxldata.PartNumber>
<cfquery name="noDup">
SELECT *
FROM Items
WHERE itemPN = #xlPN#
</cfquery>
<cfif NOT noDup.RecordCount EQ 1>
<cfscript>
//Insert a new item
item = new items();
item.setitemPN(PartNumber);
item.setitemName(Name);
item.setitemCategory(Category);
item.setitemDescription(Description);
item.setitemBarcodeName("bc"&PartNumber&".jpg");
item.setitemImageName(PartNumber&".jpg");
item.setitemReorderPoint(NumberFormat("", 0.00));
item.setitemReorderQuantity(NumberFormat("", 0.00));
item.setitemLocation(Location);
item.setitemSubLocation(SubLocation);
item.setitemLength(NumberFormat("", 0.00));
item.setitemWidth(NumberFormat("", 0.00));
item.setitemHeight(NumberFormat("", 0.00));
item.setitemRemarks(remarks);
item.setitemIsActive(IsActive);
item.setitemVendorID("1");
item.setitemPrice(NumberFormat(Price, 0.00));
EntitySave(item);
</cfscript>
</cfif>
</cfoutput>
感谢您的期待!
答案 0 :(得分:0)
像这样排除故障:
<cfoutput query="qxldata" startrow="3" maxrows="3">
<cfset xlPN=qxldata.PartNumber>
#xlPN# <br>
</cfoutput>
您很可能会看到三个相同的值。您可以通过指定所需的行号来解决该问题,
<cfset xlPN=qxldata.PartNumber[currentrow]>
或者完全跳过该变量并改变它:
WHERE itemPN = #xlPN#
到此:
WHERE itemPN = #PartNumber#
或者更好,对此:
WHERE itemPN = <cfqueryparam cfsqltype="cf_sql_integer" value="#PartNumber#">