2013-02-02 48 views
0

我在MS Access中工作,並且我得到「無法從指定表中刪除」的錯誤。從有相關表的表中刪除記錄

我的表是:

Orders 
OrderDetails 
Products 
OrderView 

訂單查看與數據分別是從訂單明細和產品表的查詢表。

我想從OrderDetails中刪除記錄,其中productId匹配gridview中的我的productId。

我的SQL語句是:

DELETE * FROM OrderDetails WHERE [email protected] 

我從網格視圖

越來越@ProductID這是我的網格視圖標記:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
DataSourceID="row3" BackColor="White" BorderColor="#CCCCCC" 
BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" 
GridLines="Horizontal" 
DataKeyNames="oProductId" 

width="100%" 
> 
<Columns> 
    <asp:BoundField DataField="oProductId" HeaderText="Product Id" 
     SortExpression="oProductId" /> 
    <asp:BoundField DataField="pProductName" HeaderText="Product Name" 
     SortExpression="pProductName" /> 
    <asp:BoundField DataField="oQty" HeaderText="Quantity" 
     SortExpression="oQty" /> 
    <asp:BoundField DataField="oPrice" HeaderText="Price" SortExpression="oPrice" 
     DataFormatString="{0:c}" /> 
    <asp:BoundField DataField="oAmt" HeaderText="Amount" 
     SortExpression="oAmt" ReadOnly="True" DataFormatString="{0:c}" /> 
     <asp:TemplateField HeaderText="Action"> 
     <ItemTemplate> 

      <asp:LinkButton ID="btnDelete" Text="Delete" runat="server" CommandName="Delete" /> 
      </ItemTemplate> 
     </asp:TemplateField> 


</Columns> 
<FooterStyle BackColor="#CCCC99" ForeColor="Black" /> 
<HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" /> 
<PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" /> 
<SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" /> 
<SortedAscendingCellStyle BackColor="#F7F7F7" /> 
<SortedAscendingHeaderStyle BackColor="#4B4B4B" /> 
<SortedDescendingCellStyle BackColor="#E5E5E5" /> 
<SortedDescendingHeaderStyle BackColor="#242121" /> 

+0

什麼錯誤信息?如果是關於相關表格,則需要檢查數據庫設計。應該可以從訂單明細表中刪除而不引起參考完整性錯誤。 – Fionnuala

+0

錯誤信息:無法從指定表中刪除「 –

+0

您的消息說'表',但您的刪除語句顯示一個表。您確定您正在運行OrderDetails而不是OrderView嗎?您是否嘗試過運行MS Access中的語句? – Fionnuala

回答

0

多少紀錄在那張桌子上?您嘗試刪除多少條記錄?

當我嘗試從包含1百萬條記錄的表中刪除超過30,000條記錄時,我遇到了溢出錯誤。這似乎是一個訪問限制。訪問無法處理足夠的內存以保存內存中的所有記錄,並執行搜索和刪除操作,同時保留刪除的數據以便在出現錯誤時回滾。這是我最好的猜測。 我已經解決了這個問題,使用2個策略:1)不要插入任何記錄到一個大的表格,除非絕對確定我現在需要插入它們。使用臨時表或全局變量數組臨時存儲值。 2)以小塊刪除。例如。 DELETE ... WHERE ID BETWEEN 20000和25000之間的ID。確保您在WHERE子句中指定的列是索引列。我在一個循環中包含了這樣一個語句,增加了BETWEEN短語中的2個vals。