установка генератора ч-з параметр TpFIBDataSet

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

установка генератора ч-з параметр TpFIBDataSet

Сообщение mdfv » 24 май 2006, 18:13

ч-з TpFIBDataSet получается значение генератора
и должно устанавливаться здесь же, но не хочет.

SelectSQL := 'select GEN_ID(GEN_NPP,0) as GENPP from RDB$DATABASE'
UpdateSQL := 'set generator GEN_NPP to :GENPP';

пытаюсь подставить значение ч-з FieldByName('GENPP').AsInteger:=1234;
и при выполнении ругается на ':' , FIBPlus ,насколько я понял, не находит ключевых слов update,insert,delete и подстановку параметра не производит.

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

Можно-ли обойти эту проблему?

FIBPlus 6.4.1

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 24 май 2006, 18:34

параметры в set generator использовать нельзя.
используй макросы FIBPlus.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 15 июн 2006, 18:21

UpdateSQL:='select GEN_ID(GEN_NPP, z(:GENPP)-GEN_ID(GEN_NPP, 0)) from RDB$DATABASE'
где z() - стандартная функция из rfunc
Можно использовать любую UDF, возращающую нужное значение.
Без UDF у меня не получилось передать параметр - ругается на "Data Type Unknown", даже с CAST(:GENPP as integer)

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 16 июн 2006, 02:28

Зачем тебе прямо в программе менять значение генератора?

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 16 июн 2006, 08:02

CyberMax писал(а):Зачем тебе прямо в программе менять значение генератора?
Бывает необходимо менять значение генератора при конвертации данных. В этом случае можно в тексте SQL вместо параметра забивать необходимое значение. Котороче формировать текст SQL в тот момент, когда это необходимо и с необходимым значением параметра

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 16 июн 2006, 08:08

Отдает каким-то извращением... Можешь привести конкретный пример данной необходимости?

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 16 июн 2006, 09:21

CyberMax писал(а):Отдает каким-то извращением... Можешь привести конкретный пример данной необходимости?
Ну, вот, сразу и извращенцем назвали.
Сейчас за давностью лет до деталей не вспомню, но ситуация была такая. переводил БД из Paradox в IB. При конвертации таблиц необходимо было обеспечить точное соответсствие первичных ключей.
Самым удообным оказалось при вставке записей в IB таблицы не назначать новый ключ по генератору, а присваивать ему значение из соответствующей старой таблицы. После заливки в IB таблицы проверяются мах значения ключей и назначаются значения генераторам.
С чем могу согласиться, - это исключительная ситуация и при нормальной работе с БД не встречается.

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 16 июн 2006, 10:07

CyberMax писал(а):Зачем тебе прямо в программе менять значение генератора?
Номер формируемого платежного поручения например для оправки в ч-з клиент-банк, в нем кроме всего прочего вручную платежки клепают или из других программ подгружают, а нумерация не должна пересекаться с моей программой, да и в начале года нумерацию можно обнулить.
ЗЫ. Сделал установку генераторов ч-з макросы.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 16 июн 2006, 18:14

SAMZ писал(а):После заливки в IB таблицы проверяются мах значения ключей и назначаются значения генераторам.
А, тогда другое дело :).

Ответить