Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199

Вывод данных по запросу SQL

02.08.2016, 18:43. Показов 1486. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи, всю голову сломал. Как написать код, проще чем я сделал. Он работает, но мне не нравится, получается большой.
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
procedure TForm_DislokaciuaVagonov.pgc1Change(Sender: TObject);
var
  Dislakaciua, Sobst_Arenda, Ne_Raspredelenka, Ne_RaspredelenkaSVR, Prostoi_PV, a, b, RP_NRP: Integer;
 
  AZR, ALM, BEL, VSB, GOR, ARM, JDUA, GRZ, DVS, DON, ZAB, ZKZ, ZSB, KAZ, KBSH, KRG, KLG, KRS, KRIM,
  LAT, LIT, LIV, MLD, EST, MSK, NET, ODS, OKT, PDN, PRV, SVR, SEV, SKV, TRK, UZB, UVS, UJN, UZP,
  UYR, Pusto, TDJ: Boolean;
 
  d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16,
  d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31, d32,
  d33, d34, d35, d36, d37, d38, d39, d40: string;
 
  Ne_Raspredelen, TekushuiRemont, DepovskoiRemont, Pereregistraciua: string;
 
  Data, Mesuc:TDateTime;
 
  NachaloMesuaca, KonecMesuaca: TDate;
 
  index, i, MesData: Integer;
 
  Month: Word; //Месяц
 
  VagRasprNoGU12, OjSoglZapr, Pereraspredelenie, SoglasUvedom, Otmena: string;
 
