Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.016 c
1-1191819732
den303_work
2007-10-08 09:02
2007.12.30
Копирование форм


15-1196462270
Petr V. Abramov
2007-12-01 01:37
2007.12.30
.Net 2-й fw


15-1196024180
FearG0
2007-11-25 23:56
2007.12.30
Portable Delphi


15-1195868497
Duo
2007-11-24 04:41
2007.12.30
Как определить, что мышь над TToolButton.


2-1196836065
alshtam
2007-12-05 09:27
2007.12.30
res файл