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

Изменения в базе данных не сохраняются

22.07.2013, 17:19. Показов 2948. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Я начал делать программу-регистрационный лист для соревнований, где сохраняются команды.
Программа устроена следующим образом: есть база данных, в ней есть таблица "Общая таблица участников", есть таблица "Пары", есть таблица "Таблица пар".
Когда участник приходит, то он заполняет регистрационный лист программы. Там он указывает имя, фамилию, отчество, телефон, и название команды. После нажатия кнопки сохранения регистрации сначала в таблицу "Общая таблица участников" заносятся имя, фамилия, и т.п.. Если команды не существует, то в таблице "Таблица пар" создается строка с его (регистрирующегося участника) ключём (ключ определяется с помощью комбинации функций SelectPerson и GetUsual - код приложен ниже). ключ сохраняется в первое поле "таблицы пар". В "Парах" создается строка с полем "общий номер пары" и полем "место в соревнованиях". Общий номер пары определяется по ключу в "таблице пар". Место в соревнованиях определяется после соревнований. Если участник пришел после первого, то просто в таблице пар сохраняется его ключ в другом поле.
Но когда я написал код к программе, я обнаружил, что когда сохраняется команда в "Парах", то создается лишь пустая строка, а значение "общий номер пары" остается пустым. Подскажите - в чём проблема?
Заранее благодарен.

Код SelectPerson:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function TFRegistrationForm.SelectPerson(phone:string):boolean;
var NoErrors:boolean;
begin
NoErrors:=true;
try
 
NoErrors:=DBComponents.TAll.Locate('Телефон',
                         phone,
                         []);
 
 
except
NoErrors:=false;
end;
Result:=NoErrors;
end;
Код GetUsual:
Delphi
1
2
3
4
function TFRegistrationForm.GetUsual:integer;
begin
Result:=DBComponents.TAll.FieldByName('Код').Value;
end;
Код функции, с помощью которой я выделяю нужную строку пар:
Delphi
1
2
3
4
5
6
function TFRegistrationForm.SelectPair(PairName:string):boolean;
begin
Result:=DBComponents.TPairTable.Locate('Название пары',
                               PairName,
                               []);
end;
Код функции отправки в базу данных "пар":
Delphi
1
2
3
4
5
procedure TFregistrationForm.PostPairTable;
begin
DBComponents.TPairTable.Edit;
DBComponents.TPairTable.Post;
end;
Код функции отправки в базу данных "таблицы пар":
Delphi
1
2
3
4
5
procedure TFregistrationForm.PostPair;
begin
DBComponents.TPair.Edit;
DBComponents.TPair.Post;
end;
Код функции, с помощью которой я пытаюсь сохранить изменения:
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
function TFRegistrationForm.RegisterPair:boolean;
 
 
var NoError:boolean;
IsPair:boolean;
 
begin
NoError:=true;
with DBComponents.TPairTable do
    begin
 
      try
          SelectPerson(EPhone.Text);
          IsPair:=SelectPair(EPairName.Text);
          if not IsPair then append;
 
          Edit;
          if not IsPair then
            begin
              FieldByName('Общий номер 1-ого участника(цы)').Value:=GetUsual;
              FieldByName('Название пары').Value:=EPairName.Text;
 
              DBComponents.TPair.append;
              DBComponents.TPair.Edit;
              DBComponents.TPair.FieldByName('Номер пары').Value:=FieldByName('Код').Value;
              PostPair;
            end
            else FieldByName('Общий номер 2-ого участника(цы)').Value:=GetUsual;
 
            PostPairTable;
            PostPair;
      except
        NoError:=false;
      end;
    end;
 
Result:=NoError;
end;
Возможно я пропустил какие-то функции. Если да, то я отредактирую тему.
Подскажите - почему не сохраняется номер пары?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2013, 17:19
Ответы с готовыми решениями:

Не сохраняются изменения в базе данных
procedure TFCreateUser.BUserCreateClick(Sender: TObject); begin MySQLQ.SQL.Text:='insert into users (Login,Password) values (' ...

Не сохраняются записи в Базе Данных
Здраствуйте! Меня оооочень раздражает, мягко говоря, одна проблема при работе с базами данных в Delphi 7. У меня не сохраняются записи!...

Не сохраняются изменения в базе данных
Следующая проблема: есть база данных MS Acсess. надо внести изменения в бд в рантайм режиме вот код который не работает хотя должен ...

6
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
22.07.2013, 20:56
Самое первое что вы должны сделать - назвать СУБД с которой работаете.
Второе, и тоже обязательно, с помощью каких компонентов происходит доступ к БД.
Все эти названия: DBComponents.TAll, TPair, TPairTable никому и ни о чем не говорят.
0
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
22.07.2013, 22:11  [ТС]
MS Access.
В DBComponents лежит все, что необходимо для работы сети. В нем компоненты устроены следующим образом:
ADOConnection-TPair(пары)/TPairTable(таблица пар)/TAll(Общая таблица)
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
22.07.2013, 23:23
1. Вместо Append используй Insert. Не принципиально в дан.случае, но когда-нибудь грабли с Append выстрелят.

2. Вызов Append или Insert не нуждается в последующем вызове Edit.

3. Вызов Post в твоем коде не нуждается в предшествующем явно лишнем вызове Edit, ибо на момент вызова Post НД и так уже находится в режиме редактирования новой или существующей записи.
0
Эксперт Pascal/Delphi
 Аватар для droider
4887 / 2821 / 865
Регистрация: 04.10.2012
Сообщений: 10,260
23.07.2013, 04:45
proggamer12,

Не по теме:

Вы просили дать ответ? Он у Вас есть.
В чем еще проблема?

0
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
19.08.2013, 13:20  [ТС]
droider
По части какого сообщения претензия?

Добавлено через 1 минуту
Кстати, проблема была в том, что, почему-то компьютер не мог работать вперемешку с несколькими TADOTable-ами. Я просто сохранял в переменные нужные мне значения, а потом вставлял их в другую таблицу, а не копировал в одну строку таблицы значение другой строки таблицы.
0
Эксперт Pascal/Delphi
 Аватар для droider
4887 / 2821 / 865
Регистрация: 04.10.2012
Сообщений: 10,260
19.08.2013, 14:04
Цитата Сообщение от proggamer12 Посмотреть сообщение
По части какого сообщения претензия?
это был вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2013, 14:04
Помогаю со студенческими работами здесь

Не сохраняются изменения в базе данных
Огромный привет обитателям этого форума. У меня возникла проблема с обновлением базы данных, обрисую как должна работать программа. Имеется...

Не сохраняются изменения в базе данных
Доброго времени суток. Столкнулся с проблемой несохранения изменений в базе данных. Читал похожие темы, в том числе и на этом форуме -...

Не сохраняются изменения в базе данных
Привет всем. Есть класс NoteBook public class NoteBook { public string ConnectionString { get; set; } ...

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

Не сохраняются изменения в базе данных MySQL
Доброго времени суток, имеется класс подключения к базе данных: using System; using System.Collections.Generic; using System.Data; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru