[ XGhost @ 14.01.2015. 14:03 ] @
Koristim komponente UniDAC i u poslenje vrijeme imam problem sa podacima koje se nalaze na serveru
jer mi se cesto javi greska da je server nedostupan, odnosno da program obradjuje podatke brze nego sto ih
moze dobiti sa servera.
Kako da ubacim izuzetke da prilikom konekcije program saceka odziv sa servera.
To me zanima za 2 komponente na UniConnection i UniQuery za jednu prije same konekcije
na bazu kad se pokrece program i za ovu drugu kad postavim neki upit da saceka sa realizacijom dok
se ne uspostavi veza sa bazom
[ savkic @ 14.01.2015. 15:44 ] @
Jedino da se vrtiš u petlji i ponavljaš zahtev dok ti ne dođu ti željeni podaci.
[ XGhost @ 14.01.2015. 23:58 ] @
Jel imas primjer kako to da uradim sa UniQuery componentom
konekciju bi nekako rjesio ali kad saljem kompleksan upit
nemam ideju.
Evo najprostiji primjer koda
--------------------------------------
UniQuery .Close;
UniQuery .Active:=true;
UniQuery .sql.Clear;
UniQuery .SQL.Add ('select * from partneri');
try
UniQuery .Open;
except
on EDatabaseError do
ShowMessage ('Greska u proceduri');
end;

----------------------
[ Predrag Supurovic @ 15.01.2015. 00:25 ] @
Pogledaj na toj komponenti dali mozes da podesis tajmaut ili tako nesto.
[ savkic @ 15.01.2015. 00:54 ] @
Otprilike ovako:

Code:

repeat 
  try
    qry.Open;
  except
     on EDatabaseError do // Proveri koja je greska za timeout
     begin
        Sleep(100); // Sacekamo malo pa ponovimo zahtev
     end;
  end;
until qry.Active;
[ Rapaic Rajko @ 15.01.2015. 12:54 ] @
Citat:
XGhost:
UniQuery .Close;
UniQuery .Active:=true;
UniQuery .sql.Clear;
UniQuery .SQL.Add ('select * from partneri');
try
UniQuery .Open;
except
on EDatabaseError do
ShowMessage ('Greska u proceduri');
end;

----------------------


Zar 'UniQuery.Active := true;' i 'UniQuery.Open;' nije jedna te ista stvar? A setovanje Active pre upisa SQL-a: je l to nesto specijalno s tim komponentama, pa mora/moze tako?

Pozz
[ savkic @ 15.01.2015. 13:04 ] @

> Zar 'UniQuery.Active := true;' i 'UniQuery.Open;' nije jedna te ista stvar? A setovanje Active pre upisa SQL-a:
> je l to nesto specijalno s tim komponentama, pa mora/moze tako?

Promena teksta SQL kverija sigurno zatvara i oslobadja zauzete resurse, isto kao i Close. Tako da je postavljanje na Active višak.
[ XGhost @ 15.01.2015. 22:45 ] @
Znam da je komanda active visak greskom se nasla jer sam kod napisao onako napamet

imam na komponenti UniConnection opciju ConnectionTimeout i defaultno stoji 15 medjutim
promjenom vrijednosti nisam primjetio neki napredak
[ XGhost @ 15.01.2015. 23:08 ] @
Zahvaljujem SAVKICU :)

Izgleda da je proslo bar sto se konekcije tice
Stavio sam kod u on create (na datamodul)

repeat
try
DM1.UniConnection1.Connected:=true;
except
on e: EUNIError do
begin
Sleep(100);
end;
end;
until DM1.UniConnection1.Connected=true;

Valjda ce jos nekom koristiti

Kako da jos ovdje ubacim ako npr konekcije nikako nema 30 sekundi da ugasi aplikaciju i izbaci poruku da nije moguca konekcija konekcija


[ savkic @ 15.01.2015. 23:18 ] @
Treba ti dodatna promenljiva, koju setuješ pre ulaska u petlju i proveravaš u uslovu izlaska iz petlje:

Code:


var
  StartTime: TDateTime;
begin
  StartTime := Now;

  repeat
   
  until SecondsBetween(Now, StartTime) > 30
end;


[ XGhost @ 15.01.2015. 23:35 ] @
Malo sam zbunjen

Jel da sve ubacim ovako u oncreate dogadjaj
ili da ovo ispod

repeat
try
DM1.UniConnection1.Connected:=true;
except
on e: EUNIError do
begin
Sleep(100);
end;
end;
until DM1.UniConnection1.Connected=true;

napravim kao proceduru (npr procedure Konekcija) pa da ubacim u kod koji si zadnji napisao
ili kako vec
[ savkic @ 16.01.2015. 00:04 ] @
Dao sam ti primer kako mozes bilo koju petlju da vremenski ograničiš. Dakle, taj primer treba da iskombinuješ sa tvojom procedurom (petljom), otprilike kao dole.
BTW koristi code tagove za pisanje koda, olakšavaju praćenje.

Code:

  StartTime := Now;
  repeat
  try
    DM1.UniConnection1.Connected:=true;
  except
    on e: EUNIError do
     begin
       Sleep(100);
     end;
   end;
until DM1.UniConnection1.Connected or (SecondsBetween(Now, StartTime) > 30);

[ XGhost @ 16.01.2015. 12:05 ] @
Ne prihvata mi SecondsBetween
[ savkic @ 16.01.2015. 12:27 ] @
Koju grešku dobijaš? Proveri u kom je unitu definisana funkcija i da li ga imaš u uses listi.
[ XGhost @ 16.01.2015. 12:33 ] @
Undeclared identifier:'SecondsBetween'
Rijeseno treba dodati u uses DateUtils

[Ovu poruku je menjao XGhost dana 16.01.2015. u 13:48 GMT+1]