0

MS Access で作業していますが、「指定されたテーブルから削除できません」というエラーが表示されます。

私のテーブルは次のとおりです。

Orders 
OrderDetails 
Products 
OrderView

OrderView は、それぞれ OrderDetails テーブルと Products テーブルからのデータを含むクエリ テーブルです。

productId がグリッドビューの productId と一致する OrderDetails からレコードを削除しようとしています。

私の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 つの値をインクリメントします。

于 2013-03-28T12:08:09.357 に答える