begin
  Ne_Raspredelen := 'Не распределен';
  TekushuiRemont := 'Текущий отцепочный ремонт';
  DepovskoiRemont := 'Деповской ремонт';
  Pereregistraciua := 'Перерегистрация';
 
  AZR := DataModule1.FDQuery_SotrudnikAZR.AsBoolean;
  ALM := DataModule1.FDQuery_SotrudnikALM.AsBoolean;
  BEL := DataModule1.FDQuery_SotrudnikBEL.AsBoolean;
  VSB := DataModule1.FDQuery_SotrudnikVSB.AsBoolean;
  GOR := DataModule1.FDQuery_SotrudnikGOR.AsBoolean;
  ARM := DataModule1.FDQuery_SotrudnikARM.AsBoolean;
  JDUA := DataModule1.FDQuery_SotrudnikJDUA.AsBoolean;
  GRZ := DataModule1.FDQuery_SotrudnikGRZ.AsBoolean;
  DVS := DataModule1.FDQuery_SotrudnikDVS.AsBoolean;
  DON := DataModule1.FDQuery_SotrudnikDON.AsBoolean;
  ZAB := DataModule1.FDQuery_SotrudnikZAB.AsBoolean;
  ZKZ := DataModule1.FDQuery_SotrudnikZKZ.AsBoolean;
  ZSB := DataModule1.FDQuery_SotrudnikZSB.AsBoolean;
  KAZ := DataModule1.FDQuery_SotrudnikKAZ.AsBoolean;
  KBSH := DataModule1.FDQuery_SotrudnikKBSH.AsBoolean;
  KRG := DataModule1.FDQuery_SotrudnikKRG.AsBoolean;
  KLG := DataModule1.FDQuery_SotrudnikKLG.AsBoolean;
  KRS := DataModule1.FDQuery_SotrudnikKRS.AsBoolean;
  KRIM := DataModule1.FDQuery_SotrudnikKRIM.AsBoolean;
  LAT := DataModule1.FDQuery_SotrudnikLAT.AsBoolean;
  LIT := DataModule1.FDQuery_SotrudnikLIT.AsBoolean;
  LIV := DataModule1.FDQuery_SotrudnikLIV.AsBoolean;
  MLD := DataModule1.FDQuery_SotrudnikMLD.AsBoolean;
  EST := DataModule1.FDQuery_SotrudnikEST.AsBoolean;
  MSK := DataModule1.FDQuery_SotrudnikMSK.AsBoolean;
  NET := DataModule1.FDQuery_SotrudnikNET.AsBoolean;
  ODS := DataModule1.FDQuery_SotrudnikODS.AsBoolean;
  OKT := DataModule1.FDQuery_SotrudnikOKT.AsBoolean;
  PDN := DataModule1.FDQuery_SotrudnikPDN.AsBoolean;
  PRV := DataModule1.FDQuery_SotrudnikPRV.AsBoolean;
  SVR := DataModule1.FDQuery_SotrudnikSVR.AsBoolean;
  SEV := DataModule1.FDQuery_SotrudnikSEV.AsBoolean;
  SKV := DataModule1.FDQuery_SotrudnikSKV.AsBoolean;
  TRK := DataModule1.FDQuery_SotrudnikTRK.AsBoolean;
  UZB := DataModule1.FDQuery_SotrudnikUZB.AsBoolean;
  UVS := DataModule1.FDQuery_SotrudnikUVS.AsBoolean;
  UJN := DataModule1.FDQuery_SotrudnikUJN.AsBoolean;
  UZP := DataModule1.FDQuery_SotrudnikUZP.AsBoolean;
  UYR := DataModule1.FDQuery_SotrudnikUYR.AsBoolean;
  Pusto := DataModule1.FDQuery_SotrudnikPusto.AsBoolean;
  TDJ := DataModule1.FDQuery_SotrudnikTDJ.AsBoolean;
 
  d0 := 'АЗР';
  d1 := 'АЛМ';
  d2 := 'БЕЛ';
  d3 := 'ВСБ';
  d4 := 'ГОР';
  d5 := 'ГРЗ';
  d6 := 'ДВС';
  d7 := 'ДОН';
  d8 := 'ЗАБ';
  d9 := 'ЗКЗ';
  d10 := 'ЗСБ';
  d11 := 'КАЗ';
  d12 := 'КБШ';
  d13 := 'КРГ';
  d14 := 'КЛГ';
  d15 := 'КРС';
  d16 := 'КРМ';
  d17 := 'ЛАТ';
  d18 := 'ЛИТ';
  d19 := 'ЛЬВ';
  d20 := 'МСК';
  d21 := 'НЕТ Д';
  d22 := 'ОДС';
  d23 := 'ОКТ';
  d24 := 'ПДН';
  d25 := 'ПРВ';
  d26 := 'СВР';
  d27 := 'СЕВ';
  d28 := 'СКВ';
  d29 := 'ТРК';
  d30 := 'УЗБ';
  d31 := 'ЮВС';
  d32 := 'ЮЖН';
  d33 := 'ЮЗП';
  d34 := 'ЮУР';
  d35 := '';
  d36 := 'ТДЖ';
  d37 := 'АЗР';
  d38 := 'ЖДЯ';
  d39 := 'МЛД';
  d40 := 'ЭСТ';
 
    //Елена
    if (DataModule1.FDQuery_SotrudnikFamiliua.AsString = StatusBar1.Panels[1].Text) and
      ((AZR = False) and (ALM = False) and (BEL = False) and (VSB = False) and (GOR = False) and (DVS = False) and (GRZ = False) and
      (DON = False) and (ZAB = False) and (ZKZ = False) and (ZSB = False) and (KAZ = False) and (KBSH = False) and (KRG = False) and
      (KLG = False) and (KRS = False) and (KRIM = False) and (LAT = False) and (LIT = False) and (LIV = False) and (MSK = False) and
      (OKT = False) and (NET = True) and (ODS = False) and (PDN = False) and (PRV = False) and (SVR = True) and (SEV = False) and
      (SKV = True) and (TRK = False) and (UZB = False) and (UVS = False) and (UJN = False) and (UZP = False) and (UYR = False) and
      (Pusto = True) and (TDJ = False))
    then
    begin
      with DataModule26.FDQuery_Prostoi_Dislokaciua do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM Table_Dislokaciua');
        SQL.Add('WHERE (Data_Poiska = (SELECT MAX(Data_Poiska)FROM Table_Dislokaciua)) AND  (Gruppa_Vagona = 0 OR Gruppa_Vagona = 1) AND (Prostoi > 72) and ((Doroga_ST_Gruz_Operaciua = '''+d21+''' OR Doroga_ST_Gruz_Operaciua= '''+d28+''' OR Doroga_ST_Gruz_Operaciua = '''+d35+''') OR (Doroga_Naznacheniua = '''+d21+''' OR Doroga_Naznacheniua= '''+d28+''' OR Doroga_Naznacheniua = '''+d35+''')) AND (Prichina_Prostoua is Null)');
        Open;
      end;
    end;
 
    //Сергей
    if (DataModule1.FDQuery_SotrudnikFamiliua.AsString = StatusBar1.Panels[1].Text) and
      ((AZR = False) and (ALM = False) and (BEL = False) and (VSB = False) and (GOR = False) and (DVS = True) and (GRZ = False) and
       (DON = False) and (ZAB = False) and (ZKZ = False) and (ZSB = False) and (KAZ = False) and (KBSH = False) and (KRG = False) and
       (KLG = False) and (KRS = False) and (KRIM = False) and (LAT = False) and (LIT = False) and (LIV = False) and (MSK = False) and
       (OKT = True) and (NET = True) and (ODS = False) and (PDN = False) and (PRV = False) and (SVR = True) and (SEV = False) and
       (SKV = False) and (TRK = False) and (UZB = False) and (UVS = False) and (UJN = False) and (UZP = False) and (UYR = False) and
       (Pusto = True) and (TDJ = False))
    then
    begin
      with DataModule26.FDQuery_Prostoi_Dislokaciua do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM Table_Dislokaciua');
        SQL.Add('WHERE (Data_Poiska = (SELECT MAX(Data_Poiska)FROM Table_Dislokaciua)) and (Gruppa_Vagona = 0 OR Gruppa_Vagona = 1) AND (Prostoi > 72) and ((Doroga_ST_Gruz_Operaciua = '''+d6+''' OR Doroga_ST_Gruz_Operaciua = '''+d21+''' OR Doroga_ST_Gruz_Operaciua = '''+d23+''' OR Doroga_ST_Gruz_Operaciua = '''+d35+''') AND (Doroga_Naznacheniua = '''+d6+''' OR Doroga_Naznacheniua = '''+d21+''' OR Doroga_Naznacheniua = '''+d23+''' OR Doroga_Naznacheniua = '''+d35+''')) AND (Prichina_Prostoua is Null)');
        Open;
      end;
    end;
 
    //Дмитрий
    if (DataModule1.FDQuery_SotrudnikFamiliua.AsString = StatusBar1.Panels[1].Text) and
      ((AZR = False) and (ALM = False) and (BEL = False) and (VSB = False) and (GOR = False) and (DVS = False) and (GRZ = False) and
       (DON = False) and (ZAB = False) and (ZKZ = False) and (ZSB = True) and (KAZ = False) and (KBSH = False) and (KRG = False) and
       (KLG = False) and (KRS = False) and (KRIM = False) and (LAT = False) and (LIT = False) and (LIV = False) and (MSK = False) and
       (OKT = False) and (NET = True) and (ODS = False) and (PDN = False) and (PRV = True) and (SVR = False) and (SEV = False) and
       (SKV = False) and (TRK = False) and (UZB = False) and (UVS = True) and (UJN = False) and (UZP = False) and (UYR = False) and
       (Pusto = True) and (TDJ = False))
    then
    begin
      with DataModule26.FDQuery_Prostoi_Dislokaciua do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM Table_Dislokaciua');
        SQL.Add('WHERE (Data_Poiska = (SELECT MAX(Data_Poiska)FROM Table_Dislokaciua)) and (Gruppa_Vagona = 0 OR Gruppa_Vagona = 1) AND (Prostoi > 72) and ((Doroga_ST_Gruz_Operaciua = '''+d10+''' OR Doroga_ST_Gruz_Operaciua = '''+d21+''' OR Doroga_ST_Gruz_Operaciua = '''+d25+''' OR Doroga_ST_Gruz_Operaciua = '''+d31+''' OR Doroga_ST_Gruz_Operaciua = '''+d35+''') AND (Doroga_Naznacheniua = '''+d10+''' OR Doroga_Naznacheniua = '''+d21+''' OR Doroga_Naznacheniua = '''+d25+''' OR Doroga_Naznacheniua = '''+d31+''' OR Doroga_Naznacheniua = '''+d35+''')) AND (Prichina_Prostoua is Null)');
        Open;
      end;
    end;
 
  Prostoi_PV := dbgrd5.DataSource.DataSet.RecordCount;
  StatusBar1.Panels[3].Text := IntToStr(Prostoi_PV);
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.08.2016, 18:43
Ответы с готовыми решениями:

Sql запросы / вывод данных
нужно вывести макс и мин по цене. все отлично выводится, но помимо того, что макс и мин выводятся в edit1 и edit2, также изменяется...

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

Вывод данных из базы sql в label
Доброго времени суток! Помогите пожалуйста реализовать вывод данных из БД MS SQL Server 2008. На форме есть DBLookupCombobox и 7...

21
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
02.08.2016, 18:51
А что он должен делать?
0
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199
02.08.2016, 18:54  [ТС]
Есть две таблицы, одна с параметрами по человеку, другая таблица с данными. Нужно по тем параметрам, что у человека через запрос SQL отсортировать банные во второй таблице
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
02.08.2016, 20:12
Цитата Сообщение от kabachok Посмотреть сообщение
Нужно по тем параметрам, что у человека через запрос SQL отсортировать банные во второй таблице
Всмысле связать их? Структура таблицы какая? И что собственно ты на выходе хочешь получить?
0
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199
02.08.2016, 20:47  [ТС]
Вот первая таблица, данные с Boolean значением.
Создал переменные
Цитата Сообщение от kabachok Посмотреть сообщение
AZR := DataModule1.FDQuery_SotrudnikAZR.AsBoole an;
* ALM := DataModule1.FDQuery_SotrudnikALM.AsBoole an;
* BEL := DataModule1.FDQuery_SotrudnikBEL.AsBoole an;
* VSB := DataModule1.FDQuery_SotrudnikVSB.AsBoole an;
* GOR := DataModule1.FDQuery_SotrudnikGOR.AsBoole an;
* ARM := DataModule1.FDQuery_SotrudnikARM.AsBoole an;
Надо с помощью запроса, если переменная в True, найти соответствующее значение во второй таблице в столбце "Дорога назначения"
У меня в самом первом примере идет поиск по каждому человеку, а это очень длинный код получается. При любом изменении, придется переписывать код.
Как упростить запрос?
Миниатюры
Вывод данных по запросу SQL   Вывод данных по запросу SQL  
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,667
Записей в блоге: 21
02.08.2016, 21:19
Лучший ответ Сообщение было отмечено kabachok как решение

Решение

ну очевидно же, одинаковые сущности должны храниться вдоль таблицы, а не поперек
все что тут сделано полями, должно быть записями
по записям цикл
проблема в архитектуре
1
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
03.08.2016, 07:40
Лучший ответ Сообщение было отмечено kabachok как решение

Решение

Цитата Сообщение от kabachok Посмотреть сообщение
Как упростить запрос?
Да... Тут и вправду нужно переделывать БД...
Мне очень сложно ответить как упростить... Ну если не переделывать структуру, то хотя бы в твоем коде вместо переменных сделать массив.
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
procedure TForm_DislokaciuaVagonov.pgc1Change(Sender: TObject);
const 
 d:array[1..40] of string=(
  'АЗР',    'АЛМ',    'БЕЛ',    'ВСБ',    'ГОР',    'ГРЗ',    'ДВС',    'ДОН',    'ЗАБ',    
  'ЗКЗ',    'ЗСБ',    'КАЗ',    'КБШ',    'КРГ',    'КЛГ',    'КРС',    'КРМ',    'ЛАТ',    
  'ЛИТ',    'ЛЬВ',    'МСК',    'НЕТ Д',    'ОДС',    'ОКТ',    'ПДН',    'ПРВ',    
  'СВР',    'СЕВ',    'СКВ',    'ТРК',    'УЗБ',    'ЮВС',    'ЮЖН',    'ЮЗП',    
  'ЮУР',    '',    'ТДЖ',    'АЗР',    'ЖДЯ',    'МЛД',    'ЭСТ', );
var
  ...
  StFields:TStringList; 
  i:integer;
begin
  Ne_Raspredelen := 'Не распределен';
  TekushuiRemont := 'Текущий отцепочный ремонт';
  DepovskoiRemont := 'Деповской ремонт';
  Pereregistraciua := 'Перерегистрация';
  StFields:=TStringList.Create;
  with DataModule1.FDQuery do begin
   for i:=0 to FieldsCount-1 do begin
    StFields.Values[Fields[i].FieldName]:=BoolToStr(Fields[i].AsBoolean);
   end;
  end; 
  
 
 
 
    //Елена
    if (DataModule1.FDQuery_SotrudnikFamiliua.AsString = StatusBar1.Panels[1].Text) and
      ( (StFields.Values['NET'] = 'True') 
      and (StFields.Values['SVR'] = 'True') 
      and (StFields.Values['SKV'] = 'True') 
      and (StFields.Values['Pusto'] = 'True'))
    then
    begin
      with DataModule26.FDQuery_Prostoi_Dislokaciua do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM Table_Dislokaciua');
        SQL.Add('WHERE (Data_Poiska = (SELECT MAX(Data_Poiska)FROM Table_Dislokaciua)) AND  (Gruppa_Vagona = 0 OR Gruppa_Vagona = 1) AND (Prostoi > 72) and ((Doroga_ST_Gruz_Operaciua = '''+d21+''' OR Doroga_ST_Gruz_Operaciua= '''+d28+''' OR Doroga_ST_Gruz_Operaciua = '''+d35+''') OR (Doroga_Naznacheniua = '''+d21+''' OR Doroga_Naznacheniua= '''+d28+''' OR Doroga_Naznacheniua = '''+d35+''')) AND (Prichina_Prostoua is Null)');
        Open;
      end;
    end;
 
    //Сергей
    if (DataModule1.FDQuery_SotrudnikFamiliua.AsString = StatusBar1.Panels[1].Text) and
      (Здесь то же самое)
    then
    begin
      with DataModule26.FDQuery_Prostoi_Dislokaciua do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM Table_Dislokaciua');
        SQL.Add('WHERE (Data_Poiska = (SELECT MAX(Data_Poiska)FROM Table_Dislokaciua)) and (Gruppa_Vagona = 0 OR Gruppa_Vagona = 1) AND (Prostoi > 72) and ((Doroga_ST_Gruz_Operaciua = '''+d6+''' OR Doroga_ST_Gruz_Operaciua = '''+d21+''' OR Doroga_ST_Gruz_Operaciua = '''+d23+''' OR Doroga_ST_Gruz_Operaciua = '''+d35+''') AND (Doroga_Naznacheniua = '''+d6+''' OR Doroga_Naznacheniua = '''+d21+''' OR Doroga_Naznacheniua = '''+d23+''' OR Doroga_Naznacheniua = '''+d35+''')) AND (Prichina_Prostoua is Null)');
        Open;
      end;
    end;
 
    //Дмитрий
    if (DataModule1.FDQuery_SotrudnikFamiliua.AsString = StatusBar1.Panels[1].Text) and
      (И здесь)
    then
    begin
      with DataModule26.FDQuery_Prostoi_Dislokaciua do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM Table_Dislokaciua');
        SQL.Add('WHERE (Data_Poiska = (SELECT MAX(Data_Poiska)FROM Table_Dislokaciua)) and (Gruppa_Vagona = 0 OR Gruppa_Vagona = 1) AND (Prostoi > 72) and ((Doroga_ST_Gruz_Operaciua = '''+d10+''' OR Doroga_ST_Gruz_Operaciua = '''+d21+''' OR Doroga_ST_Gruz_Operaciua = '''+d25+''' OR Doroga_ST_Gruz_Operaciua = '''+d31+''' OR Doroga_ST_Gruz_Operaciua = '''+d35+''') AND (Doroga_Naznacheniua = '''+d10+''' OR Doroga_Naznacheniua = '''+d21+''' OR Doroga_Naznacheniua = '''+d25+''' OR Doroga_Naznacheniua = '''+d31+''' OR Doroga_Naznacheniua = '''+d35+''')) AND (Prichina_Prostoua is Null)');
        Open;
      end;
    end;
 
  Prostoi_PV := dbgrd5.DataSource.DataSet.RecordCount;
  StatusBar1.Panels[3].Text := IntToStr(Prostoi_PV);
StFields.Free;
end;
Это с коленки. Вообще конечно прислушайся к Крапоткину. Такая БД тебе только в тягость станет.
Ее нужно в набор справочников превращать.
1
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
04.08.2016, 13:59
Цитата Сообщение от Hikari Посмотреть сообщение
в набор справочников превращать
Это смотря насколько все запущено уже. Если только начал программу, то можно и попревращать)). А если мильен процедур после этого переписывать и всю логику менять, то пусть лучше остается.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,667
Записей в блоге: 21
04.08.2016, 14:07
на этом материале до мильона не доехать...
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
04.08.2016, 15:30
Цитата Сообщение от kavasaka Посмотреть сообщение
А если мильен процедур после этого переписывать и всю логику менять, то пусть лучше остается.
Ну дело твое... Я такие проекты бракую. Даже если в ущерб. Иначе потом будет все труднее и труднее навешивать обновки по желанию заказчика.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
07.08.2016, 19:53
Есть у меня подозрение, что ваша огромная куча значений чудно реализуется через битовые маски. Зачем хранить 40 бит раздельно, если их можно записать одним числом?
Вот скажем можно реализовать это примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const
  AZR: UInt64 = 1;
  ...
  NET: UInt64 = 4194304; 
  SVR: UInt64 = 67108864;
  SKV: UInt64 = 268435456; 
  Pusto: UInt64 = 34359738368;
var
  Value: UInt64;
begin
 Value := NET + SVR + SKV + Pusto; //Запишем четыре конкретных бита в число
 if Value and NET and SVR and SKV and Pusto = 0 // Проверим наличие нужных бит в числе
 then ShowMessage('True');
 
 if Value and NET and SVR and SKV and UZP = 0
 then ShowMessage('False');
 
end;
Добавлено через 35 минут
Хотя немного не так надо проверку делать, у вас надо проверять все биты, а не только несколько конкретных:
Delphi
1
2
 if Value = (NET + SVR + SKV + Pusto)
 then ShowMessage('True');
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,667
Записей в блоге: 21
07.08.2016, 21:35
поиск в базе по битовым маскам удовольствие ниже среднего
0
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199
08.08.2016, 00:33  [ТС]
Прошу прощения, что не ответил, был вынужден от ехать.
Цитата Сообщение от Hikari Посмотреть сообщение
Я такие проекты бракую. Даже если в ущерб. Иначе потом будет все труднее и труднее навешивать обновки по желанию заказчика.
Я с тобой полностью согласен, по этому и обратился за помощью.
Цитата Сообщение от Hikari Посмотреть сообщение
Мне очень сложно ответить как упростить... Ну если не переделывать структуру, ...
Прошу помочь переделать структуру, хотя бы дай какие либо примеры, буду разбираться.

Добавлено через 1 час 28 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
ну очевидно же, одинаковые сущности должны храниться вдоль таблицы, а не поперек
все что тут сделано полями, должно быть записями
по записям цикл
проблема в архитектуре
Я тебя похоже понял, буду переделывать
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
08.08.2016, 01:06
поиск в базе по битовым маскам удовольствие ниже среднего
А я вроде и не предлагал в базе искать по битовой маске. Я предложил альтернативный способ хранения кучи логических переменных и способ их обработки. А вот искать в базе конкретное значение, собранное предварительно из бит-масок вполне удобный и быстрый вариант. Единственный недостаток данного метода, это ограничение на количество бит.
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
08.08.2016, 08:42
Цитата Сообщение от kabachok Посмотреть сообщение
Прошу помочь переделать структуру, хотя бы дай какие либо примеры, буду разбираться.
А я не знаю твоего техзадания. Ничем помочь не смогу не зная подробностей.
0
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199
08.08.2016, 08:55  [ТС]
Вы меня и так навели на хорошие мысли, и дала хорошие примеры. Как сделаю, хочу обязательно поделиться. Может, что не так сделаю, так вы меня покритикуете, это полезно бывает.
0
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199
10.08.2016, 10:42  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
ну очевидно же, одинаковые сущности должны храниться вдоль таблицы, а не поперек
все что тут сделано полями, должно быть записями
по записям цикл
проблема в архитектуре
Сделал изменения в БД, смотреть вложения.
Но как сделать так, чтобы данные из таблице 2, столбец "Doroga_Naznaceniua" соответствовали данным из таблице 1, столбец "Doroga", с помощью запроса SQL
Я не могу сообразить как написать цикл, что бы показывало в DBGrid все дороги из таблице 1 в таблице 2
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
if (PageControl2.ActivePageIndex = 3) then
  begin
    with DataModule45.FDQuery_KururovanueDorog do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM KururovanueDorog_Table');
      SQL.Add('WHERE (sotrudnik = '''+StatusBar1.Panels[1].Text+''')');
      Open;
    end;
 
    if DataModule45.FDQuery_KururovanueDorog.FieldByName('sotrudnik').AsString = StatusBar1.Panels[1].Text then
    begin
      for i := 0 to DataModule45.FDQuery_KururovanueDorog.DataSource.DataSet.RecordCount - 1 do
      begin
         Что тут написать?
      end;
    end;
      with DataModule48.FDQuery_Ne_Raspredelenka do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT DislogVagonTAUS_Table.*, OrganRaboti_Table.* FROM DislogVagonTAUS_Table INNER JOIN OrganRaboti_Table ON DislogVagonTAUS_Table.Nomer_Vagona = OrganRaboti_Table.Nomer_Vagona');
        SQL.Add('WHERE (Data_Pouska = (SELECT MAX(Data_Pouska)FROM DislogVagonTAUS_Table)) AND  (Nomer_Gruppa = 1 OR Nomer_Gruppa = 2) and');
        SQL.Add('(Plan_Pogruzki = '''+'Не распределен'+''') and (Doroga_Naznaceniua = '''+??? что сюда написать ???+''')');
        Open;
      end;
  end;
Миниатюры
Вывод данных по запросу SQL   Вывод данных по запросу SQL  
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,667
Записей в блоге: 21
10.08.2016, 14:52
что хоть за сервер-то?
и вторая картинка вообще не видна
0
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199
10.08.2016, 14:53  [ТС]
Microsoft SQL Server 2008 R2
0
22 / 4 / 1
Регистрация: 25.03.2012
Сообщений: 199
10.08.2016, 20:10  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
и вторая картинка вообще не видна
как и просил
Миниатюры
Вывод данных по запросу SQL  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2016, 20:10
Помогаю со студенческими работами здесь

Выделение строк DBGridEh по SQL запросу
Добрый день, перелистал кучу подобных тем на этом и сторонних ресурсах, господа которые шарят, говорят что надо использовать метод...

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

Вывод по запросу
Есть бд, выводится в dbgrid. Таблица содержит Ф. И. О. например там 10 человек, 2 из которых Ивановых. Я набираю, например в edit1...

Вывод данных обработки запросов SQL во внешний файл и на печать
Не могли бы вы помочь мне с этим заданием: Необходимо выводить данные обработки запросов SQL во внешний файл и на печать. Добавлено...

Вывод данных связанных таблиц в одном DBGrid и без SQL
БД - access Кинул компоненты на DataModule, ADOConnection, ADOTable, DataSource ... Связал таблицы через MasterSource и Masterfield ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru