簡體   English   中英

ms-access:運行時錯誤3354

[英]ms-access: runtime error 3354

我在ms-access中運行sql時遇到問題。 即時通訊使用此代碼:

SELECT readings_miu_id, ReadDate, ReadTime, RSSI, Firmware, Active, OriginCol, ColID, Ownage, SiteID, PremID, prem_group1, prem_group2  
INTO analyzedCopy2  
FROM analyzedCopy AS A 
WHERE ReadTime =  (SELECT TOP 1 analyzedCopy.ReadTime FROM analyzedCopy  WHERE analyzedCopy.readings_miu_id = A.readings_miu_id  AND analyzedCopy.ReadDate = A.ReadDate  ORDER BY analyzedCopy.readings_miu_id, analyzedCopy.ReadDate, analyzedCopy.ReadTime)
ORDER BY A.readings_miu_id, A.ReadDate ; 

在此之前,我要根據給定條件從其他表中填充analyzeredCopy表。 對於一組條件,此代碼工作正常,但對於其他條件,它始終給我運行時錯誤“ 3354”。 我能看到的唯一區別是,在使用標准的情況下,該表大約有4145條記錄,而在使用該代碼的情況下,該表大約有9000條記錄。 有什么建議么?

有什么辦法告訴它只提取一半的信息,然后在表的另一半上運行相同的選擇字符串,然后將這些結果添加到上半部分的先前結果中?

運行時錯誤“ 3354”的全文為“此子查詢最多可以返回一條記錄”。

我只是嘗試在前4000條記錄上運行此查詢,但再次失敗,並顯示相同的錯誤代碼,因此它不是我想的記錄數量。

看到這個:

http://allenbrowne.com/subquery-02.html#AtMostOneRecord

發生的情況是您的子查詢返回兩個相同的記錄(基於ORDER BY),而TOP 1實際上返回了兩個記錄(是的,這就是訪問TOP語句的方式)。 您需要向ORDER BY添加字段以使其唯一-最好是唯一ID(您確實有唯一的PK嗎?)

正如下面的Andomar所述,DISTINCT TOP 1也將起作用。

運行子查詢時,MS-ACCESS返回什么?

SELECT TOP 1 analyzedCopy.ReadTime 
FROM analyzedCopy
WHERE analyzedCopy.readings_miu_id = A.readings_miu_id  
AND analyzedCopy.ReadDate = A.ReadDate  
ORDER BY analyzedCopy.readings_miu_id, analyzedCopy.ReadDate, 
         analyzedCopy.ReadTime

如果返回多行,則可以使用DISTINCT進行修復:

SELECT DISTINCT TOP 1 analyzedCopy.ReadTime 
FROM ... rest of query ...

我不知道這是否行得通(並且我不再擁有Access的副本以進行測試),所以如果我離開的話,我會在前面道歉。

首先,只需對analyzeredCopy的主鍵進行選擇即可獲得中點ID。 就像是:

SELECT TOP 4500 readings_miu_id FROM analyzedCopy ORDER BY readings_miu_id, ReadDate;

然后,當您擁有中點ID時,可以將其添加到原始語句的WHERE語句中:

SELECT ...
INTO ...
FROM ...
WHERE ... AND (readings_miu_id <= {ID from above}
ORDER BY ...

然后選擇另一半:

SELECT ...
INTO ...
FROM ...
WHERE ... AND (readings_miu_id > {ID from above}
ORDER BY ...

再一次,對不起,如果我走了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM