Извлечения значений autoinc с бпр в Delphi 2005

Извлечения значений autoinc с бпр в Delphi 2005


в этой статье я буду использовать термин “личность” как синонимы отметить автоматическую генерацию (с СУРД) значения, как правило, на столбец, представляющий первичный ключ таблицы. Это называется “последовательность” в Oracle и “Генераторы” в InterBase.
на самом деле, есть 3 варианта получить значение Identity назад с помощью ADO .Сеть:

  1. использовать пакет запросов (базы данных, очевидно, должен поддерживать это)
  2. использовать хранимые процедуры (команда Insert), имеющих в качестве выходного параметра “идентичность” значением (это самый быстрый и, таким образом, Рекомендуемый метод)
  3. ручки адаптера RowUpdated /событие rowupdating событие и выдать запрос "Select @@Identity" и (в случае SQL-сервера) запрос на код в обработчик событий (медленный)
  4. <р класса="step_content "><п > & мочекаменная <р класса="step_content ">

    первый два варианта полагаться на UpdatedRowSource свойство объекта Command, так что новое значение передается обратно в объект dataset. К сожалению, данный объект в настоящее время не реализованы в bdpCommand. Это означает, что единственный приемлемый вариант-это 3-я и буду строить образца заявления (против MS SQL сервер базы данных northwind) показывает следующее:

    • начать с Delphi 2005.
    • как файл | создать и выберите "Приложение Windows - Delphi для .Вариант чистых".
    • тянуть из данных таблицы dbo.Таблица "сотрудники" из базы данных "Борей" в поставщика в MSSQL (подробности о настройке этого подключения можно найти в этой прекрасной статье Боба Сварта). Таблицы "сотрудники" использует столбец AutoInc как первичный ключ называют “Кодсотрудника”
    • щелкните правой кнопкой мыши BDPDataAdapter и выберите пункт настроить адаптер. После этого появится адаптер данных форма конфигурации для bdpAdapter компонента. Изменения в предложении Select, как показано на рисунке ниже и нажмите кнопку GenerateSQL:
    <Р класса="step_content "> <р класса="step_content "> & мочекаменная <р класса="step_content ">
    • нажмите на данных вкладке и выберите пункт “новый набор” и нажать "ОК".
    • набор bdpAdapter свойство Active в True.
    • нажмите на собственность таблиц созданной базы данных (“имя dataset1”). На экране появится коллекция таблиц редактор свойств для набора данных. Выберите Столбцы, а после этого появится редактор столбцов для таблицы "сотрудники". Выберите “Кодсотрудника” столбца и измените следующие свойства:
      В
      • AutoIncrement=True
      • AutoIncrementSeed=-1
      • AutoIncrementStep=-1

    <класс p="step_content ">, как показано в следующую картину:<р класса="step_content "> <р класса="step_content "><див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ"> <див класс="блок-внутренний"> <див класс="содержание"> <див класс="блок-дна"> <див класс='embed_block_1'><див><п ><Стронг>внимание: , так как значения мы будем устанавливать в набор данных будут потеряны в любом случае во время применения обновлений к базе данных, тогда любой дурак (уникальные) значения могут быть использованы в качестве хорошо. Тем не менее, это хорошая практика, чтобы установить значение Автоинкрементного столбца, представляющих поле первичного ключа, как истинная и уникальная отрицательные значения, потому что таким образом мы опираемся на свойства набора данных, чтобы получить временное уникальных значений и, кроме того, используя отрицательные значения в качестве временных employeeid значения гарантирует, что нет никакого конфликта с постоянной (положительной) сервер базы данных присвоенных значений. <р класса="step_content ">
    • перетащите элемент управления datagrid на форму и установите свойство datasource в dataset1 и его свойстве DataMember “сотрудники”.
    • сбросить кнопку переименовать его как значок btnsave и установить ее текст на “сохранить изменения”. Дважды щелкните на кнопке и введите следующий код:
    , а тег

    в процедуре TWinForm1.btnSave_Click(отправителя: система.Объект е: системы.Eventargs в)
    и начинается
    BdpDataAdapter1.Автообновление(Имя Dataset1, "Сотрудников", BdpUpdateMode.Все, ['Кодсотрудника'],[])
    В конце <р класса="step_content "><р класса="step_content "> 4-х<с sup>гопараметр "Автоматическое обновление" метод определяет Кодсотрудника как читать только колонки (что означает, что он не будет включен в окончательный пункт вставить) и вот что мы на самом деле хотим, так как это значение будет автоматически сгенерирован из базы данных сервера.

    • наконец, дважды щелкните событие RowUpdated из bdpAdapter и добавьте следующий обработчик:
    <Р класса="step_content ">тег

    в процедуре TWinForm1.BdpDataAdapter1_RowUpdated(отправителя: система.Объект е: Борланд.Данных.Поставщика.BdpRowUpdatedEventArgs)
    вар
    В УМК:BdpCommand
    и начинается
    если (электронная.Состояние=Состояние Обновления.Продолжения) и
    (Эл.StatementType=StatementType.Вставить)
    после
    и начинается
    УМК:=BdpCommand.Создать('выберите @@Identity',BdpConnection1)
    с электронной.Строки['Кодсотрудника']:=Цмд.Executescalar так и
    электронная.Строки.Метод acceptchanges
    В конце
    В конце <р класса="step_content "> <р класса="step_content ">во-первых, я смог убедиться, что ошибка не приходят во время обновления данной строки (состояние обновления.Продолжение) и если строка была сохранена, был вставлен один. В этом случае я создаю объект bdpCommand выдачи запроса Select @@идентичности. Затем я присваиваю полученное значение в текущей строке (электронная.подряд) и, наконец, я называю е.Строки.Метод acceptchanges для удаления изменение, которое я сделал из журнала изменений.
    обратите внимание, что мы должны использовать @@функция scope_identity вместо @@Identity в случае проверки таблиц в базе данных автоматически обновляется через триггер (что @@Identity значение вставляется в Счетной таблице, а не в "реальной" таблице мы обновляем).

    и<р класса="step_content "><р >Запустите приложение и добавить пару строк: <р класса="step_content ">
    и<р класса="step_content "><р > нажмите кнопку “Сохранить изменения” кнопку и employeeid значения будут автоматически обновлялось:<р класса="step_content "> <р класса="step_content "> & мочекаменная <р класса="step_content ">

    на подобные методы (вовлечение в событие rowupdating событие) может быть использован для получения сгенерированного значения из БД InterBase генератора до применения этого новое значение в базу данных

    <п > & мочекаменная <р класса="step_content "><п ><Стронг>ссылки:в<р класса="step_content "><п >- Борланд Делфи 2005 RAD для ADO.NET - Боб Сварт
    В Майкрософт АДО .Чистый (Майкрософт пресс) Дэвид Sceppa
    - А как использовать Autoinc полей с помощью datasnap Дэн Скупой<р класса="step_content "> & мочекаменная <дел стиль= \ ясно:оба поплавка:нет'><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная








Извлечения значений autoinc с бпр в Delphi 2005


Извлечения значений autoinc с бпр в Delphi 2005 : Несколько тысяч советов, которые сделают вашу жизнь проще.


в этой статье я буду использовать термин “личность” как синонимы отметить автоматическую генерацию (с СУРД) значения, как правило, на столбец, представляющий первичный ключ таблицы. Это называется “последовательность” в Oracle и “Генераторы” в InterBase.
на самом деле, есть 3 варианта получить значение Identity назад с помощью ADO .Сеть:

  1. использовать пакет запросов (базы данных, очевидно, должен поддерживать это)
  2. использовать хранимые процедуры (команда Insert), имеющих в качестве выходного параметра “идентичность” значением (это самый быстрый и, таким образом, Рекомендуемый метод)
  3. ручки адаптера RowUpdated /событие rowupdating событие и выдать запрос "Select @@Identity" и (в случае SQL-сервера) запрос на код в обработчик событий (медленный)
  4. <р класса="step_content "><п > & мочекаменная <р класса="step_content ">

    первый два варианта полагаться на UpdatedRowSource свойство объекта Command, так что новое значение передается обратно в объект dataset. К сожалению, данный объект в настоящее время не реализованы в bdpCommand. Это означает, что единственный приемлемый вариант-это 3-я и буду строить образца заявления (против MS SQL сервер базы данных northwind) показывает следующее:

    • начать с Delphi 2005.
    • как файл | создать и выберите "Приложение Windows - Delphi для .Вариант чистых".
    • тянуть из данных таблицы dbo.Таблица "сотрудники" из базы данных "Борей" в поставщика в MSSQL (подробности о настройке этого подключения можно найти в этой прекрасной статье Боба Сварта). Таблицы "сотрудники" использует столбец AutoInc как первичный ключ называют “Кодсотрудника”
    • щелкните правой кнопкой мыши BDPDataAdapter и выберите пункт настроить адаптер. После этого появится адаптер данных форма конфигурации для bdpAdapter компонента. Изменения в предложении Select, как показано на рисунке ниже и нажмите кнопку GenerateSQL:
    <Р класса="step_content "> <р класса="step_content "> & мочекаменная <р класса="step_content ">
    • нажмите на данных вкладке и выберите пункт “новый набор” и нажать "ОК".
    • набор bdpAdapter свойство Active в True.
    • нажмите на собственность таблиц созданной базы данных (“имя dataset1”). На экране появится коллекция таблиц редактор свойств для набора данных. Выберите Столбцы, а после этого появится редактор столбцов для таблицы "сотрудники". Выберите “Кодсотрудника” столбца и измените следующие свойства:
      В
      • AutoIncrement=True
      • AutoIncrementSeed=-1
      • AutoIncrementStep=-1

    <класс p="step_content ">, как показано в следующую картину:<р класса="step_content "> <р класса="step_content "><див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ"> <див класс="блок-внутренний"> <див класс="содержание"> <див класс="блок-дна"> <див класс='embed_block_1'><див><п ><Стронг>внимание: , так как значения мы будем устанавливать в набор данных будут потеряны в любом случае во время применения обновлений к базе данных, тогда любой дурак (уникальные) значения могут быть использованы в качестве хорошо. Тем не менее, это хорошая практика, чтобы установить значение Автоинкрементного столбца, представляющих поле первичного ключа, как истинная и уникальная отрицательные значения, потому что таким образом мы опираемся на свойства набора данных, чтобы получить временное уникальных значений и, кроме того, используя отрицательные значения в качестве временных employeeid значения гарантирует, что нет никакого конфликта с постоянной (положительной) сервер базы данных присвоенных значений. <р класса="step_content ">
    • перетащите элемент управления datagrid на форму и установите свойство datasource в dataset1 и его свойстве DataMember “сотрудники”.
    • сбросить кнопку переименовать его как значок btnsave и установить ее текст на “сохранить изменения”. Дважды щелкните на кнопке и введите следующий код:
    , а тег

    в процедуре TWinForm1.btnSave_Click(отправителя: система.Объект е: системы.Eventargs в)
    и начинается
    BdpDataAdapter1.Автообновление(Имя Dataset1, "Сотрудников", BdpUpdateMode.Все, ['Кодсотрудника'],[])
    В конце <р класса="step_content "><р класса="step_content "> 4-х<с sup>гопараметр "Автоматическое обновление" метод определяет Кодсотрудника как читать только колонки (что означает, что он не будет включен в окончательный пункт вставить) и вот что мы на самом деле хотим, так как это значение будет автоматически сгенерирован из базы данных сервера.

    • наконец, дважды щелкните событие RowUpdated из bdpAdapter и добавьте следующий обработчик:
    <Р класса="step_content ">тег

    в процедуре TWinForm1.BdpDataAdapter1_RowUpdated(отправителя: система.Объект е: Борланд.Данных.Поставщика.BdpRowUpdatedEventArgs)
    вар
    В УМК:BdpCommand
    и начинается
    если (электронная.Состояние=Состояние Обновления.Продолжения) и
    (Эл.StatementType=StatementType.Вставить)
    после
    и начинается
    УМК:=BdpCommand.Создать('выберите @@Identity',BdpConnection1)
    с электронной.Строки['Кодсотрудника']:=Цмд.Executescalar так и
    электронная.Строки.Метод acceptchanges
    В конце
    В конце <р класса="step_content "> <р класса="step_content ">во-первых, я смог убедиться, что ошибка не приходят во время обновления данной строки (состояние обновления.Продолжение) и если строка была сохранена, был вставлен один. В этом случае я создаю объект bdpCommand выдачи запроса Select @@идентичности. Затем я присваиваю полученное значение в текущей строке (электронная.подряд) и, наконец, я называю е.Строки.Метод acceptchanges для удаления изменение, которое я сделал из журнала изменений.
    обратите внимание, что мы должны использовать @@функция scope_identity вместо @@Identity в случае проверки таблиц в базе данных автоматически обновляется через триггер (что @@Identity значение вставляется в Счетной таблице, а не в "реальной" таблице мы обновляем).

    и<р класса="step_content "><р >Запустите приложение и добавить пару строк: <р класса="step_content ">
    и<р класса="step_content "><р > нажмите кнопку “Сохранить изменения” кнопку и employeeid значения будут автоматически обновлялось:<р класса="step_content "> <р класса="step_content "> & мочекаменная <р класса="step_content ">

    на подобные методы (вовлечение в событие rowupdating событие) может быть использован для получения сгенерированного значения из БД InterBase генератора до применения этого новое значение в базу данных

    <п > & мочекаменная <р класса="step_content "><п ><Стронг>ссылки:в<р класса="step_content "><п >- Борланд Делфи 2005 RAD для ADO.NET - Боб Сварт
    В Майкрософт АДО .Чистый (Майкрософт пресс) Дэвид Sceppa
    - А как использовать Autoinc полей с помощью datasnap Дэн Скупой<р класса="step_content "> & мочекаменная <дел стиль= \ ясно:оба поплавка:нет'><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная

Извлечения значений autoinc с бпр в Delphi 2005

Извлечения значений autoinc с бпр в Delphi 2005 : Несколько тысяч советов, которые сделают вашу жизнь проще.
рекомендовать друзьям
  • gplus
  • pinterest

Комментарий

Оставить комментарий

Оценивать