Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/23: Рейтинг темы: голосов - 23, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48

Перенос данных из одной формы на другую

11.06.2012, 17:18. Показов 4849. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В программе есть DBGrid, который выводит данные из бд. По двойному клику по записи в столбце ФИО открывается форма с информацией о данном человеке, но выводится только информация о первой записи.
Как сделать так, чтобы, нажав на запись в таблице, на форме отображалась соответствующая этой записи информация? Подскажите пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2012, 17:18
Ответы с готовыми решениями:

Перенос значений переменной из одной формы в другую
Приветствую ребят! Наверное это самые достаючий вопрос, так как ответов по данной теме много, особенно на данном форуме. Но то ли я...

Перенос данных из одной БД в другую
Добрый день имеем две таблицы Код|Имя|Фамилия|Город|Пол 1|Настя|Пупкина|Хабаровск|Женский 2|Антон|Филиппов|Москва|Паркет ...

Перенос данных из одной формы в другую
Здравствуйте. У меня есть 2 формы (Form1, Form2). На первой форме у меня находится Tedit и кнопка. На второй форме находится label. ...

44
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 17:21
neznayka, текущий обработчик двойного клика по записи в студию.
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 17:26  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
neznayka, текущий обработчик двойного клика по записи в студию.
Там, пока что, только появление формы.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 18:01
neznayka, тогда просто считываете ID данной записи и при появлении формы делаете запрос типа:

C++
1
2
3
...
ADOQuery1->SQL->Add("SELECT * FROM MyTable WHERE ID =" + DBGrid1->DataSource->DataSet->FieldByName("ID")->AsString);
...
Далее заполняете свои Edit'ы (или что там у Вас) на этой форме следующим образом:
C++
1
Edit1->Text = ADOQuery1->FieldByName("Field1")
Ну и так далее.

Добавлено через 20 минут
Меня вот больше интересует какое Вы все-таки событие взяли.

Не
C++
1
2
3
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
}
случайно?
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 18:27  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
neznayka, тогда просто считываете ID данной записи и при появлении формы делаете запрос типа:

C++
1
2
3
...
ADOQuery1->SQL->Add("SELECT * FROM MyTable WHERE ID =" + DBGrid1->DataSource->DataSet->FieldByName("ID")->AsString);
...

Добавлено через 20 минут
Меня вот больше интересует какое Вы все-таки событие взяли.

Не
C++
1
2
3
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
}
случайно?
Именно его и взял -
C++
1
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
.
то что вы написали выше я попробовал, результат - тот же.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 18:34
neznayka, ну давайте тогда проект.

Что-то не так сделали.
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 18:45  [ТС]
Вывод информации на второй форме сделан. Вся проблема в том, что не хочет отображаться информация необходимой мне записи.
P.S. За бд не ругаться, знаю что кириллицу использовать не рекомендуется.
Вложения
Тип файла: rar проект.rar (722.2 Кб, 20 просмотров)
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 19:17
neznayka, я ругаться за другое буду.

С какой радости у нас 2 ADOConnection? БД - одна, соединение с ней должно быть одно.

Добавлено через 10 минут
Вот если все нормально там настроить и дописать нормальны образом запрос (я-то думал, что вы знаете как они полноценно пишутся), то будет все работать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
//Form2->ShowModal();
 
Form2->ADOQuery1->Close();
Form2->ADOQuery1->SQL->Clear();
Form2->ADOQuery1->SQL->Add("SELECT * FROM Таблица1 WHERE Регистрационный_номер =" + \
DBGrid1->DataSource->DataSet->FieldByName("Регистрационный_номер")->AsString);
Form2->ADOQuery1->Open();
 
ShowMessage(Form2->ADOQuery1->FieldByName("Регистрационный_номер")->AsString);
}
- вот таким образом по щелчку получаю "Регистрационный_номер". Соответственно это (и не только это) можно поместить в поле следующей формы.
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 19:18  [ТС]
Об этом я тоже хотел спросить, как не использовать второе соединение?
а использовал его что бы отобразить данные на этой форме.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 19:23
neznayka, соединение должно быть одно.
А... У Вас еще везде DBEdit'ы понаставлены. Чудно. Ну тогда в каждом из них (на Форме2) в качестве DataSource выбирайте Form1.DataSource1 и тогда не надо никакого запроса.
Просто:
C++
1
2
3
4
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
Form2->ShowModal();
}
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 20:03  [ТС]
Вот если все нормально там настроить и дописать нормальны образом запрос (я-то думал, что вы знаете как они полноценно пишутся)
Нам многого не объясняют, приходится самому узнавать, искать, изучать, поэтому есть ошибки.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 20:05
neznayka, нам вообще ничего по этому не объясняли, так что это нормальная практика

Разобрались?
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 20:12  [ТС]
Пока что нет. Пытаюсь сделать одно соединение.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 20:14
neznayka, ну я вроде все доступно объяснил... Видимо, все-таки нет. Читайте ПМ тогда.
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 20:37  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
neznayka, соединение должно быть одно.
А... У Вас еще везде DBEdit'ы понаставлены. Чудно. Ну тогда в каждом из них (на Форме2) в качестве DataSource выбирайте Form1.DataSource1 и тогда не надо никакого запроса.
Просто:
C++
1
2
3
4
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
Form2->ShowModal();
}
Вот похоже сделал как вы сказали, но всё так же отображается первая запись.
Вложения
Тип файла: rar проект.rar (746.8 Кб, 15 просмотров)
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 20:50
neznayka, зачем Вы ввели еще один DataSource на Form1?
Цитата Сообщение от The_Immortal Посмотреть сообщение
Ну тогда в каждом из них (на Форме2) в качестве DataSource выбирайте Form1.DataSource1
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 20:55  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
neznayka, зачем Вы ввели еще один DataSource на Form1?
Ввёл ещё один, потому что DataSource1 занят под запрос, который используется в DBGrid1. Если выбрать в DBEdit на 2 форме Form1.DataSource1, то на 2 форме сможет отображаться только 3 поля.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 21:05
neznayka, а DataSource2 у Вас чем занят? У Вас уже намечается избыточность компонентов...

Пф... Как все туго-то

Короче, на данный момент, у Вас DataSource3 содержит набор данных ADOTable2, который в свою очередь содержит "Таблица1".
DBGrid1 содержит DataSource1, который ссылается на набор данных ADOTable1, который в свою очередь содержит "Таблица1".

Когда вы перемещаетесь по записям в DBGrid1, происходит изменение DataSource1, а DataSource3 сидит на месте и "отображает" курсор первой записи в ADOTable2, т.е. первую запись таблицы "Таблица1".
В DBEdit'ах прописано Form1.DataSource3 - и там, повторюсь, первая запись. Если поменять на Form1.DataSource1, то все будет нормально.

Добавлено через 1 минуту
Цитата Сообщение от neznayka Посмотреть сообщение
приходится самому узнавать, искать, изучать
И к этому набору добавьте, пожалуйста, внимать.
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
11.06.2012, 21:23  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
внимать.
Разобрался, теперь отображается именно нужная запись.
Есть у меня к вам ещё парочка вопросов, т.к. не могу разобраться ещё в следующих вещах:
1) На форме 2, нажимая кнопку "Обновить", должны вноситься изменения в запись, но мне пишет "Ошибка синтаксиса в инструкции UPDATE" и указывает на строчку "ADOQuery1->Close();". Не могу понять, в чём я ошибся.
2) Выходит для ADOQuery DataSource отдельный не нужен?
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 21:55
neznayka,


Цитата Сообщение от neznayka Посмотреть сообщение
2) Выходит для ADOQuery DataSource отдельный не нужен?
Если для вышеуказанного обновления, то не нужен.

Добавлено через 10 минут
Цитата Сообщение от neznayka Посмотреть сообщение
1) На форме 2, нажимая кнопку "Обновить", должны вноситься изменения в запись, но мне пишет "Ошибка синтаксиса в инструкции UPDATE" и указывает на строчку "ADOQuery1->Close();". Не могу понять, в чём я ошибся.
А Вы все данные на обновление вводите?
И, кстати, у Вас таким запросом все записи будут изменяться, а не конкретная. Надо добавлять условие в конце, типа:

C++
1
ADOQuery1->SQL->Add("... WHERE Регистрационный_номер =" + Form1->DBGrid1->DataSource->DataSet->FieldByName("Регистрационный_номер")->AsString);
Добавлено через 10 минут
Хм... А теперь у меня к Вам вопросик. У вас DBEdit'ы на Форме2 подлежат редактированию?
А все, разобрался. Я пытался счетчик менять
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2012, 21:55
Помогаю со студенческими работами здесь

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

Перенос данных из одной формы в другую
Здравствуйте. Появилась необходимость в переносе данных с ФОРМЫ2 на ФОРМУ1. На ФОРМЕ2 находятся два поля со списком с именами...

Перенос данных из одной формы в другую
Я создаю игру(задание от препода) мне нужно создать магазин, в магазине я расплачиваюсь валютой которую, получаю на другой форме.Как мне...

Перенос данных из одной формы в другую
Есть две формы. При щелчке на кнопку формы1 в СтрингГриды формы2 должны записываться данные(и просто текст, и данные получаемые на форме1)....

Перенос данных из одной формы в другую
Доброго времени суток! Подскажите как реализовать такое: Есть база "Remont", в ней форма "FormRemont". При ее открытии...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru