abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 2
včera 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 19
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 2
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 768 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Stránkování dat z MySQL v aplikaci

9.9.2010 11:35 PetrHL | skóre: 16 | blog: petr_h | Neratovice
Stránkování dat z MySQL v aplikaci
Přečteno: 398×
Dobrý den,

mám aplikaci, která pracuje s daty v MySQL. Jedna tabulka má kolem 100k záznamů a já bych rád tyto záznamy zobrazil postupně uživateli.
Mé řešení:

Po spuštění aplikace zobrazím prvních 500 záznamů. Když uživatel začne rolovat v gridu a dostane se na konec, načtu následujících 500 záznamů. Pokud se vrací zpět, načtu předchozí záznamy atd. Funguje to velice pěkně a rychle. Používám na to LIMIT a OFFSET. Je tu ale problém.

Tabulka je nějak setříděná. Uživatel chce editovat záznam. Pokud opraví položku, podle které se tabulka třídí, položka se posune na jinou pozici, takže se dostane mimo hranice stanovené LIMIT a OFFSET. Jak se mám na tento záznam po ukončení editace vrátit? Jak mám zjistit, kterou stránku mu mám pomocí LIMIT a OFFSET zobrazit (kurzor na záznam už pak přesunu pomocí sekvenčního vyhledání pod ID)? Máte, prosím, nějaký nápad?

Díky moc!
Petr
"Do, or do not. There is no 'try.'" -- Jedi Master Yoda | VPS za rozumnou cenu?

Řešení dotazu:


Odpovědi

rADOn avatar 9.9.2010 12:48 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Stránkování dat z MySQL v aplikaci
select count(*) from table where sort_key < changed_key
a mas pozici.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
Řešení 1× (PetrHL (tazatel))
13.9.2010 10:01 PetrHL | skóre: 16 | blog: petr_h | Neratovice
Rozbalit Rozbalit vše Re: Stránkování dat z MySQL v aplikaci

Díky za radu, pomohlo to. Bohužel pokud je uživatel někde na u konce tabulky, ten select dlouho trvá. Nakonec jsem to vyřešil jinak.
Mé řešení:

procedure TfrmMain.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  id : Integer;
  f1 : TDateTime;
  f2 : String;
  f3 : Integer;
begin
  if (key = VK_END) and (Shift = [ssCtrl]) then
  begin
    if cDB_LIMIT > DbRecCount then
      DbOffset := 0
    else
      DbOffset := DbRecCount - cDB_LIMIT;
    try
      Q.DisableControls;
      trQ.Rollback;
      Q.SQL.Text := 'select * from cqrlog_main order by qsodate DESC, time_on DESC LIMIT '+IntToStr(cDB_LIMIT)+' OFFSET '+IntToStr(DbOffset);
      trQ.StartTransaction;
      Q.Open;
      Q.First
    finally
      Q.EnableControls
    end
  end;
  if (key = VK_HOME) and (Shift = [ssCtrl]) then
  begin
    try
      Q.DisableControls;
      trQ.Rollback;
      Q.SQL.Text := 'select * from cqrlog_main order by qsodate DESC, time_on DESC LIMIT '+IntToStr(cDB_LIMIT);
      trQ.StartTransaction;
      Q.Open
    finally
      Q.EnableControls
    end
  end;
  if ((key = VK_UP) or (key = 33)) and Q.BOF then
  begin
    try
      Q.DisableControls;
      id := Q.Fields[0].AsInteger;
      f2 := Q.Fields[2].AsString;
      f1 := Q.Fields[1].AsDateTime;
      Q1.SQL.Text := 'select id_cqrlog_main from cqrlog_main order by qsodate DESC, time_on DESC LIMIT 1';
      trQ1.StartTransaction;
      Q1.Open;
      f3 := Q1.Fields[0].AsInteger;
      trQ1.Rollback;
      Q1.Close;
      if f3=id then //we are on the begining of dataset
        exit;
      Q.Close;
      Q.SQL.Text := 'select * from (select * from cqrlog_main where (qsodate = '+QuotedStr(DateToStr(f1))+
                    'and time_on >= '+QuotedStr(f2)+') or qsodate > '+QuotedStr(DateToStr(f1))+
                    ' order by qsodate, time_on LIMIT '+IntToStr(cDB_LIMIT)+') as foo order by qsodate DESC,time_on DESC';
      trQ.Rollback;
      trQ.StartTransaction;
      Q.Open;
      Q.Last
    finally
      Q.EnableControls
    end
  end;

  if ((key = VK_DOWN) or (key = 34)) and Q.EOF then
  begin
    try
      Q.DisableControls;
      id := Q.Fields[0].AsInteger;
      f2 := Q.Fields[2].AsString;
      f1 := Q.Fields[1].AsDateTime;

      Q1.SQL.Text := 'select id_cqrlog_main from cqrlog_main order by qsodate,time_on LIMIT 1 OFFSET 0';
      trQ1.StartTransaction;
      Q1.Open;
      f3 := Q1.Fields[0].AsInteger;
      Q1.Close;
      trQ1.Rollback;
      if f3=id then //we are on the end of dataset
        exit;
      Q.Close;
      Q.SQL.Text := 'select count(*) from cqrlog_main where (qsodate = '+QuotedStr(DateToStr(f1))+
                    'and time_on <= '+QuotedStr(f2)+') or qsodate < '+QuotedStr(DateToStr(f1))+
                    ' order by qsodate DESC, time_on DESC LIMIT '+IntToStr(cDB_LIMIT);
      Q.Open;
      if Q.Fields[0].AsInteger < cDB_LIMIT then
      begin
        Q.Close;
        Q.SQL.Text := 'select * from (select * from cqrlog_main order by qsodate, time_on LIMIT '+
                       IntToStr(cDB_LIMIT)+') as foo order by qsodate DESC,time_on DESC';
       Q.Open;
       Q.Locate('id_cqrlog_main',id,[])
      end
      else begin
        Q.Close;
        Q.SQL.Text := 'select * from cqrlog_main where (qsodate = '+QuotedStr(DateToStr(f1))+
                      'and time_on <= '+QuotedStr(f2)+') or qsodate < '+QuotedStr(DateToStr(f1))+
                      ' order by qsodate DESC, time_on DESC LIMIT '+IntToStr(cDB_LIMIT);
        Q.Open;
        Q.Locate('id_cqrlog_main',id,[])
      end
    finally
      Q.EnableControls
    end
  end                              

Ještě bude nutné se s tím pohrát, ale funguje to dle očekávání.

"Do, or do not. There is no 'try.'" -- Jedi Master Yoda | VPS za rozumnou cenu?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.