Byla vydána nová verze 25.05.11 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Nejnovější Shotcut je již vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
Svobodný elektronický platební systém GNU Taler (Wikipedie, cgit) byl vydán ve verzi 1.0. GNU Taler chrání soukromí plátců a zároveň zajišťuje, aby byl příjem viditelný pro úřady. S vydáním verze 1.0 byl systém spuštěn ve Švýcarsku.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 209. brněnský sraz, který proběhne tento pátek 16. května od 18:00 ve studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Jelikož se Brno stalo jedním z hlavních míst, kde se vyvíjí open source knihovna OpenSSL, tentokrát se OpenAlt komunita potká s komunitou OpenSSL. V rámci srazu Anton Arapov z OpenSSL
… více »GNOME Foundation má nového výkonného ředitele. Po deseti měsících skončil dočasný výkonný ředitel Richard Littauer. Vedení nadace převzal Steven Deobald.
Byl publikován přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) za uplynulé dva měsíce. Servo zvládne už i Gmail. Zakázány jsou příspěvky generované pomocí AI.
Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.
Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.
Byla vydána (𝕏) dubnová aktualizace aneb nová verze 1.100 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.100 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.5.
OpenSearch (Wikipedie) byl vydán ve verzi 3.0. Podrobnosti v poznámkách k vydání. Jedná se o fork projektů Elasticsearch a Kibana.
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!Řešení dotazu:
select count(*) from table where sort_key < changed_keya mas pozici.
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
Tiskni
Sdílej: