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í
×

dnes 10:35 | Komunita
Na blogu Oracle se objevila zpráva o tom, že plánovaná verze Java EE 8 bude uvolněna jako opensource (referenční implementace a compatibility kit). V současné době je uvolněna jen Java SE (standard edition) pod licencí GPL2 v podobě OpenJDK (Open Java Development Kit), kterou začal v roce 2006 uvolňovat Sun.
Max | Komentářů: 0
včera 23:55 | IT novinky

Google na YouTube oficiálně představil Android 8.0 Oreo. Přehled novinek v příspěvku na blogu věnovaném vývojářům.

Ladislav Hagara | Komentářů: 2
včera 16:44 | Zajímavý článek

Po téměř 3 měsících od vydání třetího čísla publikoval Michal Špaček na svých stránkách čtvrté číslo newsletteru věnovanému bezpečnosti, bezpečnému vývoji převážně webových aplikací a bezpečnosti uživatelů. Jedná se současně o číslo poslední: "Nepíše se mi to lehce, a trvalo to, než jsem to ze sebe dostal, ale tohle je poslední newsletter v této podobě. Ani jsem ho nestihl pojmenovat a už jsem ho zabil. Nezbývá mi tolik času, abych každou událost, novinku a změnu v prohlížeči detailně popisoval tak, jak bych v newsletteru chtěl, mrzí mě to".

Ladislav Hagara | Komentářů: 0
včera 07:00 | Nová verze

Byla vydána diaspora* ve verzi 0.7.0.0. Jedná se o svobodný software, který slouží jako osobní webový server pro poskytování služeb sociální sítě (Wikipedie). Přehled novinek v příspěvku na blogu a na GitHubu. Sociální síť diaspora* byla před pěti lety předána komunitě.

Ladislav Hagara | Komentářů: 0
včera 06:00 | IT novinky

Společnost Hardkernel stojící za jednodeskovými počítači ODROID představila na YouTube minipočítač určený pro domácí cloud ODROID-HC1 vycházející z ODROID-XU4. Minipočítač s kovovou krabičkou, do které stačí vložit 2 a půl palcový disk, lze koupit za 49 dolarů. ODROID-HC1 je stohovatelný.

Ladislav Hagara | Komentářů: 29
20.8. 16:22 | Nová verze

Byl vydán DB Browser for SQLite (sqlitebrowser) ve verzi 3.10.0. Nejnovější stabilní verze této grafické nadstavby nad relačním databázovým systémem SQLite (Wikipedie) přináší například integraci s DBHub.io, tj. platformou pro sdílení SQLite databází. Podrobnosti na GitHubu.

Ladislav Hagara | Komentářů: 2
20.8. 08:00 | IT novinky

Andy Rubin, spoluzakladatel společnosti Android, jež byla v roce 2005 koupena Googlem, nyní CEO společnosti Essential Products, oznámil předprodej chytrého telefonu Essential. Telefon se začne rozesílat 1. září. Cena telefonu je 699 dolarů. Cena telefonu současně s 360° kamerou s rozlišením 4K byla stanovena na 749 dolarů. Kameru, v budoucnu i další příslušenství, lze k telefonu připojit pomocí konektoru s magnety.

Ladislav Hagara | Komentářů: 0
19.8. 13:44 | Zajímavý software

Evropská komise vydala novou verzi 1.4.0.1 svého open source v Javě naprogramovaného softwaru pro online průzkumy EUSurvey. Online dotazníky lze vytvářet na stránkách Evropské komise nebo si lze software stáhnout (zip a war) a nainstalovat lokálně. Zdrojové kódy jsou k dispozici pod licencí EUPL (European Union Public Licence).

Ladislav Hagara | Komentářů: 0
18.8. 23:55 | Komunita

Ubuntu 17.10 (Artful Aardvark) bude ve výchozím stavu zobrazovat Dok (Launcher). Jedná se o rozšíření GNOME Shellu Ubuntu Dock. To bylo forknuto z rozšíření Dash to Dock. Ukázka na YouTube [reddit].

Ladislav Hagara | Komentářů: 8
17.8. 15:33 | Nová verze

Byla vydána verze 17.08.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi. Aplikace kmag, kmousetool, kgoldrunner, kigo, konquest, kreversi, ksnakeduel, kspaceduel, ksudoku, kubrick, lskat a umbrello byly portovány na KDE Frameworks 5.

Ladislav Hagara | Komentářů: 0
Těžíte nějakou kryptoměnu?
 (5%)
 (2%)
 (17%)
 (76%)
Celkem 372 hlasů
 Komentářů: 21, poslední 13.8. 09:57
    Rozcestník

    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: 403×
    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.