Извлечения значений autoinc с бпр в Delphi 2005
в этой статье я буду использовать термин “личность” как синонимы отметить автоматическую генерацию (с СУРД) значения, как правило, на столбец, представляющий первичный ключ таблицы. Это называется “последовательность” в Oracle и “Генераторы” в InterBase.
на самом деле, есть 3 варианта получить значение Identity назад с помощью ADO .Сеть:
- использовать пакет запросов (базы данных, очевидно, должен поддерживать это)
- использовать хранимые процедуры (команда Insert), имеющих в качестве выходного параметра “идентичность” значением (это самый быстрый и, таким образом, Рекомендуемый метод)
- ручки адаптера RowUpdated /событие rowupdating событие и выдать запрос "Select @@Identity" и (в случае SQL-сервера) запрос на код в обработчик событий (медленный)
р><р класса="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 ">элемент blockquote>р><р класса="step_content "> 4-х<с sup>гоглоток>параметр "Автоматическое обновление" метод определяет Кодсотрудника как читать только колонки (что означает, что он не будет включен в окончательный пункт вставить) и вот что мы на самом деле хотим, так как это значение будет автоматически сгенерирован из базы данных сервера.
- наконец, дважды щелкните событие RowUpdated из bdpAdapter и добавьте следующий обработчик:
Р><Р класса="step_content ">тегв процедуре TWinForm1.BdpDataAdapter1_RowUpdated(отправителя: система.Объект е: Борланд.Данных.Поставщика.BdpRowUpdatedEventArgs)
вар
В УМК:BdpCommand
и начинается
если (электронная.Состояние=Состояние Обновления.Продолжения) и
(Эл.StatementType=StatementType.Вставить)
после
и начинается
УМК:=BdpCommand.Создать('выберите @@Identity',BdpConnection1)
с электронной.Строки['Кодсотрудника']:=Цмд.Executescalar так и
электронная.Строки.Метод acceptchanges
В конце
В конце р><р класса="step_content "> элемент blockquote>р><р класса="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 .Сеть:
- использовать пакет запросов (базы данных, очевидно, должен поддерживать это)
- использовать хранимые процедуры (команда Insert), имеющих в качестве выходного параметра “идентичность” значением (это самый быстрый и, таким образом, Рекомендуемый метод)
- ручки адаптера RowUpdated /событие rowupdating событие и выдать запрос "Select @@Identity" и (в случае SQL-сервера) запрос на код в обработчик событий (медленный)
р><р класса="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 ">элемент blockquote>р><р класса="step_content "> 4-х<с sup>гоглоток>параметр "Автоматическое обновление" метод определяет Кодсотрудника как читать только колонки (что означает, что он не будет включен в окончательный пункт вставить) и вот что мы на самом деле хотим, так как это значение будет автоматически сгенерирован из базы данных сервера.
- наконец, дважды щелкните событие RowUpdated из bdpAdapter и добавьте следующий обработчик:
Р><Р класса="step_content ">тегв процедуре TWinForm1.BdpDataAdapter1_RowUpdated(отправителя: система.Объект е: Борланд.Данных.Поставщика.BdpRowUpdatedEventArgs)
вар
В УМК:BdpCommand
и начинается
если (электронная.Состояние=Состояние Обновления.Продолжения) и
(Эл.StatementType=StatementType.Вставить)
после
и начинается
УМК:=BdpCommand.Создать('выберите @@Identity',BdpConnection1)
с электронной.Строки['Кодсотрудника']:=Цмд.Executescalar так и
электронная.Строки.Метод acceptchanges
В конце
В конце р><р класса="step_content "> элемент blockquote>р><р класса="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
By russiatips
Извлечения значений autoinc с бпр в Delphi 2005 : Несколько тысяч советов, которые сделают вашу жизнь проще.