Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

LogFile problem-pokretanje vise instanci jednog programa istovremeno

[es] :: Pascal / Delphi / Kylix :: LogFile problem-pokretanje vise instanci jednog programa istovremeno

[ Pregleda: 2403 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mr.zhile
Ivan ZHILE
C# developer

Član broj: 185721
Poruke: 249
93.86.51.*



+2 Profil

icon LogFile problem-pokretanje vise instanci jednog programa istovremeno22.09.2008. u 10:21 - pre 188 meseci
Opet ja sa mojim temama:Imam programcic koji je prosta verzija bibklioteke,i sad trabalo bi da se omoguci pokretanje vise instanci jednog programa istovremeno.Program u sebi sadrzi i logFile koji to malo-vise koci...
Kada se pokrene program ucita bazu za pristup i pita korisnika za ime,sifru..
Pokrenute 2 instance programa prave gresku jer nemogu istovremeno da vrse upis u logFile...
kod kojim se pravi logfile je
Code:

unit ULogIn;

interface

procedure UpisULog (LogText: string);

implementation

uses Forms, SysUtils, Classes, Global;

var LogFile : TextFile;

function IseciVrati(InStr: string): string;
var
  i : integer;
begin
   Result := '';
   i := 1;
   While i <= Length(InStr) do
      begin
         if InStr[i] >= ' ' then
            Result := Result + InStr[i];
         Inc(i)
      end
end;

function PronadjiLogFile: string;
var
  FName : string;
begin
   FName := ExtractFilePath(Application.ExeName) + '..\log\' +
            FormatDateTime ('yyyymmdd', Now) + '.log';
   Result := FName;
end;


procedure UpisULog (LogText: string);
var
  FName : string;
begin
   if PLogOn then
      begin
         FName := PronadjiLogFile;
         if FileExists(FName) then
            Append (LogFile)
         else
            begin
               try
                 CloseFile (LogFile);
               except;
               end;
               FName := PronadjiLogFile;
               AssignFile(LogFile, FName);
               Rewrite(LogFile);
            end;
         WriteLn (LogFile, DateTimeToStr(Now) + ':' + PUsername + ':' + Isecivrati (LogText));
         Flush (LogFile);
      end;
end;

initialization
   AssignFile(LogFile,PronadjiLogFile);

finalization
   try
      CloseFile(LogFile);
   except
   end;

end.


Gde gresim?Kako mogu gresku da ispravim?

unapred HVALA na pomoci i odvojenom dragocenom vremenu!!
Don't worry be happy
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno22.09.2008. u 13:36 - pre 188 meseci
Nemoj držati otvoren log fajl tokom rada programa, otvoriš ga, dodaš poruku i zatvoriš.
 
Odgovor na temu

mr.zhile
Ivan ZHILE
C# developer

Član broj: 185721
Poruke: 249
93.86.51.*



+2 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno22.09.2008. u 13:59 - pre 188 meseci
Jeste to ok,ail u logfile se upisuju aktivnosti korisnika!!
Npr.otvoranje tabelu,unes u tabelu...razumes vec!
Sto mi pravi problem,koji ne znam kako da resim?
Don't worry be happy
 
Odgovor na temu

mr.zhile
Ivan ZHILE
C# developer

Član broj: 185721
Poruke: 249
93.86.51.*



+2 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno22.09.2008. u 14:13 - pre 188 meseci
Razmisljajuci o svom problemu..dosao sam do ideje da se prilikom svakog startovanja programa,izmeni ime logfile..ali ne znam kako bi to mogao da izvedem?
Don't worry be happy
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno22.09.2008. u 14:24 - pre 188 meseci
> Jeste to ok,ail u logfile se upisuju aktivnosti korisnika!!
> Npr.otvoranje tabelu,unes u tabelu...razumes vec!
> Sto mi pravi problem,koji ne znam kako da resim?

Što je to problem, otvaranje, zatvaranje fajla je prilično brza operacija. Osim toga log fajl možeš otvoriti u shared write režimu (to sam zaboravio prošli put) tako da više programa može imati write pravo, jedino ne znam Assign, Append, Rewrite nude izbor režima otvaranja, ako ne onda možeš raditi direktno sa Windows handlovima, preko CreateFile ili TFileStream.
 
Odgovor na temu

mr.zhile
Ivan ZHILE
C# developer

Član broj: 185721
Poruke: 249
79.101.175.*



+2 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno22.09.2008. u 21:31 - pre 188 meseci
@savkic
misliim sta reci coverkl mi ladno pomoze sa jednom;porukom...HVALA TI DRUZE PUNOOO!!!
Evo koda koji moze da radi sa vise otvaaranja
Code:

unit ULogIn;

interface

procedure UpisULog (LogText: string);

implementation

uses Forms, SysUtils, Classes, Global;

var LogFile : TextFile;

function IseciVrati(InStr: string): string;
var
  i : integer;
begin
   Result := '';
   i := 1;
   While i <= Length(InStr) do
      begin
         if InStr[i] >= ' ' then
            Result := Result + InStr[i];
         Inc(i)
      end
end;

function PronadjiLogFile: string;
var
  FName : string;
begin
   FName := ExtractFilePath(Application.ExeName) + '..\log\' +
            FormatDateTime ('yyyymmdd', Now)+ '.log';
   Result := FName;
end;


procedure UpisULog (LogText: string);
var
  FName : string;
begin
   if PLogOn then
      begin
         FName := PronadjiLogFile;
         if FileExists(FName) then
            Append (LogFile)
         else
            begin
               try
                 CloseFile (LogFile);
               except;
               end;
               FName := PronadjiLogFile;
               AssignFile(LogFile, FName);
               Rewrite(LogFile);
            end;
         WriteLn (LogFile, DateTimeToStr(Now) + ':' + PUsername + ':' + Isecivrati (LogText));
         Flush (LogFile);
     [b]CloseFile(LogFile);[/b]//ovo je razlika od izvornog koji sam postavio u 1.poruci
      end;
end;

initialization
   AssignFile(LogFile,PronadjiLogFile);

finalization
   try
      CloseFile(LogFile);
   except
   end;

end.


HVALA PUNOOOOOOOOO!!!
ipak ko zna zna,al savkic bas zna
Don't worry be happy
 
Odgovor na temu

mr.zhile
Ivan ZHILE
C# developer

Član broj: 185721
Poruke: 249
79.101.164.*



+2 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno23.09.2008. u 13:37 - pre 188 meseci
Kod koji sam u prethodnoj poruci posla je korektan..haval @igore!!
ALli sada mi se drugii problem javlja..zeleo bi posto bazu koristi vise korisnika da za svakog postoji po jedan dnevni logfile u kom bi bile upisane njegove aktivnosti...?
Npr sledeci kod ne obavlja svoj posao,u stvari obavlja prilikom 1. pokretanja,a ne znam kako bi mogao resiti problem da se uvek upis vrsi u logfile korisnik,a ne u opsti logfile koji postoji?
Code:

function PronadjiLogFile: string;
var
  FName: string;
begin
   if PUsername <> '' then
         FName := ExtractFilePath(Application.ExeName) + '..\log\' +
                   FormatDateTime ('yyyymmdd', Now) + PUsername + '.log'
   else
         FName := ExtractFilePath(Application.ExeName) + '..\log\' +
                  FormatDateTime ('yyyymmdd', Now) + '.log';

   Result := FName;
end;

Da napomenem PUsername je promenljiva tipa String i po difoltu joj je zadata vrednost '',
Hvala unapred na pomoci,svaki savet i konkretna pomoc su mi dobro dosli!!!
Don't worry be happy
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno23.09.2008. u 15:14 - pre 188 meseci
> Npr sledeci kod ne obavlja svoj posao,u stvari obavlja prilikom 1. pokretanja,a ne znam kako bi mogao resiti problem da se uvek upis
> vrsi u logfile korisnik,a ne u opsti logfile koji postoji?

Želiš dva log fajla (opšti i za korisnika) ili samo jedan?


> function PronadjiLogFile: string;
> var
> FName: string;

Po konvenciji prefiks F se daje za privatna polja (promenljive) klase, običnim promenljivama ne.

> if PUsername <> '' then
> FName := ExtractFilePath(Application.ExeName) + '..\log\' +
> FormatDateTime ('yyyymmdd', Now) + PUsername + '.log'

> Result := FName;

Ne treba ti pomoćna promenljiva, možeš direktno koristiti Result.

Ovako je čitljivije:

Result := Format('%slog\%s%s.log', [ExtractFilePath(Application.ExeName), FormatDateTime ('yyyymmdd', Now), FUserName]);

Ako ti često treba dir gde je exe onda je dobro da u jednom sharedunitu deklarišeš npr:
AppExeDir: string; // Dir u kome se nalazi .exe

initialization
AppExeDir := ExtractFilePath(ParamStr(0));

I da onda dalje koristiš tu promenljivu svuda.

> Da napomenem PUsername je promenljiva tipa String i po difoltu joj je zadata vrednost '',

Prefiksom P se uglavnom označava pointer na neki tip, ako ti je ovo običan string onda je P višak, a ako je deklarisan u private delu klase onda treba da bude FUserName. Ako je vrednost te promenljiva '' onda će naziv log fajla biti onaj generički, ako želiš poseban za korisnika onda moraš navesti ime tog korisnika i dalje koristiti taj naziv fajla.

 
Odgovor na temu

mr.zhile
Ivan ZHILE
C# developer

Član broj: 185721
Poruke: 249
79.101.164.*



+2 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno23.09.2008. u 16:36 - pre 188 meseci
Hvala na savetima,korisni su..
Pomocnu promenljivu koristim da bi lakse mogao da pratim tok programa.
Zelim jedan fajl,koji ce se razlikovati po korisnicima?
Don't worry be happy
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.adsl-1.sezampro.yu.



Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno23.09.2008. u 19:54 - pre 188 meseci
Citat:
mr.zhile:
Ali sada mi se drugi problem javlja..zeleo bi posto bazu koristi vise korisnika da za svakog postoji po jedan dnevni logfile u kom bi bile upisane njegove aktivnosti...?

Preleto sam preko diskusije, samo komentar odokativno, ne znam zbog čega pratiš korisnike, ali možda bi upis aktivnosti korisnika u bazu bio adekvatniji. Naravno, implementirati taj modul u program je malo složenije od upisa u txt fajl, ali izveštaji na osnovu njega mogu biti raznoliki za svakog korisnika ponaosob, ili po nekom drugom kriterijumu.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Deep|Blue
Srce Srbije

Član broj: 631
Poruke: 1431
195.178.63.*

ICQ: 101830817


+314 Profil

icon Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno24.09.2008. u 13:04 - pre 188 meseci
Mnogo komplikujes sa tim log fajlovima, uostalom sasvim ovim dodacima ostaje ti problem, ako slucajno 2 i vise mashina krenu da upisuju log.

Kao sto rece @milos, mnogo bolje resenje jeste baza, gde mozes da upisujes sirok dijapazon akcija, a istovremeno imas centralizovan log sa akcijama.
"Hmmm", rekao je, "...suprostavlja se nadrealizmu prikrivene metafore..." Razmišljao je tome na trenutak, a onda je zatvorio beležnicu s mrkim osmehom.
"I smrt je za njih suviše dobra"
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: LogFile problem-pokretanje vise instanci jednog programa istovremeno

[ Pregleda: 2403 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.