help!!!! помогите с lazarus!!! срочно!!!
Модератор: Модераторы
help!!!! помогите с lazarus!!! срочно!!!
здравствуйте=)
помогите пожалуйста!!!
база написана на firebird. для связи с lazarus использую IBConnection, SQLQuery1, SQLTransaction1, Datasource1. и dbgrid.
как сделать: 1) чтобы поле id заполнялось автоматически, и уникально.
2) чтобы поле можно было для заполнения cделать для заполнения выпадающим списком из другой таблицы. например, название предметов можно было выбрать из выпадающего списка (список уже существует в другой таблице).
3) чтобы таблицу можно было сохранить в excel.
базу писала с помощью ibexpert. там все всязи и автозаполнение работает, а в lazarus не перенеслось к сожалению...(((( надо бы сделать все, как в ibexpert чтобы работало...
заранее благодарю
помогите пожалуйста!!!
база написана на firebird. для связи с lazarus использую IBConnection, SQLQuery1, SQLTransaction1, Datasource1. и dbgrid.
как сделать: 1) чтобы поле id заполнялось автоматически, и уникально.
2) чтобы поле можно было для заполнения cделать для заполнения выпадающим списком из другой таблицы. например, название предметов можно было выбрать из выпадающего списка (список уже существует в другой таблице).
3) чтобы таблицу можно было сохранить в excel.
базу писала с помощью ibexpert. там все всязи и автозаполнение работает, а в lazarus не перенеслось к сожалению...(((( надо бы сделать все, как в ibexpert чтобы работало...
заранее благодарю
ancia
Поле id у Вас какого типа? Создали ли Вы генератор? Создали ли триггер для этой таблицы, который работает перед вставкой записи и вызывает генератор?
Поле id у Вас какого типа? Создали ли Вы генератор? Создали ли триггер для этой таблицы, который работает перед вставкой записи и вызывает генератор?
поле id типа integer. в автоинкрименте создан и генератор и триггер. в idexpert автозаполнение работает замечательно, а в lazarus, если оставить его пустым, то вылезает ошибка "project project1.exe raised exception class EDataBaseError with message: SQLQuery1: Field ID is required, but not supplied"
неужели никто не может помочь 
ancia писал(а):поле id типа integer. в автоинкрименте создан и генератор и триггер. в idexpert автозаполнение работает замечательно, а в lazarus, если оставить его пустым, то вылезает ошибка "project project1.exe raised exception class EDataBaseError with message: SQLQuery1: Field ID is required, but not supplied"
Тест запроса на вставку в студию !
запрос должен быть без указания поля ID
типа
insert into table1 (field1,field2) values ('1','2')
и значение поля id заполниться после commit
ancia
Внутри компонента SQLQuery случайно поля не определены принудительно? Если да, то смотрите там поле ID, в котором стоит галка "Required". Галку уберите и будет Вам щастье...
Внутри компонента SQLQuery случайно поля не определены принудительно? Если да, то смотрите там поле ID, в котором стоит галка "Required". Галку уберите и будет Вам щастье...
- Astralis
- новенький
- Сообщения: 45
- Зарегистрирован: 06.06.2007 20:33:05
- Откуда: Tvercity-Annet
- Контактная информация:
если вы используете Firebird версии 2.0 и выше, то используйте новый синтаксис команды insert
далее по правилам делаете рефреш новой строки строки запросом
и собственно данный результат вставляете в локальный набор данных
все это здорово вешается на event BeforePost
Код: Выделить всё
INSERT INTO TableName
(field1,field2...)
VALUES
(:val1,:val2...)
RETURNING :Id
далее по правилам делаете рефреш новой строки строки запросом
Код: Выделить всё
SELECT field1,field2...
FROM TableName
WHERE Id=:Id
и собственно данный результат вставляете в локальный набор данных
все это здорово вешается на event BeforePost
Ну и объясняют!
Можно не указывать в Insert автоинкременентное поле, допустим 'id':
как пример: само TableName (id,field1,field2...)..
Вставка
INSERT INTO TableName (field1,field2...) VALUES (:val1,:val2...) или явно указать null
INSERT INTO TableName (id,field1,field2...) VALUES (null,:val1,:val2...)
тогда можно создать триггер на вставку TableName:
https://firebirdsql.org/manual/generato ... owids.html
- что он делает: перед вставкой проверяется поле new.id на NULL, если так - то генерим новое значение от генератора и заносим в поле..
Добавлено спустя 4 минуты 58 секунд:
если вдруг нужно узнать новое значение и потом вписать в id
то нужно получить от генератора это значение..
и потом просто вписать в INSERT
как пример: само TableName (id,field1,field2...)..
Вставка
INSERT INTO TableName (field1,field2...) VALUES (:val1,:val2...) или явно указать null
INSERT INTO TableName (id,field1,field2...) VALUES (null,:val1,:val2...)
тогда можно создать триггер на вставку TableName:
Код: Выделить всё
CREATE TRIGGER trgTTEST_BI_V2 for TTEST
active before insert position 0
as
begin
if (new.id is null) then
begin
new.id = gen_id( 'GenID', 1 );
end
end
https://firebirdsql.org/manual/generato ... owids.html
- что он делает: перед вставкой проверяется поле new.id на NULL, если так - то генерим новое значение от генератора и заносим в поле..
Добавлено спустя 4 минуты 58 секунд:
если вдруг нужно узнать новое значение и потом вписать в id
то нужно получить от генератора это значение..
Код: Выделить всё
SELECT GEN_ID( <GeneratorName>, 1 ) FROM RDB$DATABASE;и потом просто вписать в INSERT
Код: Выделить всё
INSERT INTO TableName (id,field1,field2...) VALUES (:id,:val1,:val2...)Весна . активизировались студенты. мне уже пару раз предлагали купить код программу базы данных, тока код давно канул в лету. А новый писать лень.
ancia писал(а):2) чтобы поле можно было для заполнения cделать для заполнения выпадающим списком из другой таблицы. например, название предметов можно было выбрать из выпадающего списка (список уже существует в другой таблице).
Изначально никак (или писать все руками). Но в компонентах RX есть rxdbgrid, которая это умеет вроде как.
ancia писал(а):3) чтобы таблицу можно было сохранить в excel.
Изначально никак)) в любом случае вывод идет не через компоненты отображения данных (dbgrid), а доступа к данным, я не пользовался компонентами IB, в компонентах ZeosDB есть наметки, также как в LazReport. НУ или как всегда вручную.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
2. Это даже штатный грид умеет - надо просто правильно настроить
3. RxDBGrid выгружает данные в электронные таблицы - даже с формулами умеет (итоги). LazReport умеет выгружать. Но там есть 2 принципиальных недостатка:
1. Все числа выгружаются как текст - это пока не победимо.
2. Отчёт надо предварительно подготовить - чтобы поменьше было пересечений ячеек.
3. RxDBGrid выгружает данные в электронные таблицы - даже с формулами умеет (итоги). LazReport умеет выгружать. Но там есть 2 принципиальных недостатка:
1. Все числа выгружаются как текст - это пока не победимо.
2. Отчёт надо предварительно подготовить - чтобы поменьше было пересечений ячеек.
Ну и тему нашли... Автор, видимо, уже давно в армии 
