Строка БД (таблицы) - ссылка
Есть БД на делфи
Компоненты: ADOConnection1 - цепанули к БД Accsess ADOTable1 - Активировали таблицу ADOQuery1 - сделали запрос к полю naimen, нашей таблицы DataSource1 - все подконнектили. Кроче при запуске программы все выводит в DBGridEh1 правильно. Но возникла необходимость сделать следующее: Алгоритм: 1) Выделяешь (или как еще можно реализовать это?) некоторую строку(ячейку) из таблицы (DBGridEh1). 2) Жмешь кнопку "Перейти". 3)Происходит переходит на другую форму соответствующую выбранному полю. Но фишка в том, что каждое поле будет иметь СВОЮ форму! Т.е. проблема в том: Как сделать так чтобы любая строка таблицы (DBGridEh1) была некоторой ссылкой? Чтобы срабатывала команда типа form2.show; Ребята, подскажите пожалуйста. |
Вамнужно просто показать пустую форму? Подробнее распишите, что должно быть в результате перехода.
|
Как я уже сказал, нужно чтобы либо сама любая строка в DBGridEh1 была кнопкой, либо нужно сделать так, чтобы была возможность каким-либо образом пометить её, что выбрана ТАКАЯ-ТО строка и по средством обычного БуттонКлик Перейти на другую пустую форму
Если фигурально выражаться д/б такая конструкция: 1 строка = 1 форма 2 строка = 2 форма и.т.д |
Цитата:
Работать вы должны с атомарным значением, т. е. с "пересечением" определенной строки и столбца. Т. е. вы должны веделить отдельный столбец который будет хранить значения, представляющее собой ссылку (ForignKey) на строку в отдельной таблице. В просетйшем случае та таблица будет содержать всего два столбца: - Первичный ключ. - Значение. Как вы "оформите значение" - это уже Ваше дело. Хотите это будет просто имя формы, хотите ссылка на внешнюю процедуру, хотите BLOB-объект. Вобще, мой совет, уделите свое время прочтению книги по реляционной математике. Если нет времени на прочтение талмуда типа "Введение в реляционные базы данных", то прочтите какую либо книжку по MS SQL. ваша беда что вы начинаете оперировать в терминах среды програмирования, а это не правильно. Сначала проектируется ЧТО и КАК нужно сделать, а ЧЕМ это дело десятое |
Ребят, собственно что мне нужно в итоге?
Создаю Экспертную систему на тему "Выбор бытовой техники". Алгоритм работы такой: Пользователь, посредством, меню выбирает варианты ответов на поставленные наводящие вопросы и в итоге получает рекомендацию к покупке того или иного товара. И ладно бы на пихать Радио кнопок и через if then else реализовать механизм. Но вся проблема в том, что нужно чтобы пользователь мог во время работы программы редактировать вопросы, ответы. Т.е. мне нужно создать админку к экспертке. Для этого нужно использовать БД. Я создал БД на Microsoft Office Access (к счастью с этим проблем не возникло). Далее я хотел сделать следующее (поскольку хоть как-то могу сам это реализовать): На первой страницы добавить компонент DBGridEh1 в качестве списка-пунктов меню. И посредством ADOConnection1, ADOTable1, ADOQuery1, DataSource1 вывести данные и БД в DBGridEh1 - это мне удалось. Следующим шагом планировал одну запись в таблице БД=как пункт меню, но по некоторым причинам отказался от этого. Решил попытаться создать меню через компонент RadioGroup1. И вот тут возникли проблемы: 1) В свойствах этого компонента я не нашел DataSource через который бы я смог подконнектится к АDO. 2) Как реализовать динамически добавляемые радио кнопки в зависимости от количества записей в соответствующей таблице в БД. Тоесть собственно вопрос состоит в том: Ребята, подскажите, пожалуйста, как сделать так, чтобы при запуске приложения, программа автоматически осуществляла запрос к указанной таблице в БД и динамически создавала радио кнопки в зависимости от количества записей в таблице, т.е. 1 запись = 1 кнопка с соответствующим наименованием. ПС. Объяснил как смог )) |
Идея не верна.
Если будет 10000 записей, то вы будете создавать 10000 кнопок? Вам нужно создать 2 таблицы и при выборе записей в одной (мастер) отображать соответствующие ей данные в другой (деталь). Т.е. гуглите по словам мастер-деталь и смотрите что это такое. Цитата:
|
Цитата:
Цитата:
|
Спасибо конечно, но все уже реализовано посредством запроса к файлам ini ))
|
Ребят, все что выше это ерунда.
*.ini - идея тоже практически провалилась. Вобще делаю экспертную систему. Выбор бытовой техники. Просьба скачать файл прежде чем читать дальше 1) Как видно на первой странице мы в компонент DBLookupComboBox1 из BD.mdb присваиваем значения из таблицы "kat". 2) Переходим на следующую страницу и начинаются проблемы: Компонент DBLookupListBox1 должен отображать список вопросов, соответствующих выбранной на первом шаге категории. Для этого он обращается к таблице "vopros", но выводятся все вопросы какие есть в таблице. Подскажите пожалуйста что нужно сделать чтобы было как должно быть. Возможно нужно подругому организовать БД, возможно нужно что-то сделать (прописать в коде, либо может компонент какой бросить или заменить) - я не знаю. |
1. DBLookupComboBox1 - убрать. LookUpы - зло и на больших объемах тормозят. Используйте обычный ComboBox.
2. При выборе значения в Combobox открываете запрос к таблице вопрос ручками с where kat='что нужно' и отбображаете результат запроса . P.S. Rara нет. Хотите чтобы смотрел - перепакуйте в zip или другой свободный формат. |
Сделал. Теперь есть нормальная связь между компонентами DBLookupComboBox1 и DBLookupListBox1.
В компоненте DBLookupListBox1 выводиться список. В перспективе д/б так. Пользователь выбирает строку (вопрос), т.е. совершает событие onClick Согласно выделенному вопросу подгружаются варианты ответов (DBRadioGroup1). Но проблема возникла на первом этапе - компонент DBLookupListBox1 выделяет сразу все строки (все вопросы). Как сделать так, что бы выделялась каждая строка я незнаю. Ребят, подскажите плз! ПС. БД будет не большая (учебная), DBLookupComboBox1 уже настроил подключил (да и легче его настроить) так что пусть будет он. |
Вечером дома если до компа доберусь то посмотрю, но по чтению исходников - мама!!!!!!!!!
|
И опять решил проблему, оказывается в KeyField не то ключевое поле поставил.
Правда вопрос с тем, чтобы: Цитата:
|
Тоесть проблема в том, чтобы при клике на одну из строк DBLookupListBox1
Происходил запрос в БД в таблицу otvet и от туда брались ответы соответствующие вопросам. И в компоненте DBRadioGroup1 динамически добалялось то количество кнопок, которое соответствовало бы ответом на выбранный вопрос. |
Код:
procedure TForm1.DBLookupListBox1Click(Sender: TObject); |
Вопрос, был решен так:
Код:
procedure TForm1.DBLookupListBox1Click(Sender: TObject); |
Ребят, подскажите плз как сделать так, чтобы на событие DBRadioGroup1Click
Значения записывались в указанную таблицу в БД. Т.е. Кинул на форму компонент ADOTable1, который связан с этой таблицей. Теперь НАВЕРНОЕ надо найти метод этого компонента, который бы позволил при совершении указанного события записать значение (индекс) в таблицу log в БД. Возможно нужно использовать другой компонент... Код:
procedure TForm1.DBRadioGroup1Click(Sender: TObject); |
SQL : Insert Into....
Вызываете... Это курсак или реальная програ? Если реальная о не используйте DB-aware компоненты. Намучаетесь. |
Цитата:
В любом случае DoCmd.RunSQL "текстзапроса; " А кстати: что - у этого DBRadioGroup нету свойства DataSource - ее нельзя просто привязать к полю в таблице? |
Цитата:
А почему? )) Цитата:
Нужно бросить на форуму компонент ТADOQuery? Запрос прописывать в свойстве SQL или в коде? Или и там и там? |
Цитата:
Да кстати я пробовал отдельно создал одну таблицу, бросил радио подцепил у этой таблице и нихрена |
1. Используйте не ADOQuery или Table, а ADODataSet.
2. Запрос можно прописать в конструкторе, а можно и в коде 3. Вы можете динамически изменять значение свойства DataSource. 4. Лучше использовать обычные компоненты и весь SQL прописывать ручками. |
Время: 02:01. |
Время: 02:01.
© OSzone.net 2001-