从具有相关表的表中删除记录

时间:2013-02-02 07:28:55

标签: ms-access

我在MS Access中工作,并且“无法从指定的表中删除”错误。

我的表是:

Orders 
OrderDetails 
Products 
OrderView

OrderView是一个查询表,数据分别来自OrderDetails和Products表。

我正在尝试从OrderDetails中删除记录,其中productId与gridview中的productId匹配。

我的sql语句是:

DELETE * FROM OrderDetails WHERE productId=@productId

我从网格视图中获取@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" />

1 个答案:

答案 0 :(得分:0)

该表中有多少条记录?您要删除多少条记录?

当我尝试从包含100万条记录的表中删除超过30,000条记录时,我遇到了溢出错误。这似乎是一个访问限制。 Access无法处理足够的内存来保存内存中的所有记录,并在保留已删除的数据的同时进行搜索和删除,以便在发生错误时回滚。这是我最好的猜测。 我已经使用2种策略解决了这个问题:1)除非绝对确定我现在需要插入任何记录,否则不要将任何记录插入到大型表中。使用临时表或全局var数组临时存储值。 2)删除小块。例如。 DELETE ... WHERE ID BETWEEN 20000和25000.确保在WHERE子句中命名的列是Indexed列。我在循环中包含这样的语句,在BETWEEN短语中递增2个val。