Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2011, 13:29   #1
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию Insert в базу Firebird

Есть в базе таблица. Posada (Id_posada, posada).
На форме ZeosConnection, ZQuery, DataSours1,DBGrid, Button.
Проблема с добавлением даных в базу, поле Id_posada - автоинкрементное, через IBExpert создан генератор.
Как в делфи вызвать этот генератор что бы он сгенерировал ID для записи?
alexandro704 вне форума Ответить с цитированием
Старый 07.05.2011, 16:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

никак не надо вызывать генератор.
обычно применяется два варианта (какой именно в Firebird не помню, искать лень, Вы легко методом тыка проверите)

вариант 1.
Поле, которое AUTO-INCREMENT вообще исключается из запроса:
Код:
ZQuery.Close;
ZQuery.SQL.Text  := 'INSERT INTO Posada( posada ) VALUES ( ТутЗначениеВставляемогоПоляПосада )';
ZQuery.ExecSQL;
вариант 2.
Код:
'INSERT INTO Posada(Id_posada, posada ) VALUES ( null, ТутЗначениеВставляемогоПоляПосада )
я на 99% уверен, что пройдёт первый вариант..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2011, 10:45   #3
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию

Код:
ZQuery.Close;
ZQuery.SQL.Text  := 'INSERT INTO Posada(Id_posada, posada ) VALUES ( null, ТутЗначениеВставляемогоПоляПосада )';
ZQuery.ExecSQL;
А как правильно сделать что бы поместить туда значение из DBEdit1?
Код:
'INSERT INTO Posada(Id_posada, posada ) VALUES ( null, '+DBEdit1.text+' )';
Оно просто добавляет пустое поле в базу.
А как бы так организовать что бы то что добавило сразу же показывало в DBGrid?
alexandro704 вне форума Ответить с цитированием
Старый 08.05.2011, 10:53   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
ZQuery.SQL.Text:='INSERT INTO Posada(posada) VALUES ('''+DBEdit1.text+''')';
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.05.2011, 13:45   #5
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию

Объясните мне тормозу как это должно быть.
Есть на форме PosadaQuery,DataSours1,DBEdit1,DBGr id1 , Button1(Додати), Button2(Вихід).

Допутим при загрузке формы база пустая.
Дальше я ввожу в DBEdit1 какую небуть должность (Техник), жму Button1(Додати) и в DBGrid1 первым номером стоит Техник, и так дальше снова ввожу в DBEdit1 какую небуть должность (Лаборант), жму Button1(Додати) и в DBGrid1 вторым номером стоит Лаборант.....

Помогите с реализацыей .
alexandro704 вне форума Ответить с цитированием
Старый 09.05.2011, 12:33   #6
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию

Заменил DBEdit на Edit и в Button1(Додати) я прописал:
Код:
ZQuery.Close;
ZQuery.SQL.Text  := 'INSERT INTO Posada(Id_posada, posada ) VALUES ( null, '''+Edit1.Text+''' )';
ZQuery.ExecSQL;
Всё работает. Но как сделать что бы после добавления обновился DBGrid1 с уже добавленой строчкой?
alexandro704 вне форума Ответить с цитированием
Старый 09.05.2011, 12:39   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Нужно подтвердить транзакцию после вставки. Иначе запись не добавится. Или откатить ее.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.05.2011, 12:42   #8
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Нужно подтвердить транзакцию после вставки. Иначе запись не добавится. Или откатить ее.
Всё в базу заносит. А как её подтвердить?
Код:
If PosadaQuery.Modified then PosadaQuery.Post;
Правда почемуто Edit не поддерживает руский язык. В Edit записую по руски, а в базу оно заносит иероглифы.

Последний раз редактировалось alexandro704; 09.05.2011 в 12:48.
alexandro704 вне форума Ответить с цитированием
Старый 10.05.2011, 16:23   #9
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

ibtransaktion.commint;
PosadaQuery.active:=true;

типо так

и таблицу в базе кодировку выбери win1251
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Insert Progsenya SQL, базы данных 8 19.02.2011 18:29
Firebird - fdb файл увеличивается при записи полей, но если базу очищаешь, размер остается таким же RuVarez БД в Delphi 1 23.09.2010 18:09
sql server+delph,при попытке сохранить базу в дельфи выдает ошибку adotable dataset not in edit or insert betirsolt БД в Delphi 3 07.05.2010 21:44
procedure Insert keen86nv Помощь студентам 2 01.04.2010 17:37
Insert - ? Evgenii БД в Delphi 2 06.07.2009 02:24