Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1196976105
Свой
2007-12-07 00:21
2007.12.30
TQuery ответ и регистр букв


15-1196291049
Германн
2007-11-29 02:04
2007.12.30
Локальный логический диск vs сетевой диск


2-1196881444
Koss
2007-12-05 22:04
2007.12.30
авто создания компонентов


6-1176750778
dRake
2007-04-16 23:12
2007.12.30
Нужна документация по сокетам (+)


15-1196198873
Сусл
2007-11-28 00:27
2007.12.30
Судьба CodeGear





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский