Avatar billede ruma1974 Nybegynder
02. april 2007 - 09:05 Der er 13 kommentarer

dbgrid søjle til Tstringlist

Hej,

Hvordan kopier man en søjle fra dbgrid til en Tstringlist.

Jeg skal gennemløbe et stort data sæt og jeg kan ikke finde en beginupdate på dbgriden hvilket gør at det tager en krig at gennemløbe en søjle i dbgrid.

Mvh,

Rune
Avatar billede kroning Nybegynder
02. april 2007 - 09:19 #1
Ka du ikke diseable din DataSource, gennemløbe dit dataset og derefter enable din DataSource igen.
Avatar billede hrc Mester
02. april 2007 - 09:32 #2
Brug en query i stedet!
Avatar billede hrc Mester
02. april 2007 - 09:36 #3
... opret en query, lav operationen der og, når du er færdig, genåbn' det datasæt der er koblet til din grid (i øvrigt er søjle et lidt forvirrende udtryk. Kan bedre lide kolonne).

- eller burde kronings eksempel nok virke, men jeg synes det er en forkert vej at gå.
Avatar billede hrc Mester
02. april 2007 - 09:37 #4
Hvad skal du lave? Normalt plejer "select distinct" og lignende at reducere antallet af records du skal gennemløbe.
Avatar billede ruma1974 Nybegynder
02. april 2007 - 19:08 #5
Jeg har en tabel med 30 id nummer (forhandler). For hver id nummer er der omkring 40000 varenavne og priser som alle er i samme tabel.

Jeg ønsker at lave en table som har

vare_navn_1 pris_id1 pris_id2 ....
vare_navn_2 pris_id1 pris_id2 ....

kun de varer som alle forhandler har skal med i tablen. Jeg ønsker naturligvis at metoden skal værre så hurtig som mulig.

Jeg har brugt join med mysql for nogle eksempler hvor jeg har to forhandler og allerede her syntes jeg mysql er lidt sløv med at svare. Jeg tror derfor at jeg kan lave tabellen hurtigere ved at hente alt data også lave tabellen vhj delphi. Det er muligt at dette skyldes min manglende kendskab til mysql.

Mvh,

Rune
Avatar billede ruma1974 Nybegynder
02. april 2007 - 19:24 #6
Der er så også lige den krølle at nogle varenavne forekommer to gange med to forskellig priser. I de tilfælde skal gennemsnits bruges i tabellen. Dette gør at mySQL join metoden ikke er en god løsning i mit tilfælde.
Avatar billede hrc Mester
03. april 2007 - 08:41 #7
... hmmm
Avatar billede ruma1974 Nybegynder
03. april 2007 - 15:40 #8
Jeg forsøgt i ren panik at bruge kroning's metode men det går ikke hurtigtere. Godt nok ser jeg ikke opdateringerne på skærmen men af en eller anden grund er det bare super langsomt at gennemløbe en dbgrid.

Vi taler om et par minuter hvorimod en stringlist af samme størrelse ville tage under et 1 sekund.

Det tager også kun 1 sekund at hente data fra mySQL. Så jeg forstår ikke hvorfor det tager så lang tid.
Avatar billede kroning Nybegynder
03. april 2007 - 16:06 #9
Hvorfor gennemløber du DBGrid´et? Det er nok hurtigere at gennemløbe DataSættet, eller det er måske det du gør?
Avatar billede ruma1974 Nybegynder
03. april 2007 - 17:53 #10
Jeg gennemløb

dbgrid1.dataSource1.dataset

Nu har jeg forsøgt at gennemløbe

DataSource1.DataSet

Det giver samme resultat
Avatar billede kroning Nybegynder
03. april 2007 - 18:11 #11
Jeg har lige forsøgt med en SELECT + JOIN (2 tabeller), i alt 14 felter i hver record. Resultatet var lidt over 61000 poster med som nævnt hver 14 felter. Derefter gennemløber jeg alle poster og ligger tal fra flere felter sammen.
Det tager ca. 10 sekunder med det hele på en AMD 64 4000+
Avatar billede ruma1974 Nybegynder
03. april 2007 - 18:45 #12
Forskellen er at jeg gennemløber 40000*30=1200000 poster i dbgriden eller i data sættet. Jeg har 20 gang flere felter dvs at det burde tager 200 sekunder for mig. Hvilket det desværre ikke gør :-(

Min sql query tager 1 sek. ingen ko på isen der. Det er når jeg gennemløber mit dbgrid at det tager en krig.

Jeg gennemløber med:

DataSource4.DataSet.First;
    richedit1.Lines.BeginUpdate;
      while not DataSource4.DataSet.Eof do
      begin
      line:=DataSource4.DataSet.FieldByName('ID').AsString;
      line:=line+#9+DataSource4.DataSet.FieldByName('Symbol').AsString;
      line:=line+#9+DataSource4.DataSet.FieldByName('M').AsString;
      line:=line+#9+DataSource4.DataSet.FieldByName('P_value').AsString;
      line:=line+#9+DataSource4.DataSet.FieldByName('A').AsString;
      richedit1.Lines.Add(line);
      DataSource4.DataSet.Next;
      end;
    richedit1.Lines.EndUpdate;

her er koden simpler da jeg i i virkeligheden bør tage gennemsnittet når ID og Symbol er ens.
Avatar billede hrc Mester
10. april 2007 - 14:04 #13
Du burde lave en selvstændig query; en der ikke hænger på noget som helst andet end databasen. Den vil nok også tage tid at køre, men når griddet er koblet fra vil det afgjort hjælpe.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester