Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизSQL по выбору одновременной работы с приложениями Найти похожие ветки
← →
DelphiN! © (2007-12-06 15:13) [0]Есть таблица с логом все запущенных на компьютерах приложениях
Computer_ Application_ Time_
K1 Word 01.12.2007 14:07:01
K34 Excel 01.12.2007 14:09:00
K1 Excel 01.12.2007 14:09:00
K2 Word 01.12.2007 14:08:00
K3 Word 01.12.2007 15:00:00
K1 CALC 01.12.2007 14:15:00
K34 notepad 01.12.2007 14:12:00
K3 mspaint 01.12.2007 15:13:15
K2 Access 01.12.2007 14:30:00
Нужно вывести из этой таблицы количество одновременно запущенных на разных компьютерах копий приложений
В результате мы должны получить :
Application_ Count_
Word 2
Excel 2
Access 0
mspaint 0
calc 0
notepad 0
Второй день мучаюсь никак не могу сообразить, как это сделать :(
← →
Johnmen © (2007-12-06 15:25) [1]Самое простое - написать ХП.
Одним запросом - это надо подумать...
← →
Palladin © (2007-12-06 15:26) [2]бедняжка
Var
src:TStringList;
pvt:TStringList;
s:String;
n:Integer;
...
For i:=0 to src.Count-1 Do
Begin
n:=Pos(#9,src[i]);
s:=Copy(src[i],n+1,Length(src[i]));
n:=Pos(#9,s);
s:=Copy(s,1,n-1);
n:=pvt.IndexOf(s);
If n=-1 Then pvt.AddObject(s,TObject(1)) Else pvt.Objects[n]:=pvt.Objects[n]+1;
End;
...
For i:=0 to pvt.Count-1 Do Memo1.Lines.Add(pvt[i]+#9+IntToStr(Integer(pvt.Objects[i])));
работать будет еще быстее если сделатьpvt.Sorted:=True;
← →
Palladin © (2007-12-06 15:27) [3]блин... не правильно условие задачи прочитал...
← →
Palladin © (2007-12-06 15:28) [4]хотя суть алгоритма не меняется, к ключу имени добавляется ключ машины...
← →
Anatoly Podgoretsky © (2007-12-06 15:29) [5]Чего думать обычный Count+Group by
← →
Palladin © (2007-12-06 15:31) [6]
select Computer_,Applicaton_ from log
Var
pvt:TStringList;
s:String;
n:Integer;
...
While Not q.Eof Do
Begin
s:=q.Fields[0].AsString+#9+q.Fields[1].AsString;
n:=pvt.IndexOf(s);
If n=-1 Then pvt.AddObject(s,TObject(0)) Else pvt.Objects[n]:=pvt.Objects[n]+1;
q.Next;
End;
...
For i:=0 to pvt.Count-1 Do Memo1.Lines.Add(pvt[i]+#9+IntToStr(Integer(pvt.Objects[i])));
← →
Palladin © (2007-12-06 15:32) [7]или так
select Application_,Count(*)-1 From log Group by Application_
← →
Johnmen © (2007-12-06 15:33) [8]
> DelphiN! © (06.12.07 15:13)
Кстати вообще лог неправильный, т.к. нет окончания.
← →
ЮЮ © (2007-12-07 03:50) [9]> [8] Johnmen © (06.12.07 15:33)
>
> > DelphiN! © (06.12.07 15:13)
>
> Кстати вообще лог неправильный, т.к. нет окончания.
Очевидно, по завершении приложения соответствующая запись из таблицы удаляется. Очень эффективно при зависании винды и выдергивании вилки из розетки :)
← →
DelphiN! (2007-12-07 07:18) [10]
> Johnmen © (06
Время окончания работы приложения - это время запуска следующего приложения на том же компьютере
> Palladin © (06.12.07 15:32) [7]
>
> или так
Нужно вывести количество копий приложения(каждого приложения) запущенного одновременно на разных компьютерах в определённый промежуток времени.
Вообще, конечная задача - вывести максимальное количество одновременно запущенных копий программы на разных компьютерах за определённый период, для последующей закупки определённого числа лицензий на каждую из программ.
Лицензий необходимо купить столько, сколько максимально много программ может быть запущенно одновременно, так как программы сетевые то ни у одной копии программы запущенной в данный момент не может быть повторяющегося ключа.
Ключи будет распределять программа по распределению лицензий перед запуском приложения
← →
ЮЮ © (2007-12-07 07:53) [11]> Время окончания работы приложения - это время запуска следующего
> приложения на том же компьютере
Т.е. на каждом компьютере может быть одновременно загружено только одно приложение?
И приложение будет числиться за компьютером всю ночь, пока назавтра не запустят другое приложение? А если не запустят, то ключик так и "помрёт"?
> Нужно вывести из этой таблицы количество одновременно запущенных
> на разных компьютерах копий приложений
Это, похоже, задача не для SQL, а для тупого перевора на клиенте всех записей за период нв клиента с инкриментом/декриментом значений испольхуемых приложений и анализа этих изменяющихся во времени функций.
← →
DelphiN! (2007-12-07 08:09) [12]
>
> Т.е. на каждом компьютере может быть одновременно загружено
> только одно приложение?
> И приложение будет числиться за компьютером всю ночь, пока
> назавтра не запустят другое приложение? А если не запустят,
> то ключик так и "помрёт"?
Да, одновременно на компьютере может быть запущено только одно из приложений. Если приложение будет запущено всю ночь то и ключик оно будет держать всю ночь и до тех пор, пока его не закроют.
← →
DelphiN! (2007-12-07 08:13) [13]
> пока его не закроют.
А когда его закроют в лог добавится событие о запуске другого приложения, так как в логе информация с активного заголовка приложения на клиенте и если его закроют то активный заголовок поменяется на какой либо другой
← →
ЮЮ © (2007-12-07 08:16) [14]> Если приложение будет запущено всю ночь то и ключик оно
> будет держать всю ночь и до тех пор, пока его не закроют.
Нет. Приложение аккуратно закрыли в 17.00, комп выключили и ушли. Но в лог ничего не поступит.
Назавтра в 10.00 запустят его (или другое) и только тогда появится запись в логе.
← →
DelphiN! (2007-12-07 08:20) [15]
> ЮЮ © (07.12.07 08:16) [14]
DelphiN! (07.12.07 08:13) [13]
← →
ЮЮ © (2007-12-07 08:21) [16]> А когда его закроют в лог добавится событие о запуске другого
> приложения, так как в логе информация с активного заголовка
> приложения на клиенте и если его закроют то активный заголовок
> поменяется на какой либо другой
Активный заголовок поменяется, наверное, и когда я просто переключусь в другое приложение, а не закрою текущее, но ключик-то повторно использовать ещё нельзя.
← →
Думкин © (2007-12-07 08:36) [17]
> ЮЮ © (07.12.07 08:21) [16]
У них бизнес правило: Включил приложение работай. Отвлекся на другое - дубиной по башке.
← →
DelphiN! (2007-12-07 08:59) [18]
> ЮЮ © (07.12.07 08:21) [16]
Сейчас мне нужна всего лишь статистика максимального количества одновременно запущенных программ.
У программы занимающейся распределения кличей проблем нет. Так как при запуске нового приложения она освобождает все занятые данным компьютером ключи(если комп. до этого перезагрузили и ключ не освободился) и запускает новое приложение через себя выдавая перед запуском ему ключ, дожидается его завершения и освобождает ключ
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c