Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 287
от 20.02.2007, 06:35

Администратор:Gh0stik
В рассылке:Подписчиков: 294, Экспертов: 43
В номере:Вопросов: 1, Ответов: 3


Вопрос № 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, поэтому подробней не скажу.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 14.02.2007, 10:37

Отвечает: Химяк Виктор Васильевич
Здравствуйте, 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.44 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное