Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.03.2021, 11:18
denzenit denzenit вне форума
Прохожий
 
Регистрация: 16.12.2020
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию группировка через запрос или код

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

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

Пример:
Основываясь на первом скриншоте смотрим на этот скриншот набор данных одинаковый, просто я сгруппировал и мы можем видеть, что в столбце lcode1 отображается количество записей. Как вы уже вычитали, группировка идёт основываясь на 4 символах каждой записи. для наглядности перенесу это в excel


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

Вот только я понимаю, что я цикл сделал не правильно, а как правильно сделать - не знаю. Обращаюсь к вам в надежде, что дадите подсказку как поступить в данной ситуации
Цитата:
dm.aqSqlTrud.SQL.Text := 'SELECT count(right(left(lcode, 10), 4)) as lcode1, right(left(lcode, 10), 4) as kkk'+
' FROM pf' +
' WHERE Left(lcode, 6) in (' +quotedstr('117К21')+','+quotedstr('117И22')+','+q uotedstr('117И31')+','+quotedstr('117И26')+','+quo tedstr('117И20')+','+
''+quotedstr('117И34')+','+quotedstr('117И35')+',' +quotedstr('117900')+','+quotedstr('117930')+'' +
' group by right(left(lcode, 10), 4)';
dm.aqSqlTrud.Open;
if dm.aqSqlTrud.RecordCount > 0 then
begin
Zasl;
end;




procedure Zasl();
var
sum, lcodesec, masssec: string;
r: string;
c: AnsiChar;
RusArr: array['А'..'Я'] of AnsiChar;
id: integer;
begin
lcodesec = '';
masssec = '';
id = '';
dm.aqSqlTrud.SQL.Text := 'SELECT lcode, nm, kol, prd, zak_nm' +
' FROM pf' +
' WHERE Left(lcode, 6) in (' + quotedstr('117К21') + ',' + quotedstr('117И22') ',' + quotedstr('117И31') ',' + quotedstr('117И26') ',' + quotedstr('117И20') ',' +
'' + quotedstr('117И34') ',' + quotedstr('117И35') ',' + quotedstr('117900') ',' + quotedstr('117930') '' +
' order by right(left(lcode,10),4)';
dm.aqSqlTrud.Open;
for i := 1 to DM.aqSqlTrud.RecordCount do
begin
RusArr[c] := c;
r: = DM.aqSqlTrud.FIELDBYNAME('zak_nm').AsString
id = DM.aqSqlTrud.FIELDBYNAME('id').AsString

for c := 'А' to 'Я' do
if copy(lcodesec, 7, 4) = copy(art, 7, 4) then
r := r + '_' + quotstr(RusArr);
if r = masssec then
begin
r := masssec;
end
else
r := r + '_' + quotstr(RusArr[c]);

end;
lcodesec = : art;
masssec := r;}

dm.aqDiv.SQL.Text := 'UPDATE pf SET zak_nm = ' + quotedstr(r) + ' WHERE id=' + quotedstr(id) + ';
dm.aqDiv.Open;
dm.aqSqlTrud.Next;

end;
Изображения
Тип файла: png Screenshot_9.png (13.4 Кбайт, 0 просмотров)
Тип файла: png Screenshot_10.png (15.6 Кбайт, 0 просмотров)
Ответить с цитированием
  #2  
Старый 01.03.2021, 21:01
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 179
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Вопрос сформулирован очень расплывчато, соответственно помочь не представляется возможным.
"Записи, у которых с 7 по 10 символ значения разные" - это как? Тут можно по-разному понять.
"...а после их обработки эти записи обновлять в бд с изменённым столбцом" - тоже неясно, о чём речь.
И так далее можно продолжать вопросы.
Свой код оформляйте как код (кнопка "КОД" на панели инструментов редактора сообщений"), и форматируйте его по-человечески. А без комментариев совсем уж некомфортно его читать, каша какая-то выходит. Куча переменных и функций непонятного назначения.

Последний раз редактировалось Guaho, 01.03.2021 в 21:04.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter