Bosna i Hercegovina



#1 25.08.2016-16:31
Gjoreski Offline
Super Moderator
Registrovan/a od: 02.02.2009-22:24
Komentari: 1,319


Subject: Ado command i progrsbar
Mi treba da stavam nekoj progres bar dodeka se izvrsuva naredba od adodb.command.
Odnosno imam stored proceduri koi mozat da traat podolgo a se povikuvaat so adodb.command pa mi treba za periodot dodeka se izvrsuva procedurata da imam vizuelna predstava na progres bar.
↑  ↓

#2 25.08.2016-23:01
zxz Online
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,451


Subject: Re: Ado command i progrsbar
Imas ovdje jedan.
http://www.icentar.ba/...&id=19249
Ako ne pase naci cemo neki drugi.
Ima toga more a moze se i napraviti dll po zelji.
Pozdrav
↑  ↓

#3 26.08.2016-10:38
Gjoreski Offline
Super Moderator
Registrovan/a od: 02.02.2009-22:24
Komentari: 1,319


Subject: Re: Ado command i progrsbar
ne e problem ocx ot problem mi e procesot
DownloadIzvorni kod (Visual Basic):
  1. Private Sub cmdRoba_Vozilo_Click()
  2.       gridPrometi.Visible = False
  3.       gridLager.Visible = True
  4.       TStart = GetTickCount
  5.   If (txtDataOD) = "__.__.____" Then Me.txtDataOD.Text = "01.01." & Format(Now(), "yyyy")
  6.   If (txtDataDO) = "__.__.____" Then Me.txtDataDO.Text = "31.12." & Format(Now(), "yyyy")
  7.   ' ovde bi trebalo da zapocniva progresbarot  
  8.  
  9.     Set rsLager = New ADODB.Recordset
  10.     Dim cmd As ADODB.Command
  11.     Set cmd = New ADODB.Command
  12.         cmd.ActiveConnection = cn
  13.         cmd.CommandType = adCmdStoredProc
  14.         cmd.CommandText = "spLagerVoziloKorisnik"
  15.         cmd.Parameters.Refresh
  16.         cmd.Parameters("@Korisnik") = rsKorisnici.Fields("ID_Korisnik")
  17.         cmd.Parameters("@OdData") = txtDataOD
  18.         cmd.Parameters("@DoData") = txtDataDO
  19.     Set rsLager = cmd.Execute()
  20.     Set cmd = Nothing
  21.    ' ovde treba da zavrsuva progresbarot
  22.  
  23.    Set gridLager.DataSource = rsLager
  24.           gridLager.ReBind
  25.           gridLager.Refresh
  26.           gridLager.Caption = " : " & rsKorisnici.Fields("Ime")
  27.           gridLager.Columns(4).Caption = " "
  28.           gridLager.Columns(5).Caption = " "
  29.          Call SumiGridLager(rsLager)
  30.  
  31. End Sub
↑  ↓

#4 26.08.2016-13:52
zxz Online
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,451


Subject: Re: Ado command i progrsbar
Tesko ce ti ovdje pomoci progres bar jer nemas napr. ucitavanje recordsetova ili nesto slicno gdje bi stavio progresiju odnosno napredovanje.

Tvoje svo vrijeme cekanja odnosno vrijeme izvrsenja je ovdje vjerovatno.
Set rsLager = cmd.Execute()
Sto znaci da ti cekas da se jedna cjelina posla izvrsi u bazi van vb coda.

Pozes to provjeriti gdje dolazi do zastoja ako pokrenes kod sa F8 pa ces vidjeti na kojim redovima vise ceka.
Ja mislim da ceka samo
cmd.ActiveConnection = cn-----> mozda ovdje malo i
Set rsLager = cmd.Execute()-----> ovdje

Ukoliko staje na vis redova onda nesto bi i mogao napraviti.
Svaki progres bar radi na principu:
Vrijednost pri po cetku (obicno 0)
Vrijednost Pri zavrsetku (napr. 100) i progresija.
Progresija je napr. 1.
E sad ako imas petlju onda u petlji negdje stavis da ti se povecava progresija za 1.

Posto ti nemas onda bi mogao staviti na pocetak te negdje u sredini koda i na kraju gdje si rekao da se zavrsava.

Progres+1
Set rsLager = New ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
Progres+50
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "spLagerVoziloKorisnik"
cmd.Parameters.Refresh
cmd.Parameters("@Korisnik") = rsKorisnici.Fields("ID_Korisnik")
cmd.Parameters("@OdData") = txtDataOD
cmd.Parameters("@DoData") = txtDataDO
Progres+29
Set rsLager = cmd.Execute()
Progres+30
Set cmd = Nothing

Znaci rasporedis do 100
Samo sto time neces bas bog zna sta dobiti.
Kako vidis tvoja progresija bi isla 1% pa odma
51%
pa onda malo stojalo na 80% i zavrsilo.

Bila mi je namjera da objasnim kako radi mada nisam gledao direktno ovaj progres na koji sam dao link.
Pozdrav
↑  ↓

#5 26.08.2016-14:40
Gjoreski Offline
Super Moderator
Registrovan/a od: 02.02.2009-22:24
Komentari: 1,319


Subject: Re: Ado command i progrsbar
Imam neki jako velike procedure koi se izvrsavaju na serveru mozda prakticnije bi bilo meriti vremena izvrsavajne procedura odosto prikazivajne na progresbaru.
mozda imas neka druga ideja .
e sad nesao sam neki kod na netu oko ova problematika ali mi nije jasan
Evo pogledaj pa mozda moglo bi se i nesto obraditi.
DownloadIzvorni kod (Visual Basic):
  1. 'Sometimes you have stored proc that takes 2,3 or 5 min to execute.
  2. 'Application that lock up frequently frustrates users and waste their time and resources.
  3. 'Solution use ADO ASYNCHROUS OPTION to get back CPU resorces.
  4.  
  5. Public Sub ExecuteAsync()
  6.     Dim cmd As ADODB.Command
  7.    
  8.     Set cmd = New ADODB.Command
  9.     cmd.ActiveConnection = "DSN=test"
  10.     cmd.CommandTimeout = 180
  11.     cmd.CommandText = "sp_name"
  12.     cmd.CommandType = adCmdStoredProc
  13.     cmd.EXECUTE , , adAsyncExecute '<--- start ASYNCHROUS
  14.    'You can also make a dumy progress bar  to show proggres
  15.    
  16.     Do While (cmd.State And adStateExecuting) = adStateExecuting
  17.        DoEvents
  18.     Loop
  19.    
  20.     'Methods Options
  21.    'EXECUTE adAsyncExecute, adAsyncFetch
  22.    'OPEN adAsyncConnect
  23.    
  24.     'You can do same this with RDO
  25.    
  26.     'Do While rs.StillExecuting
  27.    '    DoEvents
  28.    'Loop
  29. End Sub
↑  ↓

#6 27.08.2016-10:28
zxz Online
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,451


Subject: Re: Ado command i progrsbar
Da bi napravio progres potrebno ti je da znas trajanje neke radnje. Sam korak nije problem rast.
To se moze rijesiti i tajmerom.
Sa ovim gore nemas vrijeme zavrsetka i ti mozes staviti progres da radi ali se nikada nece uskladiti sa vremenom izvrsenja.
Znaci moze se desiti da progres zavrsi prije ili pak da dodje do pola a radnja se izvrsila.
Imas dva nacina.
Jedan je da ti predvidis vrijeme izvrsenja i da ono bude vece no samo izvrsenje i sada pokrenes progres i da se sama procedura zavrsi tek kada progres dodje do kraja.
Naravno tu ti treba i ovaj doevents.
Bez njega to nemozes napraviti.

Drugi nacin bi bio da na Mysql napravis neku proceduru koja bi te obavjestavala o izvrsenu ova tvoje stored procesure.
Znaci ova druga bi vracala neki rezultata.
Znaci ovu drugu proceduru bi stavio u neku petlju gdje bi je pozvao vise puta a vracala bi rezultat kolicine podataka koje odradjuje tvoja stored procedura i kolicinu koja je odradjena naravno u datom vremenskom intervalu.
Od prilike tako radi progres bar kopiranja pod windowsma.

Eto to je moja neka ideja.
Pozdrav
↑  ↓

Stranice (1): 1


All times are GMT +01:00. Current time: 22.10.2017-11:04.