Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
ТКН
11 / 11 / 5
Регистрация: 27.01.2014
Сообщений: 198
1

Как сделать так, чтобы при просмотре Названий фирм в DBEdit отображался не id_activities, а её описание

17.06.2014, 19:38. Просмотров 1074. Ответов 9
Метки нет (Все метки)

Есть БД, есть 2 таблички Firms and Kind_of_activity.

Как сделать так, чтобы при просмотре Названий фирм в DBEdit отображался не id_activities, а её описание. Тобишь не ид деятельности, а её описание.

Попытка:
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.DBEdit3Change(Sender: TObject);
begin
 
  ADOquery1.Sql.clear;
  ADOquery1.SQL.Add('SELECT Description_activities');
  ADOquery1.SQL.Add('FROM Kind_of_activity, firms');
  ADOquery1.SQL.Add('WHERE Kind_of_activity.id_activities = FIRMS.id_activities');
end;

Таблицы:
MySQL
1
2
3
4
CREATE TABLE `Kind_of_activity` (
`id_activities` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`Description_activities` VARCHAR(70) NOT NULL
);
MySQL
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `Firms`(
`id_Firms` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
`Name` VARCHAR(25) NOT NULL, 
`id_Direktor` INT, 
`Actual_address` VARCHAR(65), 
`Legal_address` VARCHAR(65), 
`Web_site` VARCHAR(25), 
`id_activities` INT,
`Telephone` BIGINT NOT NULL
 );
0
Миниатюры
Как сделать так, чтобы при просмотре Названий фирм в DBEdit отображался не id_activities, а её описание  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2014, 19:38
Ответы с готовыми решениями:

Как сделать, чтобы в ShellTreeView сразу отображался некоторый путь?
Подскажите, плз, как сделать, чтобы в ShellTreeView сразу отображался некоторый...

Как сделать чтобы пры выборе строчки в DBCOmboBox данные подставлялись в DBEdit
Суть проблемы такова: Есть табличка tube_int с полями ID, radius, a, b, c,...

Как сделать так, чтобы при двойном клике по записи в DBgrid открывалась новая форма
как сделать чтобы при двойном клике по записи в DBgrid открывалась новая форма...

Как сделать так чтобы при выборе кафедры в ComboBox1 Содержание Button-ов соответственно менялось?
Снова здравствуйте, уважаемые форумчане. Есть Form2. На форме присутствуют...

Как сделать так, чтобы при вводе данных в одной таблице, они вводились автоматически во второй?
У меня есть две таблицы в SQL Заявки и Материалы. В Материалах есть поля код...

9
andrey_k3
128 / 128 / 41
Регистрация: 17.10.2013
Сообщений: 333
17.06.2014, 22:12 2
к коду
Delphi
1
2
3
4
ADOquery1.Sql.clear;
  ADOquery1.SQL.Add('SELECT Description_activities');
  ADOquery1.SQL.Add('FROM Kind_of_activity, firms');
  ADOquery1.SQL.Add('WHERE Kind_of_activity.id_activities = FIRMS.id_activities');
добавить ADOquery1.SQL.Open, добавить датасурс, связывающий дбэдит с adoquery1, дбэдит связать с полем Description_activities и перенести код с onchange'а дбэдита на afterscroll adoquery, отвечающего за набор в дбгриде
1
ТКН
11 / 11 / 5
Регистрация: 27.01.2014
Сообщений: 198
18.06.2014, 01:35  [ТС] 3
Пытаюсь пытаюсь, что-то ничего не выходит.


Цитата Сообщение от andrey_k3 Посмотреть сообщение
добавить ADOquery1.SQL.Open
куда добавить-то, к тому же вот так: ADOquery1.Open;

Цитата Сообщение от andrey_k3 Посмотреть сообщение
добавить датасурс
Из вкладки "Доступ к Данным"?

Цитата Сообщение от andrey_k3 Посмотреть сообщение
связывающий дбэдит с adoquery1
Не знаю даже как так связать.

код, думаю такой:
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  ADOquery1.open;
  ADOquery1.Sql.clear;
  ADOquery1.SQL.Add('SELECT Description_activities');
  ADOquery1.SQL.Add('FROM Kind_of_activity, firms');
  ADOquery1.SQL.Add('WHERE Kind_of_activity.id_activities = FIRMS.id_activities');
end;
0
northener
пофигист широкого профиля
3429 / 2328 / 631
Регистрация: 15.07.2013
Сообщений: 13,796
18.06.2014, 02:44 4
Цитата Сообщение от ТКН Посмотреть сообщение
Как сделать так, чтобы при просмотре Названий фирм в DBEdit отображался не id_activities, а её описание.
Теоретически можно. Но это такой геморрой!
Ты сначала скажи нафига тебе эту информацию отображать в TDBEdit?
0
ТКН
11 / 11 / 5
Регистрация: 27.01.2014
Сообщений: 198
18.06.2014, 04:25  [ТС] 5
northener, чтоб вот так отображать данные из таблицы(на фото).
Чтобы не было такого :
Деятельность: 1 или 2 или 3, а было написано что за деятельность.
0
Миниатюры
Как сделать так, чтобы при просмотре Названий фирм в DBEdit отображался не id_activities, а её описание  
andrey_k3
128 / 128 / 41
Регистрация: 17.10.2013
Сообщений: 333
18.06.2014, 23:51 6
ADOquery1.Open;
это да, я просмотрел, когда копировал
Не знаю даже как так связать
тут я в замешательстве... а как тогда в дбгрид, который на скрине, данные выводятся? кидаем на форму datasourceN и в dataset у него указываем adoquery1, затем у дбэдита в datasource указываем datasourceN, в field указываем поле из запроса в adoquery1... вот и связали adoquery1 с дбэдитом
код, думаю такой
нет. open должен располагаться между 7 и 8 строками. и код должен располагаться в afterscroll'е другого датасета, который заполняет дбгрид.
а лучше прописать нормальный селект для заполнения дбгрида типа
SQL
1
SELECT firms.field1, firms.field2, ..., Kind_of_activity.Description_activities FROM firms JOIN Kind_of_activity ON (Kind_of_activity.id_activities = firms.id_activities)
а дальше хоть в дбэдит, хоть в эдит, хоть в лэйбл, куда душе угодно, выводить значение поля Kind_of_activity.Description_activities. при этом ни каких дополнительных процедур
1
ТКН
11 / 11 / 5
Регистрация: 27.01.2014
Сообщений: 198
19.06.2014, 19:24  [ТС] 7
Цитата Сообщение от andrey_k3 Посмотреть сообщение
а как тогда в дбгрид, который на скрине, данные выводятся?
Через adoconnection, ADOTable and DataSource. До этого написал подробнее, да поставил вам спасибо...страничка обновилась и комментарий мой удалился.

andrey_k3, буду смотреть.

Добавлено через 15 секунд
Спасибо!

Добавлено через 18 часов 32 минуты
Цитата Сообщение от andrey_k3 Посмотреть сообщение
код должен располагаться в afterscroll'е другого датасета, который заполняет дбгрид
Дбгрид ничем не заполняется, а просто отображает наличие записей в данной таблице , это делается с помощью ADOTable and DataSource.
0
andrey_k3
128 / 128 / 41
Регистрация: 17.10.2013
Сообщений: 333
19.06.2014, 23:15 8
а чем является ADOTable? - dataset'ом... необходимо чтобы при премещении (afterscroll) по строкам дбгрида в отдельном компоненте отображалось значение некоторого поля из таблицы, отличной от выводимой в дбгриде? два варианта:
добавить ADOquery1.SQL.Open, добавить датасурс, связывающий дбэдит с adoquery1, дбэдит связать с полем Description_activities и перенести код с onchange'а дбэдита на afterscroll adoquery adotable, отвечающего за набор в дбгриде
либо менять adotable на adoquery и писать один запрос типа
SQL
1
 SELECT firms.field1, firms.field2, ..., Kind_of_activity.Description_activities FROM firms JOIN Kind_of_activity ON (Kind_of_activity.id_activities = firms.id_activities)
, который будет отображать данные в дбгриде и предоставит возможность вывести значение требуемого поля в сторонний компонент
1
ТКН
11 / 11 / 5
Регистрация: 27.01.2014
Сообщений: 198
20.06.2014, 00:35  [ТС] 9
У меня не выхдит, но буду пытаться.

Я скину дамп, попробуй у себя так сделать?
0
Вложения
Тип файла: rar MyDumpFirm.rar (1.03 Мб, 3 просмотров)
andrey_k3
128 / 128 / 41
Регистрация: 17.10.2013
Сообщений: 333
20.06.2014, 02:35 10
Лучший ответ Сообщение было отмечено ТКН как решение

Решение

писал в lazarus, но суть та же
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
procedure TForm1.Button1Click(Sender: TObject);
begin
  with DataModule1.ZConnection1 do
    begin
      Connected:= False;
      Protocol:= 'mysql-5';
      HostName:= 'localhost';
      Port:= 3306;
      Database:= 'itfirms';
      User:= 'root';
      Password:= '';
      Connected:= True;
    end;
  //********************* с помощью Table и Query ******************************
  //*********** (+ см. procedure TDataModule1.ZTable1AfterScroll) **************
  with DataModule1.ZTable1 do
    begin
      Active:= False;
      Connection:= DataModule1.ZConnection1;
      TableName:= 'firms';
      Active:= True;
    end;
  DataModule1.Datasource1.DataSet:= DataModule1.ZTable1;
  DataModule1.Datasource2.DataSet:= DataModule1.ZQuery2;
  with DBGrid1 do
    begin
      DataSource:= DataModule1.Datasource1;
      Columns.Clear;
      Columns.Add.FieldName:= 'name';
      Columns.Add.FieldName:= 'id_activities';
    end;
  with DBEdit1 do
    begin
      DataSource:= DataModule1.Datasource2;
      DataField:= 'Description_activities';
    end;
  //********************* с помощью одного запроса *****************************
  with DataModule1.ZQuery3 do
    begin
      Active:= False;
      Connection:= DataModule1.ZConnection1;
      SQL.Clear;
      SQL.Add
        (
          'SELECT firms.name, firms.id_activities, ' +
          'Kind_of_activity.Description_activities FROM firms ' +
          'JOIN Kind_of_activity ON ' +
          '(Kind_of_activity.id_activities = firms.id_activities) ' +
          'ORDER BY firms.name'
        );
      Open;
    end;
  DataModule1.Datasource3.DataSet:= DataModule1.ZQuery3;
  with DBGrid2 do
    begin
      DataSource:= DataModule1.Datasource3;
      Columns.Clear;
      Columns.Add.FieldName:= 'name';
      Columns.Add.FieldName:= 'id_activities';
    end;
  with DBEdit2 do
    begin
      DataSource:= DataModule1.Datasource3;
      DataField:= 'Description_activities';
    end;
end;
...
procedure TDataModule1.ZTable1AfterScroll(DataSet: TDataSet);
begin
  with ZQuery2 do
    begin
      Active:= False;
      Connection:= ZConnection1;
      SQL.Clear;
      SQL.Add
        (
          'SELECT Description_activities FROM Kind_of_activity, firms ' +
          'WHERE Kind_of_activity.id_activities = :id_activities'
        );
      ParamByName('id_activities').Value:=
        ZTable1.FieldByName('id_activities').Value;
      Open;
    end;
end;
на скрине: верхние dbgrid и dbedit - с помощью table и query, нижние - с помощью одного запроса
1
Миниатюры
Как сделать так, чтобы при просмотре Названий фирм в DBEdit отображался не id_activities, а её описание  
20.06.2014, 02:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2014, 02:35

Как сделать так, чтобы при нажати на Calendar1 на ячейку отобразилось число которое выбрано в Label1?
как сделать так что бы при нажати на Calendar1 на ячейку отоброзилось число...

как сделать так чтобы при активном checkbox на базу данных выводило цифры через sql запрос
например при активном checkbox1 выводит на БД Access цифру 1. программу надо...

Как сделать так, чтобы при выборе любого договора из списка в таблице, изменялись значения edit внизу?
как сделать так, чтобы когда выбирал любой договор, менялись значения внизу в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru