2009-02-23 4 views
3

Почему в разделе ADVANCE, когда я «настроил источник данных», отображается «GENERATE INSERT UPDATE AND SELECT STATEMENT»? На некоторых таблицах он не сероватый и отлично работает.ПОЧЕМУ - «GENERATE INSERT UPDATE AND SELECT STATEMENT» greyed out?

Я знаю, что путь вокруг этого может быть достигнут путем изменения тега autogenerateeditbutton на true в свойствах, и вы можете отредактировать этот путь, но когда это будет сделано, при попытке выполнить обновление отсутствует база данных.

Было также упомянуто, что это может быть связано с настройкой первичного ключа, когда я смотрю на форумах по этому вопросу. Однако я не мог получить окончательного ответа.

Ошибка в браузере выглядит следующим образом:

NotSupportedException: Updating is not supported by data source 'AccessDataSource1' unless UpdateCommand is specified.

Любые идеи, как обновить базу данных с помощью этих проблемных таблиц? Почему они проблематичны?

Как первичный ключ, расположенный на столе. Должно ли это быть сделано в Access? Можно ли это сделать в VS08 и как?

+0

Вы не используете Access - вы используете только Jet. –

ответ

6

Чтобы операторы вставки/выбора/обновления автоматически генерировались, таблица должна иметь первичный ключ, чтобы код для выбора правильной строки при вставке или для обновления знал, какую строку выбрать. Если у вас нет столбца в таблице, который имеет уникальные значения, возможно, что более одной строки соответствует той, которая должна быть обновлена. Использование первичного ключа позволяет разработчику генерировать код, который надежно выбирает правильную строку для обновления.

+0

Как первичный ключ размещен в таблице. Должно ли это быть сделано в Access? Можно ли это сделать в VS08 и как? – CGF

+0

См. эту статью: http://office.microsoft.com /en-us/access/HA100140991033.aspx – tvanfosson

+0

Вам не нужно иметь доступ для добавления первичного ключа в таблицу в Jet MDB - вам нужно знать только правильный DDL и иметь драйвер ODBC или OLEDB. –

1

см. Ответ tvanfosson re первичный ключ, то есть одна возможность. Вы также получите это поведение, если оператор select использует представление вместо прямой таблицы.

вы можете обойти эту проблему путем создания или ручного кодирования XML в XSD-файле, но это довольно хардкор решение ;-)

+0

Этот меня поймал раньше. Представления, которые не существуют в БД, но сделаны в VS, вместо этого не могут иметь необработанные процедуры обновления. Вы можете добавлять любые запросы вручную, хотя обычно вам не нужны все четыре родные. – Karl

+0

"Views?" В Jet MDB такой вещи нет. –

+0

@ [David W. Fenton]: я не писал тег ms-access, когда я написал этот ответ, и не упоминал Access. –

1

сделать источник данных с точки зрения, как это: mainkey является основной ключ. разрешение на просмотр для вставки, обновления, выбрать, удалить для такого пользователя:

" DeleteCommand =" DELETE FROM [VW_Security_UK_UserAccess] WHERE [MainKey] = @MainKey»

   InsertCommand="INSERT INTO [VW_Security_UK_UserAccess] ([UserName], [HasAccess], [ApplicationDefinitionmainkey], [SortOrder]) VALUES (@UserName, @HasAccess, @ApplicationDefinitionmainkey, @SortOrder)" 
       SelectCommand="SELECT [MainKey], [UserName], [HasAccess], [ApplicationDefinitionmainkey], [SortOrder] FROM [VW_Security_UK_UserAccess]" 
       UpdateCommand="UPDATE [VW_Security_UK_UserAccess] SET [UserName] = @UserName, [HasAccess] = @HasAccess, [ApplicationDefinitionmainkey] = @ApplicationDefinitionmainkey, [SortOrder] = @SortOrder WHERE [MainKey] = @MainKey"> 
       <DeleteParameters> 
        <asp:Parameter Name="MainKey" Type="Int16" /> 
       </DeleteParameters> 
       <InsertParameters> 
        <asp:Parameter Name="UserName" Type="String" /> 
        <asp:Parameter Name="HasAccess" Type="String" /> 
        <asp:Parameter Name="ApplicationDefinitionmainkey" Type="Byte" /> 
        <asp:Parameter Name="SortOrder" Type="Int32" /> 
       </InsertParameters> 
       <UpdateParameters> 
        <asp:Parameter Name="UserName" Type="String" /> 
        <asp:Parameter Name="HasAccess" Type="String" /> 
        <asp:Parameter Name="ApplicationDefinitionmainkey" Type="Byte" /> 
        <asp:Parameter Name="SortOrder" Type="Int32" /> 
        <asp:Parameter Name="MainKey" Type="Int16" /> 
       </UpdateParameters> 
      </asp:SqlDataSource>