Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.08.2011, 10:30
dnkSW dnkSW вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 4
Репутация: 10
По умолчанию FIBPlus - возврат значения из InsertReturning

Привет всем!

СУБД FB2.5 , Delphi 2010
Использую компоненту TpFIBQuery в ней такой SQL:
INSERT INTO myTable (field1,field2) VALUES (val1,val2) RETURNING id

Мой вопрос - как мне забрать это значение (id) с компоненты pFIBQuery ?

Есть тут знатоки FIBPlus ?
Ответить с цитированием
  #2  
Старый 12.08.2011, 11:13
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию http://www.fibplus.com/ru/fibplus/articles/4517.php

Нашёл вот что:
Цитата:
262.Добавлена поддержка новой возможности FB2. Новая функциональность заключается в синтаксисе:
Insert Into Table1 ...
RETURNING FIELD1,FIELD2...
Поддержка выражается в том, что если в датасете написан такой InsertSQL, то сразу же после срабатывания метода Post, те поля, значения которых запрос вернул через выражение RETURNING, будут обновлены в датасете. Это позволяет получать значения полей, которые сформировались триггерами без дополнительного вызова метода Refresh. Т.о. можно получить и значение первичного ключа, без предварительного обращения к генератору с клиента.
http://www.fibplus.com/ru/fibplus/articles/4517.php
т.е после запроса в датасете последняя запись будет с новым значением генератора. Возможно придётся использовать TpFIBВDataSet, хотя TpFIBQuery тоже должен возвращать записи.
Кстати обещанного примера с Returning Devrace так и не выложили на сайте, так что за ваш результат методом тыка буду очень вам признателен
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 12.08.2011 в 11:16.
Ответить с цитированием
  #3  
Старый 12.08.2011, 14:28
dnkSW dnkSW вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 4
Репутация: 10
По умолчанию

У меня ситуация немного другая....
Я qFIBQuery делаю запрос INSRET который дублирует текущую запись, потом мне надо спозиционировать Grid на неё... Вот для этого мне и хотелось получить ID с моего qFIBQuery запроса.
В данный момент я после выполнения этого запроса делаю ещё один
у же с qFIBDataSet (select MAX(sn.id) max_id from spr_nomenkl sn)
Ну и беру нужный мне ID уже с него...
Ответить с цитированием
  #4  
Старый 12.08.2011, 14:49
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

А что мешает делать INSERT с этого же датасета. FIBLUS жe позволяет вставлять INSERT отдельно от SELECT, надо только опцию автогенерации запроса убрать ".AutoRewriteSQLs=false". Можно даже отдельную транзакцию на write делать (всё кроме SELECT). И IMHO дополнительный SELECT делать не нужно.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 12.08.2011 в 14:57.
Ответить с цитированием
  #5  
Старый 12.08.2011, 18:32
dnkSW dnkSW вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Viajero
А что мешает делать INSERT с этого же датасета. FIBLUS жe позволяет вставлять INSERT отдельно от SELECT, надо только опцию автогенерации запроса убрать ".AutoRewriteSQLs=false". Можно даже отдельную транзакцию на write делать (всё кроме SELECT). И IMHO дополнительный SELECT делать не нужно.
Ну хорошо! Тогда вопрос - куда FibDataSet записывает то, что по Insert ему возвращает FBird ?
Т.е. откуда мне это значение снять?
Ответить с цитированием
  #6  
Старый 12.08.2011, 18:48
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Ну так смотри первый мой пост
Цитата:
т.е после запроса в датасете последняя запись будет с новым значением генератора
т е ответ на ваш вопрос - с последней записи датасета (даже по всей видимости не с последней, а с текущей сразу после выполнения INSERT).
Практически я это не использовал пока поэтому 100% уверенности нет что оно работает, но судя по объяснениям DEVRACE должно быть именно так.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 12.08.2011 в 18:53.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter