Я пытаюсь создать подсчет количества раз, когда каждый ProductCode используется в моей базе данных. Проблема в том, что я не знаю, что все коды (или больше могут быть добавлены).Как найти индекс записи в TList?
Я предполагаю, что я мог бы использовать TList, с парами значений (ProductCode и количество), чтобы сделать это что-то вроде этого (я пытаюсь относиться к этому, как список <> из C# и т.д.)
procedure myProc
type
TProductCodeCount = record
productCode : string;
count : integer;
end;
var
productCodes : TList<TProductCodeCount>;
newProductCodeCount : TProductCodeCount;
currProductCodeCount : TProductCodeCount;
currentProductCode : string;
productCodeIndex : integer;
begin
productCodes := TList<TProductCodeCount>.Create;
// Get my data set
// Loop through my data set
begin
currentProductCode := // value from the database ;
productCodeIndex := productCodes.indexOf(currentProductCode);
if productCodeIndex = -1 then
begin
newProductCodeCount.productCode := currentProductCode;
newProductCodeCount.count := 1;
productCodes.Add(newProductCodeCount)
end
else
begin
currProductCodeCount := productCodes.Extract(productCodeIndex);
currProductCodeCount.count := currProductCodeCount.count + 1'
productCodes.Delete(productCodeIndex);
productCodes.Add (currProductCodeCount);
end
end;
// Loop through my TList
begin
// do something with each productCode and count.
end
end;
Здесь есть две большие вещи.
- Я не уверен, как код сравнения для IndexOf работать (если это вообще возможно для TList рекордного типа
- Обновление элемента списка неуклюжее.
Как я могу сделать сравнение? Или есть гораздо лучший способ для достижения этой цели?
Почему список пар ценностей? Если у вас XE7, вы можете использовать TDictionary. Затем сравнение можно выполнить, передав результат TComparer .Construct (... вот код кода ...) в словарь во время создания. –
Я не очень хорошо разбираюсь в базах данных, но я бы ожидал, что что-то подобное можно сделать на уровне базы данных. Если поле productCode индексируется, то в базе данных уже есть все разные записи, хранящиеся в его индексной таблице. Как их получить, я не знаю. Также я уверен, что большинство баз данных позволяет вам получить количество записей, которые соответствуют конкретному запросу, без фактического их извлечения. Так что вам нужно всего лишь сделать определенный запрос для каждого конкретного productCode, чтобы узнать, сколько записей содержит этот конкретный код продукта. – SilverWarior
Не могли бы вы просто запустить 'SELECT ProductCode, COUNT (ProductCode) FROM Products GROUP BY ProductCode'? –