/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Spørgsmål
Fra : Michael Vilhelmsen


Dato : 05-04-05 11:28

Hej alle

Jeg har et program, som laver mange SQL statements (Disse via InterbaseExpress comp).

Langt de fleste eksekveres så hurtigt, at resultatet er tilgængeligt med det samme.

Men af og til, laver jeg en rutine, hvor tiden fra OPEN til programmet fortsætter (altså hvor databasen har udført opgaven) godt kan være adskillige minutter.
Som InterbaseExpress comp. er opbygget giver de ingen mulighed for, at give noget feedback så man kan skrive et eller andet på skærmen, som fortæller brugeren, at der faktisk sker noget.
Programmet står simpelthen bare stille (eller sådan virker det for brugeren).

Jeg kunne tænke mig, at lave en eller anden ting, som kunne poppe op, og vise et eller andet (En progressbar som stille og roligt tæller op, et "møllehjul", en prik som vokser og mindsker sig hele
tiden, el. andet).
Jeg har prøvet at lave en form, som jeg viser inden, hvor på der er en timer, som hvert 250 ms. ændrer et tegn (|/-\) så det ligner et møllehjul. Men der sker ikke en skid.....

Det er som om, at formen ingen tid får......


Gør jeg noget forkert ?
Eller er jeg bare lidt dum

Michael

Bruger D5 Ent.

--
==========
Best Regards / Venlig hilsen

Michael Vilhelmsen
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com


 
 
Uffe Kousgaard (05-04-2005)
Kommentar
Fra : Uffe Kousgaard


Dato : 05-04-05 12:31

"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> wrote in message
news:mn.2aeb7d54fd83a374.11460@Microcom.PLEASEREMOVE.Dk...
> Jeg har prøvet at lave en form, som jeg viser inden, hvor på der er en
> timer, som hvert 250 ms. ændrer et tegn (|/-\) så det ligner et møllehjul.
> Men der sker ikke en skid.....
>

Prøv at tilføje application.processmessages; efter ændring af tegnet. Det
burde virke.

> Eller er jeg bare lidt dum

Nja....

hilsen
Uffe



Michael Vilhelmsen (05-04-2005)
Kommentar
Fra : Michael Vilhelmsen


Dato : 05-04-05 12:50

Uffe Kousgaard submitted this idea :
> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> wrote in message news:mn.2aeb7d54fd83a374.11460@Microcom.PLEASEREMOVE.Dk...
>> Jeg har prøvet at lave en form, som jeg viser inden, hvor på der er en timer, som hvert 250 ms. ændrer et tegn (|/-\) så det ligner et møllehjul. Men der sker ikke en skid.....
>>
>
> Prøv at tilføje application.processmessages; efter ændring af tegnet. Det burde virke.

Det har jeg så lige gjort.
Det havde ingen indvirkning.

Selvom jeg laver et breakpoint der, stopper programmet ikke førend OPEN (på min SQL query) er færdig.
Selve appl. virker død for den almindelige bruger.
Hvis man f.eks. maksimere et andet vindue hen over, og efterfølgende minimere det igen, genskrives min appl. heller ikke.


>
>> Eller er jeg bare lidt dum
>
> Nja....


Og ja - jeg er nok ikke verdens mester i Delphi.
Men jeg elsker at arbejde med det.
Og jeg lærer jo noget nyt hele tiden.

Michael

--
==========
Best Regards / Venlig hilsen

Michael Vilhelmsen
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com


Uffe Kousgaard (05-04-2005)
Kommentar
Fra : Uffe Kousgaard


Dato : 05-04-05 13:29

"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> wrote in message
>

> Det har jeg så lige gjort.
> Det havde ingen indvirkning.

Så er der ikke andet for end at bide i det sure æble: Du skal lave en
seperat tråd, hvori din SQL afvikles. Så kan du have din dims til at snurre
rundt i mellemtiden.

> Og ja - jeg er nok ikke verdens mester i Delphi.
> Men jeg elsker at arbejde med det.
> Og jeg lærer jo noget nyt hele tiden.

Godt, for tråde kræver at man læser meget (og forstår det) og det er noget
af det sværeste at få til at virke / debugge.

Prøv f.eks. at starte her:
http://www.pergolesi.demon.co.uk/prog/threads/ToC.html

hilsen
Uffe



Ken Madsen (08-04-2005)
Kommentar
Fra : Ken Madsen


Dato : 08-04-05 08:38


>
> Godt, for tråde kræver at man læser meget (og forstår det) og det er noget
> af det sværeste at få til at virke / debugge.
>
> Prøv f.eks. at starte her:
> http://www.pergolesi.demon.co.uk/prog/threads/ToC.html
>
> hilsen
> Uffe
>
>

Hov, kan være at man skal læse alle svar så man ikke som en klaptorsk
tror man er smart og foreslår sammen løsning som alle andre ;)

Nå - men det er nu altså ikke så besværligt at debugge tråde. Det der
kan være besværligt er at debuge tråde der skal referere til samme
område i hukkomelsen, eller flere tråde der er afhængige af hinanden.
Der er det nu heller ikke engang debugningen der er svær, men selve
teknikken at lave flere tråde der bruger samme hukkomelse og dermed
selvfølgelig debugningen.

Bare sæt breakpoints i dine tråde så kan du trace i koden.

Mvh Ken.

Ove Kjeldgaard (05-04-2005)
Kommentar
Fra : Ove Kjeldgaard


Dato : 05-04-05 17:20

"Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk>
wrote:

>Selvom jeg laver et breakpoint der, stopper programmet ikke førend OPEN (på min SQL query) er færdig.
>Selve appl. virker død for den almindelige bruger.
>Hvis man f.eks. maksimere et andet vindue hen over, og efterfølgende minimere det igen, genskrives min appl. heller ikke.

Kan du ikke beskrive lidt mere om hvordan koden ser ud omkring OPEN.

For "application.processmessages" skal typisk med i en løkke der tager lang tid
for at andre programmer kan få tildelt tid.

--
Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk
Natur og Friluftsliv: <http://hiker.dk>

Michael Vilhelmsen (06-04-2005)
Kommentar
Fra : Michael Vilhelmsen


Dato : 06-04-05 07:21

>
> Kan du ikke beskrive lidt mere om hvordan koden ser ud omkring OPEN.
>


Der er ingen kode.

Eks.

MyQuery.ParamByName('SomeValue').AsString := SomeOtherValue;
MyQuery.Open; //Eller MyQuery.ExecSQL;
While (not (MyQuey.Eof)) do
begin
end;


Og det er lige præcis Open (eller ExecSQL) som "lukker" programmet.
Nu venter programmet bare på et go eller no-go fra databasen....
Og som sagt - Det kan tage tid.

Michael

--
==========
Best Regards / Venlig hilsen

Michael Vilhelmsen
==========
Best Regards / Venlig hilsen

Michael Vilhelmsen


Ove Kjeldgaard (06-04-2005)
Kommentar
Fra : Ove Kjeldgaard


Dato : 06-04-05 17:07

"Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk>
wrote:

>Der er ingen kode.
>
>Eks.
>
> MyQuery.ParamByName('SomeValue').AsString := SomeOtherValue;
> MyQuery.Open; //Eller MyQuery.ExecSQL;
> While (not (MyQuey.Eof)) do
> begin
> end;
>
>
>Og det er lige præcis Open (eller ExecSQL) som "lukker" programmet.
>Nu venter programmet bare på et go eller no-go fra databasen....
>Og som sagt - Det kan tage tid.

OK, så er det "MyQuery.Open" der mangler en del "application.processmessages"
kald

Noget du kan gøre, er at give en besked lige før "MyQuery.Open" kaldet om at det
kan tage lang tid. Og så selvfølgelig huske en "application.processmessages" for
at få vist beskeden før du eksekverer "MyQuery.Open".


--
Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk
Natur og Friluftsliv: <http://hiker.dk>

Nicolai Hansen (08-04-2005)
Kommentar
Fra : Nicolai Hansen


Dato : 08-04-05 11:43

Ove Kjeldgaard <ReadMyEmail@The.Signature> wrote in message news:<it1851d2ijbu0qq5356dcb2nohipgg377v@4ax.com>...
> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk>
> wrote:
>
> >Der er ingen kode.
> >
> >Eks.
> >
> > MyQuery.ParamByName('SomeValue').AsString := SomeOtherValue;
> > MyQuery.Open; //Eller MyQuery.ExecSQL;
> > While (not (MyQuey.Eof)) do
> > begin
> > end;
> >
> >
> >Og det er lige præcis Open (eller ExecSQL) som "lukker" programmet.
> >Nu venter programmet bare på et go eller no-go fra databasen....
> >Og som sagt - Det kan tage tid.
>
> OK, så er det "MyQuery.Open" der mangler en del "application.processmessages"
> kald
>
> Noget du kan gøre, er at give en besked lige før "MyQuery.Open" kaldet om at det
> kan tage lang tid. Og så selvfølgelig huske en "application.processmessages" for
> at få vist beskeden før du eksekverer "MyQuery.Open".

Må jeg gøre mig til fortaler for at bruge TComponent.Update istedet
for application.processmessages, da sidstnævnte gør en hel del andre,
til tider uhensigtsmæssige, ting end blot at opdatere skærmen.

Thor (05-04-2005)
Kommentar
Fra : Thor


Dato : 05-04-05 17:22

Hej Michael

Sløve forespørgsler plejer at være en fejl. Mangler der ikke blot et index
eller to for at din
sql kører hurtigt?

mvh Thor


Det er ret nemt at lave en tråd, der skifter cursor, se her:

f.eks

BlinkCursor;
query.open;
StopBlink;


type tcursorblinker = class(tthread)
stop : boolean;
procedure execute; override;
end;

procedure tcursorblinker.execute;
begin
repeat
screen.Cursor := crSizeNESW;
screen.Cursor := crSizeNS;
screen.Cursor := crSizenwse;
until stop;
screen.Cursor := crdefault;
suspend;
free;
end;

var
cb : tcursorblinker;

procedure BlinkCursor;
begin
cb := tcursorblinker.create(false);
end;

procedure StopBlink;
begin
cb.stop := true;
end;




"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en
meddelelse news:mn.2aeb7d54fd83a374.11460@Microcom.PLEASEREMOVE.Dk...
> Hej alle
>
> Jeg har et program, som laver mange SQL statements (Disse via
> InterbaseExpress comp).
>
> Langt de fleste eksekveres så hurtigt, at resultatet er tilgængeligt med
> det samme.
>
> Men af og til, laver jeg en rutine, hvor tiden fra OPEN til programmet
> fortsætter (altså hvor databasen har udført opgaven) godt kan være
> adskillige minutter.
> Som InterbaseExpress comp. er opbygget giver de ingen mulighed for, at
> give noget feedback så man kan skrive et eller andet på skærmen, som
> fortæller brugeren, at der faktisk sker noget.
> Programmet står simpelthen bare stille (eller sådan virker det for
> brugeren).
>
> Jeg kunne tænke mig, at lave en eller anden ting, som kunne poppe op, og
> vise et eller andet (En progressbar som stille og roligt tæller op, et
> "møllehjul", en prik som vokser og mindsker sig hele tiden, el. andet).
> Jeg har prøvet at lave en form, som jeg viser inden, hvor på der er en
> timer, som hvert 250 ms. ændrer et tegn (|/-\) så det ligner et møllehjul.
> Men der sker ikke en skid.....
>
> Det er som om, at formen ingen tid får......
>
>
> Gør jeg noget forkert ?
> Eller er jeg bare lidt dum
>
> Michael
>
> Bruger D5 Ent.
>
> --
> ==========
> Best Regards / Venlig hilsen
>
> Michael Vilhelmsen
> This is an automatic signature of MesNews.
> Site : http://mesnews.no-ip.com
>



Michael Vilhelmsen (06-04-2005)
Kommentar
Fra : Michael Vilhelmsen


Dato : 06-04-05 07:23

> Sløve forespørgsler plejer at være en fejl. Mangler der ikke blot et index eller to for at din
> sql kører hurtigt?

Jo, nogle gange er det.
Så bruger jeg mit DB værktøj og analysere SQL'en.
Men når jeg ender op med en, hvor brugeren af den ene eller den anden grund ønsker et eller andet udført, som omhandler millionvis af records, kan det godt tage lidt tid, førend svaret forelægger.

Men jeg vil lige prøve din kode.....

Michael


>
> mvh Thor
>
>
> Det er ret nemt at lave en tråd, der skifter cursor, se her:
>
> f.eks
>
> BlinkCursor;
> query.open;
> StopBlink;
>
>
> type tcursorblinker = class(tthread)
> stop : boolean;
> procedure execute; override;
> end;
>
> procedure tcursorblinker.execute;
> begin
> repeat
> screen.Cursor := crSizeNESW;
> screen.Cursor := crSizeNS;
> screen.Cursor := crSizenwse;
> until stop;
> screen.Cursor := crdefault;
> suspend;
> free;
> end;
>
> var
> cb : tcursorblinker;
>
> procedure BlinkCursor;
> begin
> cb := tcursorblinker.create(false);
> end;
>
> procedure StopBlink;
> begin
> cb.stop := true;
> end;
>
>
>
>
> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en meddelelse news:mn.2aeb7d54fd83a374.11460@Microcom.PLEASEREMOVE.Dk...
>> Hej alle
>>
>> Jeg har et program, som laver mange SQL statements (Disse via InterbaseExpress comp).
>>
>> Langt de fleste eksekveres så hurtigt, at resultatet er tilgængeligt med det samme.
>>
>> Men af og til, laver jeg en rutine, hvor tiden fra OPEN til programmet fortsætter (altså hvor databasen har udført opgaven) godt kan være adskillige minutter.
>> Som InterbaseExpress comp. er opbygget giver de ingen mulighed for, at give noget feedback så man kan skrive et eller andet på skærmen, som fortæller brugeren, at der faktisk sker noget.
>> Programmet står simpelthen bare stille (eller sådan virker det for brugeren).
>>
>> Jeg kunne tænke mig, at lave en eller anden ting, som kunne poppe op, og vise et eller andet (En progressbar som stille og roligt tæller op, et "møllehjul", en prik som vokser og mindsker sig hele tiden,
>> el. andet).
>> Jeg har prøvet at lave en form, som jeg viser inden, hvor på der er en timer, som hvert 250 ms. ændrer et tegn (|/-\) så det ligner et møllehjul. Men der sker ikke en skid.....
>>
>> Det er som om, at formen ingen tid får......
>>
>>
>> Gør jeg noget forkert ?
>> Eller er jeg bare lidt dum
>>
>> Michael
>>
>> Bruger D5 Ent.
>>
>> -- ==========
>> Best Regards / Venlig hilsen
>>
>> Michael Vilhelmsen
>> This is an automatic signature of MesNews.
>> Site : http://mesnews.no-ip.com
>>

--
==========
Best Regards / Venlig hilsen

Michael Vilhelmsen
==========
Best Regards / Venlig hilsen

Michael Vilhelmsen


Finn Bindeballe (06-04-2005)
Kommentar
Fra : Finn Bindeballe


Dato : 06-04-05 07:49

hej....

kør det i en egen thread......

/F

Ken Madsen (08-04-2005)
Kommentar
Fra : Ken Madsen


Dato : 08-04-05 08:27


>
> Det er som om, at formen ingen tid får......
>
>
> Gør jeg noget forkert ?
> Eller er jeg bare lidt dum
>
> Michael
>
> Bruger D5 Ent.
>

Hej Michael,

Det du kan gøre er at køre dine queries i en tråd for sig selv - så for
din form masser af processtid til at opdatere dit møllehjul.

Hvis du ikke har arbejdet med TThread før er her en fin tutorial

http://www.pergolesi.demon.co.uk/prog/threads/ToC.html

Med venlig hilsen Ken Madsen

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste