delphi DBGrid отображает результаты JOIN - PullRequest
0 голосов
/ 17 октября 2011

Я работаю с BDS 2006, MySQL DB (компоненты MyDAC, используемые для подключения), и у меня есть компонент DBGrid в моей форме, который отображает записи из моей таблицы БД.

Теперь мне нужно JOIN две таблицы и отображать результаты в моем DBGrid

Полученное представление, которое я должен получить, является результатом запроса

SELECT e_salary.e_basic,e_details.e_name FROM e_details INNER JOIN e_salary ON e_details.e_id=e_salary.e_id;

есть одинбольше возможностей сделать это, когда я искал

SELECT e_salary.e_basic,e_details.e_name FROM e_details, e_salary WHERE e_details.e_id=e_salary.e_id;

e_details, e_salary - это две мои таблицы, а e_id - моя PRIMARY KEY

В настоящее время у меня 2 DBGrid один для e_details и другой для e_salary

Можно ли иметь только 1 DBGrid, отображающий значения из обеих таблиц?или мне нужно отобразить 2 отдельных DBGrid?

Если возможно, то как мне это сделать

PS - в представлении можно добавить больше столбцов, и обе таблицы имеют одинаковое количество строк

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 17 октября 2011
  1. DBGrid отображает данные набора данных. Данные могут быть результатом выполнения некоторого SQL-запроса. DBGrid, TDataSet и TDataSource не обращают внимания на запрос SQL. Отдельная таблица SELECT, несколько таблиц SELECT с объединениями, вызов хранимой процедуры или команда SHOW. Итак, да - вы можете использовать 1 DBGrid для отображения набора результатов вашего SELECT, соединяющего 2 таблицы.
  2. Если в обеих таблицах одинаковое количество строк, e_id является первичным ключом для обеих таблиц, тогда почему бы не иметь одну таблицу, содержащую столбцы обеих таблиц? Кроме того, если вам потребуется изменить данные набора данных, могут возникнуть проблемы с обновлением столбцов обеих таблиц. И это может быть еще один аргумент, чтобы иметь одну таблицу.
  3. Хотя вы можете использовать WHERE e_details.e_id=e_salary.e_id вместо JOIN e_salary ON e_details.e_id=e_salary.e_id. JOIN предпочтительнее, потому что СУБД получает ваше намерение более явно, и это более читабельно для других.
0 голосов
/ 17 октября 2011

DBgrid, вероятно, не тот компонент, который вам нужен.Посмотрите на TTreeView

http://delphi.about.com/od/vclusing/l/aa060603a.htm

...