Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Progressbar el liknande

Postades av 2006-12-22 08:54:20 - Alf Zell, i forum visual basic - allmänt, Tråden har 25 Kommentarer och lästs av 1111 personer

Hej
Vill ha någon typ av aktivitetsvisare mer än timglaset när jag t.ex hämtar data från en databas
och inte vet vilka värden jag skall sätta på t.ex en progressbar. Har provat med timerkontrollen
men den aktiveras inte under själva datahämtningen utan förblir orörd.
Finns det någon lösning på detta ?


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 12:05:48 - Martin Rex

Private Sub Command1_Click()
ProgressBar1.Min = 1
ProgressBar1.Max = 100000
For a = 1 To 100000
ProgressBar1.Value = a
Next
End Sub


/Martin


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 13:43:12 - Johan Djupmarker

Lätt svar:
Det går inte.

För att få något att hända under tiden du hämtar data måste du hämta data i en separat tråd. Tyvärr finns inget inbyggt stöd i VB6 för att skapa trådade applikationer. Om du googlar lite på "VB6 Threading" får du lite förslag på hur du ska göra, men det är inget enkelt. Jag har inte testat själv så jag vet inte hur väl det fungerar.

/Johan


Svara

Sv:Progressbar el liknande

Postades av 2006-12-22 15:15:10 - Oskar Johansson

Trådar i vb 6 är livsfarligt. Går inte att köra i debuggern utan risk för att vb kraschar om någon ovänntat händer


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 15:27:49 - Martin Rex

Vad är det du vill göra ?

Det går ju inte att hämta så mycket data att man måste ha en progressbar under tiden.
Vill du däremot visa progress under tiden du itererar över recordset går det utmärkt.

ex. (ur huvudet)

Select count * as NumberOfRecords from tabell
Progressbar1.min=1
Progressbar1.max=NumberOfRecords
Select * from Tabell
While not RecordSet.EOF
a=a+1
ProgressBar1.Value=a
Do_SomeThing
RecordSet.Next
Wend



Svara

Sv:Progressbar el liknande

Postades av 2006-12-22 15:45:03 - Alf Zell

Hej
Använder codebase databas
Sätter ett Query anrop för att hämta ut viss data från databasen enligt urvalet
Detta kan ta lite lång tid för den som sitter och väntar och därmed börjas det
med att trycka på dom flesta tangenter för användaren tror att programmet hängt sig.
Anropet kan ibland ta 2 -3 minuter
Vill på något sätt upplysa användaren om att programmet inte har hängt sig utan det
är bara att vänta tills processen är klar.
Därfter vet jag hur många records som anropet gav och kan kan då sätta värden på progressbaren


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 15:52:36 - Martin Rex

Varför gör du inte en ny Form, med text som talar om att systemet är upptaget ?

Innan din Query : BusyForm.Load.
efter : Unload BusyForm.


Svara

Sv:Progressbar el liknande

Postades av 2006-12-22 15:55:00 - Alf Zell

Kanske en ide. På den kanske jag kan ha en progressbar som tickar under tiden.
Går det ??
I så fall hur anropa den när query är klar ?


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 16:07:27 - Martin Rex

Tja...
Att uppdatera en progressbar i en loop eller liknande gör ju bara att processen tar ännu längre tid.
Kanske man kan hitta en animerad progressbar någonstans...typ Gif-bild ?
Jag förstår att du vill att det ska se ut som om det händer något i ditt gränssnitt och det gör det ju då.


Svara

Sv:Progressbar el liknande

Postades av 2006-12-22 16:29:50 - Alf Zell

Ja, du har uppfattat mitt problem rätt, men det finns väl ingen lösning på detta i VB6


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 16:36:26 - Martin Rex

Hittade en på : http://www.gimptalk.com/forum/topic.php?t=5086&start=1&tutorial-Animated-Progress-Bar.html#32922

Bara lägg en PictureBox på din form och referera till den bilden. Jag antar att det är OK att använda den, eftersom den tillkommit på allmän begäran.


Svara

Sv:Progressbar el liknande

Postades av 2006-12-22 17:02:36 - Sven Åke Persson

Oskar skrev :
<b>Trådar i vb 6 är livsfarligt.</b>
Nu tar du väl i. :-)

Jag gör en egen lösning där jag låter en Label växa med DoEvents imellan.


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 17:35:02 - Martin Rex

Hmm...försökte just lägga ut den animerade progressbaren på en form.
Funkar inte.
Kan man inte lägga en Gif-bild i en picturebox i VB 6 ?


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 17:42:01 - Oskar Johansson

> Jag gör en egen lösning där jag låter en Label växa med DoEvents imellan.

Det är iofs. inte multitrådat..


Svara

Sv:Progressbar el liknande

Postades av 2006-12-22 18:55:26 - Alf Zell

Kan inget om trådar och har nog inte någon anledning att läsa in det för detta projektet.
Kanske är det lättare att skriva om programmet i .NET ??

Här är i vilket fall min rad som tar c:a 4 minuter för att exekvera.

rc = relate4querySet(rel, "DAT>=STOD('" & FromDatum & "').AND.DAT<=STOD('" & TomDatum & "').AND.ARTNR<>' '")

Under tiden har jag idag ett timglas och en label som säger att programmet
hämtar data från databasen. Ville ha något som samtidigt visade att något händer.
Har sett en del program som har någonting som roterar men kan inte hitta vad det är


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 21:42:50 - Niklas Jansson

Du måste ju förstå problematiken först.

Du skickar en atomär begäran till en extern grej, "Gör X". Databasen kommer göra "X" och hålla på med det tills den är klar. Om du skulle få tillbaka kontrollen under tiden så skulle inte resultatet finnas tillgängligt senare i samma sub/funktion.

Det enda sättet du kan göra är att ha två olika trådar, den ena arbetar med en databas, den andra med en animation. Antingen gör du detta manuellt, vilket kräver "äkta" trådning i VB, vilket (enligt ovan) är totalt livsfarligt, eller så måste du hitta någon sorts kontroll som själv startar en tråd som sköter sin animering. Det är inte omöjligt att det finns.

Att göra i .NET eller något annat språk ger ingen som helst skillnad, det är exakt samma problematik (förutom att det oftast är betydligt lättare att arbeta med trådar i andra språk).

Det finns ytterligare en variant som kan funka:
Jag förstår mig inte riktigt på din query, men om du kan göra den för en viss del av databasen först, och sen för lite mer, osv., så kan du göra en uppdatering mellan varje sådan delquery. Typ

<code>
i=0
step = 1000
do while more rows
i=i+step
sql("... WHERE ID <" & (i+step) & " AND ID > " & (i))
update graphics
loop
</code>


Svara

Sv: Progressbar el liknande

Postades av 2006-12-22 22:43:20 - Johan Djupmarker

<b>Har sett en del program som har någonting som roterar men kan inte hitta vad det är</b>

Det är säkert program som jobbar med flera trådar. Eftersom programmet är upptaget med anropet till databasen kan den inte uppdatera grafiken under tiden i samma tråd.

<b>Kanske är det lättare att skriva om programmet i .NET ??</b>

Har du möjlighet att göra om programmet i .NET är det mycket enklare att göra databasanropet i en separat tråd. I 2.0 tror jag tom att det finns en kontroll som hjälper till med att uppdatera gränssnittet från rätt tråd.

/Johan


Svara

Sv:Progressbar el liknande

Postades av 2006-12-23 00:25:53 - Martin Rex

Alf,

Bara en fundering...
En Query som tar flera minuter ?
Har du något index ?

På 4 minuter hinner man läsa 1000.000 -tals poster i en oindexerad textfil, försiktigt räknat.
Jag har en känsla av att det är lite "overkill" att snacka avancerade tråd-lösningar här. Jag tror att problemet finns på en mer grundläggande nivå .

Har du själv kontroll över den databas du vill läsa från ?


Svara

Sv: Progressbar el liknande

Postades av 2006-12-23 00:48:04 - Alf Zell

Hej igen
Som jag nämnde ovan så är det alldeles för avancerat med trådar för detta projekt och varför frågan kom upp var för att jag har själv ibland upplevt att datorn har hängt sig när den i verkligheten fortfarande jobbar mot databasen. Efter alla inlägg i denna fråga så förstår jag att det är avancerat
Får nöja mig med att användaren inte börjar trycka esc eller avslut då datorn jobbar. Har ju timglas och
meddelande på skärmen om att data hämtas mm. Vad jag ev kan göra är att söka efger en animering som du nämner.
Det finns givetvis index i databasen men inget som plockar ut viss data enl mitt önskemål med alla ingående artiklar från fakturor mellan två olika datum.
Kanske snabbare att hämta alla artiklar i hela databasen och sedan loopa igenom dessa och bearbeta
de som uppfyller datumurvalet. Då vet jag ju hur många poster som finns och kan därmed sätta värden till progressbaren
Tack för alla olika svar på denna fråga


Svara

Sv:Progressbar el liknande

Postades av 2006-12-23 01:29:23 - Martin Rex

Troligen är det snabbare att hämta "allt" och iterera över resultatet.
Jag testade just att läsa in 1,2 miljoner textrader, det tog c:a 3 sekunder...
Gör du väldigt mycket datamanupilationer i din query ?
Om det är så, kanske man kan tänka sig att göra detta i en separat periodisk körning ?


Svara

Sv: Progressbar el liknande

Postades av 2006-12-23 10:49:19 - Alf Zell

Nej det gör jag troligtvis inte
Jag gör vad som krävs av CodeBase för att hämta data mellan ett datumintervall
Se sträng
rc = relate4querySet(rel, "DAT>=STOD('" & FromDatum & "').AND.DAT<=STOD('" & TomDatum & "').AND.ARTNR<>' '")

DAT=fältet i databasen
FromDatum och TomDatum är vanliga datumformat "CCYY-MM-DD"
STOD är en intern databasfunction som står för att konvertera ett datum till databasens format vilket är "CCYYMMDD"
.AND.ARTNR<>' ' står för att jag inte vill ha med artiklar som saknar artikelnr
Skall prova att ta att ta bort STOD functionen till följande
rc = relate4querySet(rel, "DAT>='"20061201"'.AND.DAT<='"20061230'".AND.ARTNR<>' '")


Svara

Sv:Progressbar el liknande

Postades av 2006-12-23 16:26:05 - Andreas Hillqvist

Använder du ADO? ADO stödje asynkrona fråge anrop. På så sät skulle du kunna animera istället för att den blockerar tråden.

Kan du visa ditt anrop?


Svara

Sv: Progressbar el liknande

Postades av 2006-12-23 16:53:46 - Alf Zell

Nej, använder codebase egen databasmotor.
Här är Queryn till databasen
rc = relate4querySet(rel, "DAT>=STOD('" & FromDatum & "').AND.DAT<=STOD('" & TomDatum & "').AND.ARTNR<>' '")

Jag löser det genom att inte använda detta anrop utan istället öppna hela tabellen med ett index och sedan loopa igenom hela tabellen och bearbeta records som uppfyller mitt villkor så här:


rc=d4top(db)
While rc = r4success
Datum = f4str(d4field(db, "DAT"))
ArtNr = f4str(d4field(db, "ARTNR"))
If Datum >= FromDatum And Datum <= TomDatum And Trim(ArtNr) <> "" Then
Bearbetar recordet .......
End if
rc=d4skip(db,1)
Loop


Svara

Sv:Progressbar el liknande

Postades av 2006-12-23 18:14:28 - Martin Rex

Hur lång tid tar det då ? (Nyfiken)


Svara

Sv: Progressbar el liknande

Postades av 2006-12-24 16:41:00 - Alf Zell

c:a 1 minut för 1 000 000 records


Svara

Sv:Progressbar el liknande

Postades av 2006-12-24 21:50:35 - Niklas Jansson

Då är det något fel med din ursprungliga query. Det ska inte gå fyra gånger fortare att göra via kod, snarare tvärtom.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
887
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies