Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96

Редактирование данных Interbase

26.10.2014, 18:47. Показов 3239. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет ребят такой вопрос, как сделать редактирование в delphi бд? Делаю вот так не получается)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
DM.Studobn.Close;
DM.Studobn.Prepare;
DM.studobn.ParamByName('id_student').value:=DM.StudidId_student.Value;
DM.Studobn.ParamByName('FIO').Value:= RedPortf.Edit1.Text;
DM.Studobn.ParamByName('NOM_SPEC').Value:= RedPortf.Combobox1.Text;
DM.Studobn.ParamByName('KVAL').Value:= RedPortf.Combobox2.Text;
DM.Studobn.ParamByName('NOM_ZACH').Value:= RedPortf.Edit4.Text;
DM.Studobn.ParamByName('NAZ_GR').Value:= RedPortf.Edit5.Text;
DM.Studobn.ParamByName('TELEFON').Value:= RedPortf.Edit6.Text;
DM.Studobn.ParamByName('PASSWORD_ST').Value:= Pass;
//if (AddPortf.Image1.Picture<>nil) AND (AddPortf.dlgOpenPicture.FileName<>'') then
//DM.studdob.ParamByName('PHOTO').LoadFromFile(AddPortf.dlgOpenPicture.FileName);;
DM.Studobn.Transaction.StartTransaction;
DM.Studobn.ExecSQL;
DM.IBTransaction1.Commit;
DM.Studobn.Active:=false;
//конец
DM.StudID.Active:=False;
DM.StudID.Active:=True;
 
IDStud:=DM.studIDID_STUDENT.Value;
 
if RedPortf.Tag<>0 then IDStud:=RedPortf.Tag;
 
if DM.Studobn.Transaction.Active then
    DM.Studobn.Transaction.Rollback;
 
//при изменеии удаляем предыдцщие вложениЯя
if RedPortf.Tag<>0 then
begin
DM.Stud.Locate('ID_Student',IDStud,[]);
DM.Att.First;
while NOT DM.Att.Eof do DM.Att.Delete;
В studobn такой код:
SQL
1
2
3
4
5
6
7
8
9
UPDATE Obsh_sved SET FIO=:FIO,
NOM_SPEC=:NOM_SPEC,
NAZ_GR=:NAZ_GR,
KVAL=:KVAL,
TELEFON=:TELEFON,
PHOTO=:PHOTO,
NOM_ZACH=:NOM_ZACH,
PASSWORD_ST=:PASSWORD_ST
WHERE id_student=:id_student
В studId такой:
SQL
1
SELECT  id_student FROM OBSH_SVED  ORDER BY id_student DESC ROWS(1)
Помогите пожалуйста)

Добавлено через 4 часа 59 минут
Переписал, теперь редактирует, но выдает ошибку "Transaction is active". В чем проблема?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DM.Studobn.Active:=true;
  if DM.Studobn.Transaction.Active then
    DM.Studobn.Transaction.Rollback;
//сохраняем инфу о студенте
 
DM.Studobn.Open;
DM.Studobn.Edit;
DM.studobn.FieldByName('id_student').value:=RedPortf.Tag;
DM.Studobn.FieldByName('FIO').Value:= RedPortf.Edit1.Text;
DM.Studobn.FieldByName('NOM_SPEC').Value:= RedPortf.Combobox1.Text;
DM.Studobn.FieldByName('KVAL').Value:= RedPortf.Combobox2.Text;
DM.Studobn.FieldByName('NOM_ZACH').Value:= RedPortf.Edit4.Text;
DM.Studobn.FieldByName('NAZ_GR').Value:= RedPortf.Edit5.Text;
DM.Studobn.FieldByName('TELEFON').Value:= RedPortf.Edit6.Text;
DM.Studobn.FieldByName('PASSWORD_ST').Value:= Pass;
//if (AddPortf.Image1.Picture<>nil) AND (AddPortf.dlgOpenPicture.FileName<>'') then
//DM.studdob.ParamByName('PHOTO').LoadFromFile(AddPortf.dlgOpenPicture.FileName);;
DM.Studobn.Post;
DM.Studobn.Transaction.StartTransaction;
DM.IBTransaction2.Commit;
DM.Studobn.Active:=false;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2014, 18:47
Ответы с готовыми решениями:

Редактирование данных Delphi+Interbase
Есть код для добавления данных if DM.studdob.Transaction.Active then DM.studdob.Transaction.Rollback; //сохраняем инфу о студенте ...

Редактирование и удаление полей базы InterBase
Простите, что создаю очередную тему с таким вопросом, но в других темах я ответ на свой вопрос так и не нашёл. В общем, использую...

Базы данных Interbase
Пишу прогу где использую отчет RaveReports через базу данных. Компилирую на своей машине где установлен Дельфи все замечательно работает....

57
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
26.10.2014, 22:52
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  //DM.Studobn.Open; строки в комментах при обновлении забыть как страшный сон
  //DM.Studobn.Edit;
  DM.studobn.FieldByName('id_student').value:=RedPortf.Tag;
  DM.Studobn.FieldByName('FIO').Value:= RedPortf.Edit1.Text;
  DM.Studobn.FieldByName('NOM_SPEC').Value:= RedPortf.Combobox1.Text;
  DM.Studobn.FieldByName('KVAL').Value:= RedPortf.Combobox2.Text;
  DM.Studobn.FieldByName('NOM_ZACH').Value:= RedPortf.Edit4.Text;
  DM.Studobn.FieldByName('NAZ_GR').Value:= RedPortf.Edit5.Text;
  DM.Studobn.FieldByName('TELEFON').Value:= RedPortf.Edit6.Text;
  DM.Studobn.FieldByName('PASSWORD_ST').Value:= Pass;
  //DM.Studobn.Post;
  DM.Studobn.Transaction.StartTransaction;
  //DM.IBTransaction2.Commit; 
  //DM.Studobn.Active:=false;
  DM.Studobn.ExecSQL;
  DM.Studobn.Transaction.Commit;
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 00:01  [ТС]
Т
Цитата Сообщение от Скандербег Посмотреть сообщение
//DM.Studobn.Open; строки в комментах при обновлении забыть как страшный сон
* //DM.Studobn.Edit;
Без Edit он пишет no edit mode
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 00:10
Значит где-то проскакивает Post, метод который не может быть здесь использоваться.
Если применяется SQL запрос, то достаточно стартовать транзакцию, выполнить запрос (ExecSQL) и завершить транзакцию.
Ни о каком edit mode в этом случае речи быть не может.
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 00:23  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
Значит где-то проскакивает Post
Вот весь код в этой кнопке:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var
Pass,s,Fname:String;
i:integer;
j:integer;
IDStud:integer;
begin
PostMessage(Handle, InputBoxMessage, 0, 0);
Pass:=InputBox('Укажите пароль','Пароль для редактирования','');
 if Trim(Pass)='' then showmessage('Поле не может быть пустым')
 Else begin
  if DM.Studobn.Transaction.Active then
    DM.Studobn.Transaction.Rollback;
 
 
//сохраняем инфу о студенте
 
DM.studobn.fieldByName('id_student').value:=RedPortf.Tag;
DM.Studobn.fieldByName('FIO').Value:= RedPortf.Edit1.Text;
DM.Studobn.fieldByName('NOM_SPEC').Value:= RedPortf.Combobox1.Text;
DM.Studobn.fieldByName('KVAL').Value:= RedPortf.Combobox2.Text;
DM.Studobn.fieldByName('NOM_ZACH').Value:= RedPortf.Edit4.Text;
DM.Studobn.fieldByName('NAZ_GR').Value:= RedPortf.Edit5.Text;
DM.Studobn.fieldByName('TELEFON').Value:= RedPortf.Edit6.Text;
DM.Studobn.fieldByName('PASSWORD_ST').Value:= Pass;
//if (AddPortf.Image1.Picture<>nil) AND (AddPortf.dlgOpenPicture.FileName<>'') then
//DM.studdob.ParamByName('PHOTO').LoadFromFile(AddPortf.dlgOpenPicture.FileName);;
DM.Studobn.Transaction.StartTransaction;
DM.Studobn.ExecSQL;
DM.Studobn.Transaction.Commit;
 
//конец
DM.StudID.Active:=False;
DM.StudID.Active:=True;
 
IDStud:=DM.studIDID_STUDENT.Value;
 
if RedPortf.Tag<>0 then IDStud:=RedPortf.Tag;
 
if DM.Studobn.Transaction.Active then
    DM.Studobn.Transaction.Rollback;
 
//при изменеии удаляем предыдцщие вложениЯя
if RedPortf.Tag<>0 then
begin
DM.Stud.Locate('ID_Student',IDStud,[]);
DM.Att.First;
while NOT DM.Att.Eof do DM.Att.Delete;
end;
Post'a вроде нет , а ошибка "not in edit mode"(
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 00:28
Действительно, "мистика". Скорее всего, эта ошибка в другом месте (как предположение).
Скинуть проект есть возможность? На фрагменте кода не разбежаться.

Не по теме:

Если постоянно возникает ошибка "Trasaction active", то давить ее надо не откатом, а подтверждением транзакции.

0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 00:35  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
Скинуть проект есть возможность?
Да возможность есть
Вот ссылка
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 00:38
Ссылка сама на себя.
Архив лучше прицепить в пост.

Упс. ссылка сработала
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 00:41  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
Ссылка сама на себя.
Хех а у меня работает)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 02:16
Чего нарыто.
ParamByName надо вернуть. В этом кралась ошибка. Вина моя - вначале не обратил внимания, что ParamByName были заменены на FieldByName. Нельзя. В запросе параметры же.

Если есть активный триггер на генерацию уникального идентификатора (а он есть и он активный), то уж никак значение этого поля записывать из программы нельзя.
Т.е., этой строки быть не должно: DM.studobn.FieldByName('id_student').val ue:=RedPortf.Tag;.
Либо удалять (деактивировать) триггер и вызывать из проги функцию генератора
(типа 'SELECT GEN_ID(GEN_OBSH_SVED_ID, 1) AS ID FROM RDB$DATABASE') для получения следующего значения идентификатора и подставлять в это поле.
Так нужно делать еще и потому, что полученный идентификатор используется в дальнейшем.

В таком виде запись сохраняется:
Delphi
1
2
3
4
5
6
7
8
9
10
11
//DM.studobn.FieldByName('id_student').value:=RedPortf.Tag;
  DM.Studobn.ParamByName('FIO').Value:= RedPortf.Edit1.Text;
  DM.Studobn.ParamByName('NOM_SPEC').Value:= RedPortf.Combobox1.Text;
  DM.Studobn.ParamByName('KVAL').Value:= RedPortf.Combobox2.Text;
  DM.Studobn.ParamByName('NOM_ZACH').Value:= RedPortf.Edit4.Text;
  DM.Studobn.ParamByName('NAZ_GR').Value:= RedPortf.Edit5.Text;
  DM.Studobn.ParamByName('TELEFON').Value:= RedPortf.Edit6.Text;
  DM.Studobn.ParamByName('PASSWORD_ST').Value:= pass;
  DM.Studobn.Transaction.StartTransaction;
  DM.Studobn.ExecSQL;
  DM.Studobn.Transaction.Commit;
Никчемные FK в т. OBSH_SVED надо удалить. Только мешают.
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 02:29  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
В таком виде запись сохраняется:
Большое спасибо за все. Но теперь выдает ошибку "field Fio not found".
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 02:41
В моей версии проги этой ошибки нет. Сохраняются все данные.
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 02:43  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
В моей версии проги этой ошибки нет. Сохраняются все данные.
А какая версия Delphi у вас?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 02:45
Delphi 2010
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 02:46  [ТС]
А вот теперь вопросец, если не секрет, как запустить на 2010 Delphi проект из XE5?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 02:47
Я не разбирался что там за возня происходит после сохранения данных в таблицу OBSH_SVED и просто обошел все операторы, которые были дальше. Может быть в тех строках эта ошибка возникает...

Переделка из ХЕ в 2010 такая:
Нужно удалить все квалификаторы модулей в uses.
К примеру, вместо Vcl.Forms пишется, как и в прежних версиях просто Forms.
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 02:51  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
Я не разбирался что там за возня происходит после сохранения данных в таблицу OBSH_SVED
Все кроме
Цитата Сообщение от Скандербег Посмотреть сообщение
//DM.studobn.FieldByName('id_student').val ue:=RedPortf.Tag;
* DM.Studobn.ParamByName('FIO').Value:= RedPortf.Edit1.Text;
* DM.Studobn.ParamByName('NOM_SPEC').Value := RedPortf.Combobox1.Text;
* DM.Studobn.ParamByName('KVAL').Value:= RedPortf.Combobox2.Text;
* DM.Studobn.ParamByName('NOM_ZACH').Value := RedPortf.Edit4.Text;
* DM.Studobn.ParamByName('NAZ_GR').Value:= RedPortf.Edit5.Text;
* DM.Studobn.ParamByName('TELEFON').Value: = RedPortf.Edit6.Text;
* DM.Studobn.ParamByName('PASSWORD_ST').Va lue:= pass;
* DM.Studobn.Transaction.StartTransaction;
* DM.Studobn.ExecSQL;
* DM.Studobn.Transaction.Commit;
закомментировал и просто не находит поле FIO)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 02:57
Заархивируйте два файла Unit10.pas и Unit10.dfm и прицепите к следующему сообщению.
Да, еще Unit2.pas и Unit2.dfm
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 96
27.10.2014, 03:10  [ТС]
вот

Добавлено через 57 секунд
Держите!
https://yadi.sk/d/YJQyMZ6XcJ6Yj
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
27.10.2014, 03:19
Вот что вижу:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
DM.studobn.fieldByName('id_student').value:=RedPortf.Tag;
DM.Studobn.fieldByName('FIO').Value:= RedPortf.Edit1.Text;
DM.Studobn.fieldByName('NOM_SPEC').Value:= RedPortf.Combobox1.Text;
DM.Studobn.fieldByName('KVAL').Value:= RedPortf.Combobox2.Text;
DM.Studobn.fieldByName('NOM_ZACH').Value:= RedPortf.Edit4.Text;
DM.Studobn.fieldByName('NAZ_GR').Value:= RedPortf.Edit5.Text;
DM.Studobn.fieldByName('TELEFON').Value:= RedPortf.Edit6.Text;
DM.Studobn.fieldByName('PASSWORD_ST').Value:= Pass;
//if (AddPortf.Image1.Picture<>nil) AND (AddPortf.dlgOpenPicture.FileName<>'') then
//DM.studdob.ParamByName('PHOTO').LoadFromFile(AddPortf.dlgOpenPicture.FileName);;
DM.Studobn.Transaction.StartTransaction;
DM.Studobn.ExecSQL;
DM.Studobn.Transaction.Commit;
Где здесь ParamByName и закомментированная первая строка?
Не все благополучно с переносом предлагаемого кода в королевстве датском.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2014, 03:19
Помогаю со студенческими работами здесь

Фильтрация данных из interbase
Доброе утро. У меня следующая проблема возникла. Я соединяю бд из interbase с Delphi с помощью DataModule. Фильтрация данных происходит,...

извлечение данных interbase 6.5
как извлечь данные из таблицы в массив ,т.е. полностью ее скопировать в двемерный массив Добавлено через 17 часов 23 минуты ...

Добавление в базу данных interbase
Вобщим так! У мну есть база данных написана на интербейсе я использовал для вывода данных такие компоненты: datasours query и dbgrid ...

вопрос по базе данных на Interbase
Нужно к готовой программе (Delphi) написать базу, она была, но потеряли, прога не моя. Там многие формы не открываются, сообщения типа:...

Вывод данных с базы данных через компоненты Interbase
Здравствуйте, пытаюсь вывести данные с базы данных с помощью компонентов Interbase, но не выходит. Размещаю на форме: - IBDatabase...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru