help!!!! помогите с lazarus!!! срочно!!!

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

help!!!! помогите с lazarus!!! срочно!!!

Сообщение ancia » 18.01.2010 02:29:18

здравствуйте=)
помогите пожалуйста!!!
база написана на firebird. для связи с lazarus использую IBConnection, SQLQuery1, SQLTransaction1, Datasource1. и dbgrid.
как сделать: 1) чтобы поле id заполнялось автоматически, и уникально.
2) чтобы поле можно было для заполнения cделать для заполнения выпадающим списком из другой таблицы. например, название предметов можно было выбрать из выпадающего списка (список уже существует в другой таблице).
3) чтобы таблицу можно было сохранить в excel.
базу писала с помощью ibexpert. там все всязи и автозаполнение работает, а в lazarus не перенеслось к сожалению...(((( надо бы сделать все, как в ibexpert чтобы работало...
заранее благодарю
ancia
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.01.2010 02:09:25

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение Vadim » 18.01.2010 04:22:14

ancia
Поле id у Вас какого типа? Создали ли Вы генератор? Создали ли триггер для этой таблицы, который работает перед вставкой записи и вызывает генератор?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение ancia » 18.01.2010 22:14:29

поле id типа integer. в автоинкрименте создан и генератор и триггер. в idexpert автозаполнение работает замечательно, а в lazarus, если оставить его пустым, то вылезает ошибка "project project1.exe raised exception class EDataBaseError with message: SQLQuery1: Field ID is required, but not supplied"
ancia
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.01.2010 02:09:25

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение ancia » 20.01.2010 00:09:56

неужели никто не может помочь :(
ancia
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.01.2010 02:09:25

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение alexmai » 21.01.2010 11:47:36

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
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение Vadim » 21.01.2010 12:20:02

ancia
Внутри компонента SQLQuery случайно поля не определены принудительно? Если да, то смотрите там поле ID, в котором стоит галка "Required". Галку уберите и будет Вам щастье...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение Astralis » 21.01.2010 13:48:44

если вы используете Firebird версии 2.0 и выше, то используйте новый синтаксис команды insert
Код: Выделить всё
INSERT INTO TableName
(field1,field2...)
VALUES
(:val1,:val2...)
RETURNING :Id

далее по правилам делаете рефреш новой строки строки запросом
Код: Выделить всё
SELECT field1,field2...
FROM TableName
WHERE Id=:Id

и собственно данный результат вставляете в локальный набор данных
все это здорово вешается на event BeforePost
Аватара пользователя
Astralis
новенький
 
Сообщения: 45
Зарегистрирован: 06.06.2007 20:33:05
Откуда: Tvercity-Annet

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение ruslba » 26.03.2017 19:08:08

Ну и объясняют!
ruslba
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.03.2017 12:46:31

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение olegy123 » 26.03.2017 20:15:45

Можно не указывать в 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:
Код: Выделить всё
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...)
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение DYUMON » 27.03.2017 06:44:40

Весна . активизировались студенты. мне уже пару раз предлагали купить код программу базы данных, тока код давно канул в лету. А новый писать лень.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение java73 » 27.03.2017 09:30:30

ancia писал(а):2) чтобы поле можно было для заполнения cделать для заполнения выпадающим списком из другой таблицы. например, название предметов можно было выбрать из выпадающего списка (список уже существует в другой таблице).

Изначально никак (или писать все руками). Но в компонентах RX есть rxdbgrid, которая это умеет вроде как.
ancia писал(а):3) чтобы таблицу можно было сохранить в excel.

Изначально никак)) в любом случае вывод идет не через компоненты отображения данных (dbgrid), а доступа к данным, я не пользовался компонентами IB, в компонентах ZeosDB есть наметки, также как в LazReport. НУ или как всегда вручную.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение alexs » 27.03.2017 09:56:59

2. Это даже штатный грид умеет - надо просто правильно настроить
3. RxDBGrid выгружает данные в электронные таблицы - даже с формулами умеет (итоги). LazReport умеет выгружать. Но там есть 2 принципиальных недостатка:
1. Все числа выгружаются как текст - это пока не победимо.
2. Отчёт надо предварительно подготовить - чтобы поменьше было пересечений ячеек.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: help!!!! помогите с lazarus!!! срочно!!!

Сообщение slyubez » 28.03.2017 14:11:21

Ну и тему нашли... Автор, видимо, уже давно в армии :)
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 33

Рейтинг@Mail.ru