Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

LogFile problem-pokretanje vise instanci jednog programa istovremeno

  • 10 odgovora
  • 3.617 pregleda

Najnovija ↓

LogFile problem-pokretanje vise instanci jednog programa istovremeno 22.09.2008. u 11:21 · pre 220 meseci #1
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!!:)
Potpis
Don't worry be happy
Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno 22.09.2008. u 14:36 · pre 220 meseci #2
Nemoj držati otvoren log fajl tokom rada programa, otvoriš ga, dodaš poruku i zatvoriš.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno 22.09.2008. u 15:24 · pre 220 meseci #5
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno 22.09.2008. u 22:31 · pre 220 meseci #6
@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:D
Potpis
Don't worry be happy
Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno 23.09.2008. u 14:37 · pre 220 meseci #7
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!!!
Potpis
Don't worry be happy
Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno 23.09.2008. u 16:14 · pre 220 meseci #8
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno 23.09.2008. u 20:54 · pre 220 meseci #10
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.
Potpis
Someone's sitting in the shade today because someone planted a tree a long time ago.
Re: LogFile problem-pokretanje vise instanci jednog programa istovremeno 24.09.2008. u 14:04 · pre 220 meseci #11
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.
Potpis
"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"
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme