0

我在 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" />

4

1 回答 1

0

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

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

于 2013-03-28T12:08:09.357 回答