Вопрос № 75668: Здравствуйте уважаемые эксперты.
Ответьте на такие вопросы:
1)Можно ли в Delphi7 при работе с базами данных спроектировать многооконный интерфейс(MDI)? Если можно, то, как это сделать? Если нет то, какие альтернативные способы существуют? ...
Вопрос № 75.668
Здравствуйте уважаемые эксперты.
Ответьте на такие вопросы:
1)Можно ли в Delphi7 при работе с базами данных спроектировать многооконный интерфейс(MDI)? Если можно, то, как это сделать? Если нет то, какие альтернативные способы существуют?
2)Как можно организовать нужный для меня вывод данных в DBGrid, т.е. мне нужно чтобы строка ссылалась на одну таблицу а столбец на другую а пересечение выводилось из третьей.
3)Как с помощью Delphi7 создать источник данных.
4)Обновляет ли данные(вносит изменения в БД) ADOQuery? Если нет то как это организовать? P.s. желательно по технологии ADO.
Заранее благодарю.
Отправлен: 14.02.2007, 10:18
Вопрос задал: Ram (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 9)
Отвечает: Архангельский Андрей Германович
Здравствуйте, Ram!
1) А почему нет. В меню "создать проект" выбрать MDI и дальше следовать инструкциям.
На главной форме размещается компоненты Database,Transaction, а на дочерних компоненты Query,Dataset и компоненты управления данными - DBGrid, DBEdit и прочие
Отдельная дочерняя форма отвечает за подключение к БД
2) DBGrid отображает результаты запроса - если возможно построить запрос, то можно и отобразить. Сам запрос зависит от структуры таблиц и структуры данных. Не зная этих данных - сложно что-то сказать. Будет ли этот запрос редактироваться - другой вопрос - не факт.
4) Да. Давно отказался от ADO, поэтому подробней не скажу.
--------- Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Отвечает: Химяк Виктор Васильевич
Здравствуйте, Ram!
1. Можно. Проэктировка обычныи способом. File->New->Other->Projects->MDI Application.
2. Во многих случаях это разрешается правильной разработкой самой базы, за редким исключением(иначе просто нельзя) нужно использовать не простой DBGrid, а так называемые кросс-таблицы, в ADO для этого используются перекрестные запросы.
3. Все зависит от формата БД. В общем случае: вкладки DataAccess и BDE(ADO, InterBase и т.д.)
Ответ отправил: Химяк Виктор Васильевич (статус: 3-ий класс)
Ответ отправлен: 14.02.2007, 22:32
Отвечает: Синельников Сергей
Здравствуйте, Ram!
Начнем с создания источника. Берем ADOConnection. Открываем мастер свойства ConnectionString. Выбираем Use Connection String и жмем Build. На вкладке «Поставщик данных» выбираем в нашем случае [Microsoft OLE DB Provider for SQL Server] либо [Microsoft OLE DB Provider for ODBC Drivers]. На следующей закладке (Подключение) заполняем поля необходимыми данными и жмем [Проверить подключение]. Если все правильно, то появится соответствующее сообщение. Все. Устанавливаем свойство Connected=True. Соединение установлено.
Да, если свойство LoginPrompt оставить True, то будет появляться окно авторизации, если же изменить на False, то имя и пароль не запрашиваются. Далее плавно переходим к четвертому вопросу. У ADOQuery устанавливаем свойство Connection=ADOConnection1. В SQL пишем нужный запрос. Чтобы в Run-time узнать, можно ли изменить текущую запись, нужно проверить свойство Modified. Если оно True, то смело пишем:
ADOQuery1.Edit;
ADOQuery1.FieldByName(‘Field1’).AsString:=’Отредактированное поле’;
ADOQuery1.Post;
Если же оно равно False, пойдем другим путем. Точнее можно даже двумя. Берем другой ADOQuery2. В свойство SQL пишем ‘UPDATE Table1 SET Field1=’Отредктированное поле’ WHERE KeyField= [Значение из ADOQuery1.FieldByName(‘KeyField’).AsString] и выполняем ADOQuery2.ExecSQL;
Второй способ заключается в использовании ADOConnection1. Пишем тоже выражение Update таким образом:
ADOConnection1.Execute(Команда Update…);
Эффект тот же.
Что касается второго вопроса, то запрос будет выглядеть следующим образом
ADOQuery1.SQL:=’ TRANSFORM SUM(KOL) AS SumKol SELECT AUTO.NAME FROM AUTO INNER JOIN (MAG INNER JOIN SALES ON MAG.ID=SALES.ID_MAG) ON AUTO.ID=SALES.ID_AUTO GROUP BY AUTO.NAME PIVOT MAG.NAME’;
Mag – таблица магазинов
Auto – таблица авто
Sales – таблица продаж.
Запрос рабочий, проверено. Правда за неимением SQL Server, проверено на файлах dBase 5.0
Ответ отправил: Синельников Сергей (статус: 3-ий класс)
Ответ отправлен: 18.02.2007, 13:21