Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Как получить значение поля?   Найти похожие ветки 

 
ККВ   (2006-10-03 14:25) [0]

Здравствуйте.
Использую IBQuery для вставки записи. Текст: insert into table (name) values ("values") returning id. Вопрос в следующем. Как получить это самое возвращаемое значение? IBQuery.FieldByName("id").AsInteger ругается. Говорит нет такого поля id.
Заранее спасибо.


 
clickmaker ©   (2006-10-03 14:29) [1]

через select, видимо


 
ККВ   (2006-10-03 14:33) [2]

Мне надо именно через insert, select не подойдет.


 
clickmaker ©   (2006-10-03 14:34) [3]

почему?


 
ККВ   (2006-10-03 14:40) [4]

так проще.


 
clickmaker ©   (2006-10-03 14:42) [5]

не аргумент


 
ККВ   (2006-10-03 14:48) [6]

Да, можно получить значение генератора select-ом, потом вставить его в поле id. Но зачем? Если все это можно сделать в insert.


 
clickmaker ©   (2006-10-03 14:54) [7]

вообще-то я имел в виду наоборот
вставить инсертом, а потом селектом получить id последней вставки


 
Johnmen ©   (2006-10-03 15:01) [8]


> ККВ   (03.10.06 14:48) [6]
> Если все это можно сделать в insert.


Кто сказал, что можно? Откуда сведения?


 
ККВ   (2006-10-03 15:05) [9]

> [8] Johnmen ©   (03.10.06 15:01)
>
> > ККВ   (03.10.06 14:48) [6]
> > Если все это можно сделать в insert.
>
>
> Кто сказал, что можно? Откуда сведения?

Попробуйте в IBExpert выполнить вставку записи с returning на конце. И в случае автоинкрементного поля id, insert вернет это новое значение id.


 
Johnmen ©   (2006-10-03 15:08) [10]

Это эмуляция от ИБЭксперта. Т.е. суть от пользователя он скрывает. А суть такова, что сначала выполняется запрос на получение очередного значения генератора, а потом идет инсерт с этим значением.
ЗЫ
Никаких автоинкрементных полей в IB/FB/YA НЕТУ!


 
k2 ©   (2006-10-03 15:10) [11]

ККВ   (03.10.06 15:05) [9]
такое есть в оракле, только синтаксис примерно
insert into (...) values() returning <field_value> into <variable>
может и здесь?


 
sniknik ©   (2006-10-03 15:11) [12]

> returning id.
а это не параметр?
тогда вместо FieldByName можно попробовать ParamByName

по аналогии с ADO/mssql, где возвращаемые процедурой аутпут параметры, значения, можно получить если подставить и указать у них свойство возвращаемый.
т.е.  
Текст: insert into table (name) values ("values") returning :id
в свойствах ставим pdOutput
после выполнения получаем IBQuery.ParamByName("id").AsInteger

(ну, попробовать так, с ib дел мало имел, могу обмануться)


 
sniknik ©   (2006-10-03 15:13) [13]

> [8]...[10]...[11]
а, понятно. значит [12] лажа, а с ораклом вожможно пройдет


 
ККВ   (2006-10-03 15:14) [14]

>> Это эмуляция от ИБЭксперта. Т.е. суть от пользователя он скрывает. А
>>суть такова, что сначала выполняется запрос на получение очередного
>>значения генератора, а потом идет инсерт с этим значением.

В делфи такая конструксия тоже без ошибок отрабатывает. Так что это не эмуляция.

>>Никаких автоинкрементных полей в IB/FB/YA НЕТУ!
Я не так выразился.


 
unknown ©   (2006-10-03 15:15) [15]

Уже было обсуждение о неподдержке TIBQuery новых фишек.
TIBSQL нормально возвращает по FieldByName.


 
Johnmen ©   (2006-10-03 15:19) [16]

И ещё. Предикат RETURNING используется при вызове ПРОЦЕДУР, возвращающих значение.


> Так что это не эмуляция.


Ну, тебе видней.


 
unknown ©   (2006-10-03 15:21) [17]


> Johnmen ©   (03.10.06 15:19) [16]
> И ещё. Предикат RETURNING используется

returning в fb2 используется в insert запросах.


 
ККВ   (2006-10-03 15:21) [18]

> [15] unknown ©   (03.10.06 15:15)
> Уже было обсуждение о неподдержке TIBQuery новых фишек.
> TIBSQL нормально возвращает по FieldByName.

Попробую через TIBSQL, хотя хотелось бы через Query...


 
Johnmen ©   (2006-10-03 15:27) [19]


> unknown ©   (03.10.06 15:21) [17]
> returning в fb2 используется в insert запросах.


Возможно. Новая фишка. Только я не знаю, что у автора 2.0 Да и ты тоже...:)


 
ККВ   (2006-10-03 15:33) [20]

> [19] Johnmen ©   (03.10.06 15:27)
>
> > unknown ©   (03.10.06 15:21) [17]
> > returning в fb2 используется в insert запросах.
>
>
> Возможно. Новая фишка. Только я не знаю, что у автора 2.0
> Да и ты тоже...:)

Забыл указать. Каюсь))


 
Виталий Панасенко   (2006-10-03 15:50) [21]

FIBPlus это поддерживают


 
ANB ©   (2006-10-03 16:00) [22]

Надо результат загонять в оут параметр и доставать потом из параметров. Во всяком случае - так в оракле. Сомневаюсь, что в ФБ по другому.


 
ККВ   (2006-10-03 16:09) [23]

> [22] ANB ©   (03.10.06 16:00)
> Надо результат загонять в оут параметр и доставать потом
> из параметров. Во всяком случае - так в оракле. Сомневаюсь,
> что в ФБ по другому.

В ФБ так не пройдет.


 
ККВ   (2006-10-03 16:09) [24]

> [23] ККВ   (03.10.06 16:09)
> > [22] ANB ©   (03.10.06 16:00)
> > Надо результат загонять в оут параметр и доставать потом
>
> > из параметров. Во всяком случае - так в оракле. Сомневаюсь,
>
> > что в ФБ по другому.
>
> В ФБ так не пройдет.

так можно только в процедурах.


 
ККВ   (2006-10-03 16:10) [25]

> [21] Виталий Панасенко   (03.10.06 15:50)
> FIBPlus это поддерживают

Надо в IBX


 
Desdechado ©   (2006-10-03 17:44) [26]

> Надо в IBX
есть 2 куба досок, нужно построить 2-этажный кирпичный дом


 
PEAKTOP ©   (2006-10-03 18:39) [27]


> Надо в IBX

Не получиться. IBX навороты FireBird v2.0 не поддерживают. А фигня вся в том,  что надо малость подправить разбор IBQuery.Params :TParams, которые зашиты в DB.PAS. Менять что-либо в исходниках VCL не рекомендуют даже сами Борланды.
Я не сказал, что не решаемо в принципе. Месяц назад сам нае...ся с конструкцией EXECUTE BLOCK, правда у меня своя библиотека компонент доступа, основанная на исходниках IBX, но подправляемая уже давно, так что изменена уже до неузнаваемости.
Так что варианта два
1) бери исходники IBX и правь.
2) если в лом самому возиться и не интересно, то возьми FIBPlus. В принципе, неплохие компоненты доступа, хотя не самые быстрые, зато если начинаешь с нуля, не надо париться. все под рукой.


 
Виталий Панасенко   (2006-10-04 09:05) [28]

На счет
> 2) если в лом самому возиться и не интересно, то возьми
> FIBPlus. В принципе, неплохие компоненты доступа, хотя не
> самые быстрые, зато если начинаешь с нуля, не надо париться.
>  все под рукой.

- не совсем соответсвует действительности
http://www.delphiplus.org/articles/tests/fibplus_ibx&dbexpress.html


 
PEAKTOP ©   (2006-10-04 11:27) [29]


> - не совсем соответсвует действительности

http://www.delphiplus.org пренадлежит (или финансируется, не помню точно) компании, занимающиеся производством FIBPlus. Поэтому я бы не стал столь доверчиво относиться к статистике на этом сайте. Понятно, что только идиот будет хаять тот продукт, который продает.
Кстати, в той статистике все приведенные данные абсолютная правда. Сам тестировал, правда в немножко других условиях и на реальной базе, но имел приблизительно похожие результаты.
Только вот автор(ы) почему-то забыл включить в сравнительный анализ компоненты IBObjects, а также Interbase API (коими пользуются все PHP-кодеры), интересно, почему ?


 
Виталий Панасенко   (2006-10-04 12:29) [30]

Хостинг предоставлен Devrace. На счет АПИ - тоже можно пользоваться. Весь ? - зачем ? Удобно ? не очень... Да и вопрос был О КОМПОНЕНТАХ доступа...Хотя, совсем другой был ? :-)))


 
VALUA   (2006-10-04 13:16) [31]

Сделать хранимую процедуру для вставки новой записи , хранимая процедура возвращает последнее значение генератора , в таблице поле назовем KOD -
ZN_KOD := IBStoredProc.ParamByName("KOD") .


 
Сало   (2006-10-04 13:21) [32]


> http://www.delphiplus.org/articles/tests/fibplus_ibx&dbexpress.
> html

Ну не надо эту хрень постить еще тут, Бузз сам поиздевался над ее автором на гмейне.
Вообще- юзай API, но не напрямую, а через простые обертки - таких много, например UIB


 
Johnmen ©   (2006-10-04 13:28) [33]


> Ну не надо эту хрень постить еще тут


На основании каких фактов утверждается, что "хрень"?


> Бузз сам поиздевался над ее автором на гмейне.


А конструктивное он что-нибудь сказал? Или только издевался?


 
Сало   (2006-10-04 13:33) [34]

Канэшна

Я бы добавил приблизительно такой комментарий.

Скажем так... Фактические результаты (то бишь цифирки) может быть и
правильные... Вряд ли бы автор стал их придумывать.  :)  Но вот
интерпретация этих результатов излишне обобщена. Глядя в код можно
сказать за счет чего возникает разница скоростей  IBSQL  и FIBQuery. Она
возникает за счет употребления метода FieldByName  огромное количество
раз.  В FIBPlus этот метод несколько побыстрей чем в других компонентах.
Т.е. если бы автор теста докопался бы до этой причины, и сделали вывод
именно про метод  FieldByName думаю возражений ни у кого не возникло бы.
Автор  же сделал выводы более общие, которые мягко говоря не всегда
верны. Хотя бы потому что если делать доступ через Fields[xxx]   то
разница будет в пределах погрешности изменений, а метод FieldByName это
в общем-то ленивый и в любом случае низкоскоростной вариант, который не
рекомендуется использовать в критичных по скорости местах... вне
зависимости от того что используешь, фибплюс или ибх или еще что. Ну и
сравнивать FIBQuery с  IBQuery действительно нельзя. В первом случае при
фетче заполняется всего один "буфер записи" причем не фибплюсами а
непосредственно клиентской библиотекой. Во втором случае же случае кроме
того результат фетча дополнительно копируется в еще и буфер компонента
IBQuery... т.е. фактически сравниваем несравнимое.

Ну и еще один вывод из вышесказанного... Характеристики железа, сервера,
базы данных... все это не имеет никакого значения для результатов ЭТОГО
теста. Имеет значение только исходный код теста... который в отличие от
несущественных параметров не опубликован в открытую, а лишь прилагается
отдельным файлом.

ЗЫ. Прошу не счесть это за антирекламу фибплюс


Вот что сказал разработчик Яффила Олег Лоа

Гм, автор тестировал FETECH на клиента. При этом обработки никакой не было. Ну так пусть он засунет себе компонеты в жопу, ибо если будет такая задача и будут проблемы с производительностью, то любой нормальный проектировщик выберет решение написать старницу когда с использованием функций API.


 
Johnmen ©   (2006-10-04 13:41) [35]

Всё понятно.
Оба прикалываются, делают вид, что не поняли сути. А м.б. и не поняли...
А Лоа ещё и хамит.
Суть же проста, как первый трактор: Что быстрее? И всё! И не надо там ничего ковырять, делать умное лицо, отвлекаться на частности.
А то развели демагогию. Вместо того, чтобы просто, с обоснованием, сказать, если не согласны, что "Фибы самые медленные".


 
Сало   (2006-10-04 13:46) [36]


> А то развели демагогию. Вместо того, чтобы просто, с обоснованием,
>  сказать, если не согласны, что "Фибы самые медленные".

Ага, автор Фибов такое будет говорить...


 
ККВ   (2006-10-04 14:47) [37]

Всем спасибо. Пришлось использовать процеду. Тема закрыта



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.041 c
15-1164194164
Qwee
2006-11-22 14:16
2006.12.10
Помогите решить задачу!


2-1164221667
xan001
2006-11-22 21:54
2006.12.10
excel+delphi


15-1164108370
Elen
2006-11-21 14:26
2006.12.10
Вопрос о стандартах


6-1143067330
Vovanchik
2006-03-23 01:42
2006.12.10
Аудио чат


15-1164033526
Beavercrazy
2006-11-20 17:38
2006.12.10
Живо ли еще разрешение 800*600?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский