Как в delphi связать таблицы

Обновлено: 25.04.2024

В общем есть база данных, 6 таблиц, и 6 компонентов ADOQuery, связанные по принципу datasource=>adoquery=.adoconnection
Мне нужно связать (id_client-idclient), ( n_zakaza-nzakaza ) и т.д
Нужно ли в ADOQuery в свойстве Datasource, ставить последовательность тех datasource которые присвоены к Adocuerty, в которым находится нужное поля для связи!?
Сделал так, в свойствах ADOQuery1=> SQL >

Где я накосячил!?) и что не так делаю?

Связь таблиц в delphi
Подскажите, как мне связать таблицы, которые находятся на разных формах, чтобы в столбцах "тип".

Связь таблиц в Delphi
Доброго времени суток. Столкнулся с такой проблемой. Есть 2 таблицы: одна называется Заказ(Vyzov).

Связь таблиц в Delphi
Здравствуйте, подскажите пожалуйста, что не так делаю. Есть две таблицы: PREP (преподаватели) с.

Delphi and SQL (объединение таблиц и вывод данных)
Доброго времени суток! Дорогие форумчане, помогите пожалуйста с проектом. Делаю программу по.

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

Чудовища вида ужасного схватили ребенка несчастного.


У тебя в дизайне для каждого квери созданы компоненты-поля настроенные на тот запрос, который ты также в дизайне записал в свойство SQL. Теперь же ты в это свойство записываешь другой запрос, в котором поля уже совсем другие. Вот и ошибки лезут.

Вообще-то если я правильно понял такую связь нужно делать в самом запросе силами и средствами языка SQL, а вовсе не кучей компонент Query.

Вообще-то если я правильно понял такую связь нужно делать в самом запросе силами и средствами языка SQL, а вовсе не кучей компонент Query.

примером
ADOQuery1.SQL.ADD(Запрос) !?
а куда это писать!? в обработчик событий? или в какой то компонент!?)
Просто я пробовал связать таблицы по этому примеру:пример.rar

Ты не объяснил
1. Что у тебя за задача (не вопрос, не проблема, а именно задача).
2. Что ты имеешь в виду под "связать таблицы".

Имена полей таблиц написал от балды. Только ты сам их знаешь.

Добавлено через 10 минут

Delphi+Sql+MS VFP Driver (выборка из таблиц без дублей)
Помогите разобраться в SQL, имеется вот такой запрос: К примеру приведу базу (dbf файл) содержащую.


SQL запрос (связь таблиц)
Здравствуйте, не могу сообразить, как составить запрос. Есть 2 таблицы: CREATE TABLE `users`.


Связь таблиц из БД Access и SQL сервера
Добрый день! Подскажите каким образом можно сделать связь между таблицами. Одна таблица.


На этот раз хотел бы поговорить о связанных таблицах в БД MS Access. Статья, возможно не новая, но кто часто работает с БД, тому, возможно, будет полезная. В ней расскажу, как я связываю таблицы между собой. По крайней мере, я пользуюсь двумя способами, об одном я расскажу в теоретическом плане, с практикой проблем тут не должно возникнуть, а второй способ, немного рассмотрим и практики.

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

В моей БД две таблицы с именами — Таблица1 и Таблица2. Я создам таблицу с фамилиями, а вторая таблица будет с названиями автомобилей. То есть, у каждого владельца, может быть несколько автомобилей (всем бы так). Вот так мы и свяжем наши таблицы. Отношение связи, тут получается, один ко многим. Насколько я помню, бывают следующие типы отношений:

Это так, что сейчас вспомнилось. Ну а теперь, посмотрим на структуры наших таблиц.



Таблица2. Структура.



Теперь, нам необходимо связать эти две таблицы в MS Access. Поле id Таблицы2 предназначено для хранения идентификаторов записей из Таблицы1. По ним будет распознаваться, какая запись из Таблицы2 принадлежит записи из Таблицы1.

Для того, чтобы связать наши таблицы, необходимо перейти в Схему данных, добавить наши таблицы и связать следующие поля ,отношением — один ко многим:



Если в БД MS Access добавлять теперь записи, то для каждой фамилии можно добавлять сколько угодно автомобилей, а если выбрать определенную запись, то покажется список автомобилей для данного человека.

В нашем проекте будет что-то похожее, давайте же приступим к нему. На форме у меня следующие компоненты:

По поводу подключения к БД, смотрим статью. Ну, а дальше самое интересное. Нам необходимо связать наши компоненты. Выделяем компоненты TADOTable и в каждом, в свойстве Connection, указываем компонент TADOConnection. Дальше выделяем DBGrid1 и связываем его с DataSource1, в свойстве DataSource. Компонент DataSource1, в свойстве DataSet, указываем AdoTable1. Все готово, одна таблица связана, это будет наша главная таблица, а точнее с имена и фамилиями автовладельцев.

Дальше нашу главную таблицу необходимо активировать. Выделяем AdoTable1, в свойстве TableName выбираем Таблица1 и свойство Active устанавливаем в True.

Все, теперь главная таблица полностью готова. Теперь приступим к подчиненной.

Выделяем компонент DBGrid2 и в свойстве DataSource связываем его с компонентом DataSource2, а компонент DataSource2, в свойстве DataSet, связываем с компонентом AdoTable2.

Все, теперь выделяем компонент AdoTable2 и в свойстве TableName выбираем Таблица2, в свойстве MasterSource выбираем DataSource1 (в данном случае необходимо выбрать тут TDataSource главной таблицы, то есть главную таблицу).

Дальше, в свойстве MasterFields, компонента AdoTable2 (подчиненной таблицы), мы указываем связующие поля, следующим образом:



Все, когда у нас все настроено, также активируем данную таблицу, свойство Active устанавливаем в True.

Все, если у Вас есть какие-то данные в Ваших таблицах, то можете запустить проект и выделить запись из главной таблицы, и Вы увидите, что автоматически в DBGrid2 для данной записи из главной таблицы выводятся записи из подчиненной таблицы. Это очень удобно. Добавлять записи необходимо также, выделяем запись из главной таблицы и только после этого, необходимо добавлять запись в подчиненную таблицу.

Что касается еще одно метода, связывания таблиц, то тут также все просто. Необходимо все самому отслеживать: для какой записи из основной таблицы добавляется запись подчиненной таблицы, что добавляется и самому записывать идентификатор основной таблицы в подчиненную, а затем уже, по выделенной записи (получать ее идентификатор), делать выборку записей из подчиненной таблицы.

Всем привет, и вот мой первый урок, думаю урок полезный, так как работа с базами данных в Delphi очень важно, а тем более Access на мой взгляд самая легкая база данных, с которой можно работать в Delphi. В этой статье я расскажу Вам как эту самую Базу данных Access подключить в Delphi, ну а в последующих статьях мы рассмотрим как добавлять информацию, редактировать, удалять и так далее, и Вы убедиться потом что ничего сложного в этом нету. Для начала запустим Delphi. Создадим новое приложение File-New-Application, думаю здесь объяснять долго ничего не надо. Что делаем далее, на нашу главную форму «ставим» следующие компоненты

Итак теперь по компонентам:

TDBGrid находиться на вкладке DataControls, предназначен для отображения данных БД в нашей программе (приложении)

TDataSource находится на вкладке Data Access, предназначен для связи нашей сетки отображения данных, с самой БД

TADOConnection находится на вкладке ADO, предназначен для подключения нашей БД по определенному провайдеру

TADOQuery находится также на вкладке ADO, предназначен для получение нужных результатов из нашей БД.

Ну по компонентам немного прошлись, свойства я их не рассказываю, так как пока что не об этом, но дальше будет интереснее. Далее нам необходимо создать Базу данных в MS Access. А как же без нее, думаю как создать примитивную БД в MS Access труда не составит, я создам БД и таблицу с полями

  • ФИО — строковый тип данных (fio)
  • оценка — числовой тип данных (oz)

И назову ее Student, сохраним нашу БД в нужное место и продолжим дальше, ах да ну и заполните вашу таблицу какими-нибудь данными. А теперь мы «свяжим» все необходимые компоненты, которые находятся на нашей главной форме

TADOQuery в свойстве Connection я «связываю» с TADOConnection из выпадающего списка я выбираю имя данного компонента.

TDataSource в свойстве DataSet я «связываю» с TADOQuery из выпадающего списка я выбираю имя данного компонента

TDBGrid в свойстве DataSource я «связываю» с TDatasource из выпадающего списка я выбираю имя данного компонента.

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

Далее выделяем компонент TADOConnection и в свойстве LoginPromt ставим на False. Это делаем для того, чтобы при подключении к БД у нас не запрашивался пароль, дальше в свойстве ConnectionString нажимаем на кнопку с «…» и появляется окно следующего вида:


В данном окне нажимаем на кнопку «Build…» и появляется коно следующего вида:


В данном окне мы выбираем провайдера, а именно Microsoft Jet 4.0 OLE DB Provaider и нажимаем кнопку «Далее«.


В данном окне мы указываем путь к нашей БД и имя пользователя по умолчанию Admin. Если ваша БД находится в корневом каталоге с программой, то в данном поле достаточно указать ее имя с расширением, а если еще в подкаталоге, то указывается это примерно так BD\mydb.mdb

Почти все закончили осталось только нажать кнопку «Ок» и в свойстве компонента TADOConnection — Mode выбрать из выпадающего списка cmShareDenyNone.

Вот и все подключение у нас организовано теперь нам осталось только отобразить наши данные в таблице. Для этого в событии нашей главной формы OnCreate напишем следующее

Что мы в этом коде делаем, обычный запрос к нашей таблице Student, как мы и называли ее. То есть мы запрашиваем у нее этим запросом все поля с данными и после этого просто активируем наш запрос, чтобы данные отобразились с помощью свойства Active

Исходники с базой данных скачать можно тут

А Вы знаете, вообще сколько существует форматов графики и чем они друг от друга отличаются. Одним из форматом графики, а точнее формат растровой графики является формат bitmap, про который следует прочитать и ознакомиться с ним, а также произвести сравнения с другими форматами графики.

В следующем уроке по базам данных мы поговорим как добавлять, редактировать, удалять и корректировать информацию в Delphi в БД MS Access

Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.

Практическая работа 5

Наши предыдущие приложения работали каждое с одной таблицей. В реальной жизни практически любая информационная система содержит базу данных из большего количества таблиц, которые могут быть связаны между собой. Рассмотрим, как можно строить приложения с несколькими связанными друг с другом таблицами.

Связь головной и вспомогательной таблиц

Две таблицы могут быть связаны друг с другом по ключу. Одна из этих связанных таблиц является головной ( master ), а другая – вспомогательной, детализирующей ( detail ). В нашей базе данных имеется таблица PodrazdFirmy , содержащая список подразделений нашей фирмы и характеристику этих подразделений. Другая таблица нашей базы – Sotrudniki содержит список сотрудников с указанием подразделений, в которых они работают.

Полезно построить приложение, в котором пользователь, перемещаясь по таблице подразделений, видел бы не только характеристики подразделения, но и список сотрудников этого подразделения. В этом случае головной является таблица PodrazdFirmy , вспомогательной – таблица Sotrudniki , а ключом, определяющем их связь, являются поля: KodPodrazd первой таблицы и Podrazd второй.

Откройте новое приложение и разместите на форме два комплекта компонентов Table , DataSource и средств отображения данных. Результат может выглядеть примерно так:

Если теперь обе таблицы сделать активными и запустить приложение, увидим, что содержимое обеих таблиц отображается в соответствующих компонентах, но перемещения по таблицам происходят независимо.

Свяжем эти таблицы. Для этого разорвём связь с базой данных второй таблицы Sotrudniki ( Active = false ). В свойстве MasterSource установим имя первой, головной таблицы – PodrazdFirmy . Тем самым мы указали, что для вспомогательной таблицы Sotrudniki головной является таблица PodrazdFirmy . Теперь надо указать по каким полям будет выполняться связь. Кликнем на свойстве MasterFields . Откроется окно редактора связей полей:

Здесь в поле Available Indexes можно выбрать любой из индексов вспомогательной таблицы. Дело в том, что связь возможна только по тем полям, по которым таблица индексирована. Именно поэтому надо индексировать таблицу так, чтобы индекс включал ключевое поле связи (в нашем случае это поле Podrazd ). Ранее мы создали индекс Podrazd , его и выберем. Слева, в окне Detail Fields появятся поля подчинённой таблицы, входящие в выбранный индекс. В правом окне Master Fields расположены поля головной таблицы. Выделим ключевые поля – в левом окне поле Podrazd , а в правом поле KodPodrazd . При этом активизируется кнопка Add . После нажатия кнопки ключевые поля переносятся в окно Joined Fields (соединяемые поля). Если бы ключ был составной (например, фамилия, имя отчество), эту операцию надо было бы повторить для других полей ключа. В конце формирования связей следует нажать ОК , и в свойстве MasterFields появится текст – связанные поля. Теперь можно восстановить связь с базой данных и запустить приложение.

Видно, что при перемещении по списку подразделений, в таблице сотрудников отображаются только те сотрудники, которые работают в выбранном подразделении.

Поля просмотра

Возможна и другая связь таблиц, отличная от рассмотренной связи «головная – подчинённая». В ходе работы с базой данных может понадобиться в одной таблице просматривать поля, принадлежащие другой таблице. Например, работая с таблицей Sotrudniki , мы хотим, просматривая данные о сотрудниках, просматривать и поле KolSostsav таблицы PodrazdFirmy относящееся к подразделению рассматриваемого сотрудника. С точки зрения здравого смысла, это не самый лучший пример, но в качестве учебного задания его можно использовать.

Итак, мы хотим в таблице Sotrudniki видеть не только подразделение, в котором работает каждый из сотрудников, но и количество сотрудников, работающих в этом подразделении. А эти данные, как мы помним, размещаются в таблице PodrazdFirmy .

В нашем приложении сделаем двойной щелчок на компоненте Tabl 2 – таблице, в которую мы хотим ввести поле просмотра. В появившемся окне Редактора Полей следует из контекстного меню выбрать раздел New Field . Откроется окно создания нового поля, которое уже встречалось при создании вычисляемых полей:

Введём имя ( Name ) создаваемого поля. Оно должно отличаться от имён других полей, например, Quont . Укажем тип ( Type ) создаваемого поля. Тип должен соответствовать типу того поля в таблице просмотра, которое мы хотим просматривать. В нашем случае это короткое целое.

После того, как определили новое поле, выберем в группе радиокнопок Field type кнопку Lookup .

В выпадающем списке Key Fields следует выбрать ключевое поле в таблице, в которой мы создаём новое поле. В нашем случае это поле Podrazd в таблице Sotrudniki . В выпадающем списке Dataset выберем таблицу, которую мы хотим просматривать. Это таблица PodrazdFirmy , т.е. компонент Table 1 . В выпадающем списке Lookup Keys выбирается ключевое поле просматриваемой таблице, следовательно, выбираем KodPodrazd . И, наконец, в выпадающем списке Result Field выбираем просматриваемое поле, т.е. KolSostsav .

Осталось нажать ОК и задать для нового появившегося поля свойство DisplayLabel , пусть это будет Численность :

В принципе, всё то же самое можно было бы сделать без использования Редактора Полей непосредственно в Инспекторе Объектов (посмотрите свойства вновь созданного поля: FieldKind , KeyFields , LookupDataset , LookupKeyField , LookupResultField ). Решайте сами, что Вам удобнее.

Обратите внимание!

Мы уже дважды пользовались Редактором Полей: в предыдущей работе для создания вычисляемого поля и в данной работе для создания поля просмотра. Эти поля имеют много общего, но следует помнить об одном существенном различии. При отображении содержимого таблиц сначала определяются поля просмотра, а затем рассчитываются вычисляемые поля. Поэтому значения полей просмотра можно использовать в вычисляемых полях, но не наоборот!

Задание для самостоятельного выполнения

Разработать аналогичные формы для приложения своей информационной системы.

Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.

Практическая работа 2

Задание структуры таблицы

Приступим к разработке информационной системы с помощью Delphi.

Возьмём типичный и наиболее универсальный случай – некое торговое предприятие, занимающееся куплей-продажей, скажем, электроинструмента. В соответствии с теорией, нам потребуется создать базу данных и приложения для работы с ней. Начнём с базы данных, то есть, с построения таблиц.

Для построения таблиц используем программу Database Desktop, она поставляется вместе с Delphi.

Запустить Database Desktop можно через кнопку Пуск – Программы – Borland Delphi 7 – Database Desktop либо через меню Delphi Tools – Database Desktop . И в том и в другом случае откроется главное окно программы:

Прежде, чем строить таблицы, позаботимся об удобстве будущей работы с ними – создадим свой рабочий каталог, в котором будут храниться файлы наших таблиц. Для этого в любом удобном месте (например, на рабочем столе) создадим папку с приятным названием (пусть это будет Proba ), затем в главном окне Database Desktop в меню File выберем команду Working Directory и укажем нашу папку в качестве рабочего каталога:

Можно создавать таблицы.

В главном окне Database Desktop выберем команду File – New – Table … Откроется небольшое диалоговое окно:

Здесь можно выбрать СУБД из довольно большого списка, но мы согласимся с предлагаемой по умолчанию Paradox 7 . Нам откроется окно, в котором мы сможем, наконец, задать структуру таблицы, т.е. поля и их типы, создать вторичные индексы, ввести диапазоны допустимых значений полей, значения по умолчанию и ввести много иной полезной информации о создаваемой таблице. В дальнейшем, правда, окажется, что большую часть этой информации можно вводить другим, часто более удобным образом.

Для каждого поля создаваемой таблицы прежде всего указывается имя ( Field Name ). Имя надо вводить латиницей, оно может содержать до 25 символов и не может начинаться с пробела.

Затем указывается тип поля ( Type ). Для этого в колонке Type следует правой кнопкой мыши раскрыть список доступных типов и выбрать нужный. В таблицах Paradox используются следующие типы данных:

Обозн а-

Long Integer

Строка любых символов. Размер – число символов

Действительное число с 15 значащими разрядами.

Действительное число с символом денежной единицы

Короткое целое число от -32767 до 32767

Текст неограниченной длины, хранится в отдельном файле типа .mb . Размер – это число первых символов текста, хранящихся непосредственно в таблице.

Форматированный текст неограниченной длины, хранится в отдельном файле. Размер – это число первых символов текста, хранящихся непосредственно в таблице.

Изображение в формате .bmp

Данные типа OLE : изображения, звуки, документы.

Логическое поле – t(rue) или f ( alse )

Автоматически увеличивающееся на 1 длинное целое

Данные, хранящиеся в отдельных двоичных файлах .mb , которые не интерпретируются.

Двоичные данные, которые не интерпретируются. Хранятся в таблице

Для полей соответствующих типов указывается размер в колонке Size . Ключевые поля отмечаются символом «*» в последней колонке Key двойным нажатием кнопки мыши, либо клавишей пробела. Ключевые поля должны быть первыми.

Первая таблица нашей базы, присвоим ей имя Sotrudniki , будет выглядеть примерно так:

Построим ещё одну таблицу – PodrazdFirmy :

Если потребуется что-то изменить в уже созданных и сохранённых таблицах, следует воспользоваться командой Tools – Utilities – Restructure .

Задание свойств таблицы

Теперь можно задать некоторые свойства созданных таблиц. Для этого в правой части окна имеются необходимые поля. Список настраиваемых свойств содержится в выпадающем списке Table propeties . В зависимости от выбранной строки этого списка вид окна будет меняться.

Validity Checks – Проверка правильности значений

Это первая строка выпадающего списка. Здесь можно настроить следующие характеристики полей:

Required Field

Флажком отмечаются те поля, значения которых обязательно должны быть заполнены в каждой записи.

Минимальное значение. Полезно задавать для числовых полей

Максимальное значение. Полезно задавать для числовых полей

Значение по умолчанию.

Шаблон (маска) для ввода данных.

Эта кнопка вызывает диалоговое окно, помогающее создать шаблон.

В нашей таблице можно, например, установить флажок Required Field для полей Family , Name , Otch . Для поля GodRogd можно задать минимальное и максимальное значения. Для поля Pol желательно задать значение по умолчанию.

Table Lookup – Таблица просмотра

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

При выборе этого пункта в выпадающем списке Table propeties на форме появится кнопка Define (определить) . При её нажатии откроется окно создания таблицы просмотра:

На левой панели Fields (поля) показаны поля нашей таблицы. Выберем здесь поле Podrazd и внесём его кнопкой со стрелкой в окошечко Field name ( имя поля ) . На правой панели Lookup table (таблица просмотра) выберем таблицу просмотра PodrazdFirmy и аналогичной кнопкой со стрелкой занесём поле просматриваемой таблицы, из которого будут браться допустимые значения, в окошко Lookup f ield. Это будет поле KodPodrazd .

Secondary Indexes – вторичные индексы

Этот раздел позволяет создать необходимые для дальнейшей работы вторичные индексы (первичный индекс создаётся по ключевым полям автоматически). Нажмём кнопку Define :

В левом окне Fields содержится список доступных полей. Отсюда можно перенести в правое окно Indexed fields поля, включаемые в индекс. Стрелками Chandge order можно изменить порядок следования полей в индексе. После нажатия кнопки ОК потребуется присвоить имя индексу.

На панели радиокнопок Index options можно установить следующие характеристики:

Unique – не допускает одинаковых значений индексных полей;

Maintained – если установлен, индекс обновляется при каждом изменении в таблице;

Case sensitive – если установлен, учитывается регистр символов;

Descending – если установлен, таблица упорядочивается по убыванию значений, иначе – по возрастанию.

Для нашей таблицы полезно будет создать такие индексы:

Fio: Family, Name, Otch – для упорядочивания таблицы сотрудников по алфавиту ;

God: GodRogd – для упорядочивания таблицы по году рождения сотрудников;

PodrFio: Podrazd, Family, Name, Otch – для упорядочивания таблицы по подразделениям, а внутри подразделений по алфавиту.

Referential Integrity – ссылочная целостность

Этот раздел позволяет устанавливать целостность на уровне ссылок между двумя таблицами, одна из которых – главная (родительская), а другая – подчинённая (дочерняя).

Мы можем установить такую связь между таблицами PodrazdFirmy как главной и Sotrudniki как подчинённой, связав поле Podrazd таблицы Sotrudniki с ключевым полем KodPodrazd главной таблицы PodrazdFirmy .

В окне реструктуризации подчинённой таблицы Sotrudniki откроем раздел Referential Integrity и нажмём кнопку Define:

В левом окне Fields выберем поле Podrazd и перенесём его в список дочерних полей Child fields . В правом окне Table выберем главную таблицу PodrazdFirmy и перенесём в список ключей родительской таблицы Parent’s key ключевое поле KodPodrazd. Группа радиокнопок Update rule определяет, что будет, если в главной таблице удалить или изменить значение ключевого поля, с которым связаны какие-то записи во вспомогательной таблице. Если установлено Cascade , то при смене значения ключевого поля в головной таблице аналогичные изменения автоматически произойдут в записях дочерней таблицы, а при удалении записи в головной таблице в дочерней будут удалены все связанные с ней записи. Если установить Prohibit , то подобные операции будут запрещены. Флажок Strict referential integrity связан с предыдущими версиями СУБД и должен быть установлен. Осталось нажать ОК и присвоить имя созданной ссылке.

Password Security – пароли доступа

Этот раздел позволяет задать пароли для таблиц и сформировать правила доступа не только для таблиц но и для отдельных полей. Мы не будем создавать пароли на столь раннем этапе разработки.

Оставшиеся разделы: Table Language (язык таблицы) и Dependent Tables (зависимые таблицы) можно просто просмотреть.

Читайте также: