Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Sopiva kieli sql-tietojen tulostamiseen näkyville

Sivun loppuun

Vezor [02.01.2014 22:15:57]

#

Hei kaikille,

Pidemmän aikaa sivusta seuranneena päätin kysästä teiltä guruilta että mitä kieltä suosittelisitte seuraavanlaisen ohjelman toteuttamiseen.

Ohjelmaan tuotaisiin suuri määrä dataa, numeroita, ovat erilaisia arvoja. Tähän asti nämä tiedot on tuotu sql kannasta exceliin. Ja excelit ovat
nyt ruvenneet paisumaan lähemmäs 200mt kokoisiksi jotenka käyttäminen hidastuu ja useampaa samaan aikaan käytettäessä tulee officen muistinkäytön rajoitukset vastaan.

Ohjelman siis käytännössä tarvitsisi vain näyttää sql haun tulokset. Olen kaavaillut C# tähän tai vaihtoehtoisesti ajaisi php:llä ne kannasta ulos.

Mitä mieltä olette mikä olisi järkevintä ja ennen kaikkea resurssien käytön suhteen järkevintä?

-V

groovyb [02.01.2014 23:41:58]

#

C# soveltuu vallan mainiosti, kuten myös php:kin. php:tä luonnollisesti et voi käyttää jos aiot tehdä Desktop -sovelluksen.

Resurssien käytön suhteen molemmat ajaa saman asian, molemmille on ilmaisia työkaluja kehitykseen (esim C#:lle visual studio express ja Sharp Developer), ja mitään erillisiä lisenssejä et tarvitse verkkoympäristöön (IIS tai apache ei tarvitse erillistä windows serverin asennusta). linux puolella C# toimii myös vallan mainiosti monon kautta sekä Desktop -sovelluksena, että apache + mono combon kautta asp sovelluksena.

Valitse se tapa, kumpi mielestäsi on itsellesi luontevampi!

neau33 [03.01.2014 06:19:42]

#

Moi Vezor!

Jos ohjelman on tarkoitus vain esittää SQL haun tulokset niin Excel soveltuu tehtävään aivan yhtä hyvin, kuin ennenkin.
Eihän niitä taulukoita ole mikään pakko tallentaa. Oletan siis, että kerralla ei haeta 200mt dataa per taulu.

Mitäs luulisit tapahtuvan jos pukkaat C# sovelmassasi SQL palvelimelta esim. tuon mainitsemasi 200 megaa dataa per datasetti.

Elikäs voit estää Työkirjan tallentamisen yksinkertaisella VB(A) koodilla.

'ThisWorkbook (TämäTyökirja)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Ei kysele tallentamisesta erikseen suljettaessa
    Saved = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    'Trikki toimii, kun tallennat työkirjasi ensin eri nimellä, kuin
    'kohdassa 'HALUAMASI_NIMI' ja nimeät sitten työkirjan uudelleen
    'nimellä 'HALUAMASI_NIMI' klikkaamalla kuvaketta hiiren oikealla jne.
    'Mikäli tulee tarvetta editoida niin nimeät vain väliaikaisesti uudelleen.

    If ThisWorkbook.Name = "HALUAMASI_NIMI" Then
        Cancel = True: Exit Sub
    End If

End Sub

Elikä siis kielellähän ei ole ongelman/ratkaisun kanssa mitään tekemistä.

-Nea-

Vezor [03.01.2014 09:25:25]

#

Hei,

Ja kiitos kaikille vastauksista. Luulen että mennään tuon C#:in kanssa tulee käyttöliittymästäkin mukavampi.

ja -Nea- ongelmana on excelin muistinkäyttörajoitukset kun 32bit office tarjoaa muistinkäytön tuen vain 2gbit asti. Ja kun eräälläkin käyttäjällä samanaikaisia excel tiedostoja auki 15-20kpl niin tässä kohtaa tulee seinä vastaan, että excel kaatuu. Vanhemmalla 2003 excelillä ei tätä ongelmaa ollut kun pystyi hyödyntämään suurempaa määrää muistia. Tämähän ratkaistaisiin päivittämällä 64bit office ja windowsi mutta excelin tietyt addinsit eivät toimi 64bittisessä versiossa. Siksi ollaan kaavailemassa toista alustaa johon voitaisiin nämä datat tuoda ja selata niitä sen kautta.

Ja tosiaan datoja ei tarvitse ikinä muokata näin, vaan luetaan pelkästään dataa.

Mahtaako tässä sittenkin tulla ongelmaa c#:kin kanssa kun haetaan useaan "välilehteen" dataa suoraan tietokannasta? Mutta erillisillä hauilla.

Onko järkevämpää hakea kaikki tarvittava data vain kerran ohjelmaan ja jakaa siitä eri välilehdille vai jokaista välilehteä kohden tehdä oma sql haku joka päivittyy vain kun painetaan nappia tai mennään ko. välilehden kohdalle?

Kiitos.

-V

neau33 [03.01.2014 11:58:56]

#

Moi taas Vezor!

No hyvä, kokeile miten se C#:llä toteutettu viritelmä pelaa jollain 4:llä gigalla kamaa kerrallaan (200mt * 20 Excel-tiedostoa). Lisäksi olisi mielenkiintoista tietää, että miten tämä eräskin käyttäjä pystyy seuraamaan 15-20 Excel työkirjaa (joissa on ties kuinka monta taulukkoa) samaan aikaan.

-Nea-

groovyb [03.01.2014 12:51:16]

#

neau33, varmaan vaihtamalla välilehteä tai workbookkia halutessaan.

Mitä muistinkulutukseen tulee, en usko että tarvitset noin paljon dataa visuaaliseen näyttämiseen. Muistinkulutus voi olla laskentavaiheessa suurta, mutta kun laskentatyö on tehty, on turha pitää turhaksi jäänyttä dataa muistissa.

Vezor [03.01.2014 14:04:26]

#

Hei,

En väheksy exceliä, mutta ei sitä tuohon tarkoitukseen ole tehty. Tiedän että tuo monen kymmenen excelin auki pitäminen on hullua, mutta kun käyttäjät ovat niin aina tehneet niin niitä on _hieman_ vaikea saada pois siitä tottumuksesta. Siksi ollaan etsimässä vaihtoehtoa jolla heillä olisi mahdollista pitää suurempi määrä tietoa esillä kun nyk. kokoonpanolla 2 excel tiedostoa.

Toki jos joku pystyy selventämään miksi excel rohmuaa itsellensä muistia vaikka mitään hakua ei enään ole käynnissä yli 470mt muistista / 1 excel workbookki. niin tämäkin helpottaisi ensi hätään.

groovyb [03.01.2014 14:14:52]

#

haun data pysyy muistissa, kunnes muisti vapautetaan.

excelin päässä tämä tehdään esim. asettamalla muuttujan / taulukon arvoksi Nothing, kun halutaan taulukko tyhjentää.

esimerkiksi, kun olet hakenut taulukon täyteen kilketta tietokannasta, ja laskenut tulokset toiseen taulukkoon, voit alkuperäisen taulukon arvoksi asettaa Nothing, vapauttaen muistin.

C# päässä taasen kuten excelissäkin, muisti vapautuu softan sulkeutuessa tai olion destructoinnissa (Garbage Collectorilla, unmanaged kilke ei luonnollisesti ajon aikana natiivina vapaudu ennen disposea), mutta IDisposablen ja sen suoman Disposen, ja GC:n collectia kutsumalla voidaan automaattista muistinhallintaa "hallita", ja nopeuttaa muistin vapautumista niiltä osin miltä halutaan.

neau33 [03.01.2014 15:31:48]

#

Heippa taas!

Vezor@: Excel ei rohmua sinällään juuri mitään, tuhoa se dataobjekti jolla haet sitä dataa ( = Nothing).

groovyb@: mistä ihmeestä nappasit tuon, että lasketaan jotain toiseen taulukkoon? Tässähän oli nyt kyseessä ainoastaan SQL-haun tuloksen visuaalinen esittäminen eli dataa ei ollut tarkoitus editoida yhtikäs mitenkään. Minulle on aivan sama millä kielellä ja missä ympäristössä mitäkin tehdään. On vain niin, että mikään C#-viritelmä ei takaa itsessään yhtikäs mitään ja eritoten silloin, kun itse varsinaisesta ongelmasta ei tunnu olevan mitään hajua.

Oletetaan, että jatketaan Excel pohjalta:
Meillä on yksi työkirja (workbook) jossa on n. määrä esim. 20 taulukkoa (worksheets). No nyt näitä työkirjan taulukoita käsitellään kuten mitä tahansa ns. välilehtiä.
VBA-Projektissa löytyy valmiiksi esim. sellainen tapahtuma (event), kuin Workbook_SheetChange, jonka taakse voidaan laittaa esim. koodi, joka tyhjentää kaiken sellaisen datan mukaan lukien objektit, joita ei tarvita noudettaessa juuri kyseiseen välilehteen esitettäväksi aiottua dataa.

Tehdään homma C#:lla:
Raahataan sinne formille Tab Controll ja asetetaan sille n. määrä välilehtiä ja jokaiselle välilehdelle DataGridView objekti. Laitetaan sitten TabIndexChanged tapahtumien taakse koodi joka tyhjentää kaiken sellaisen datan mukaan lukien objektit, joita ei tarvita noudettaessa juuri kyseiseen välilehteen esitettäväksi aiottua dataa.

No nyt herää kysymys, että mitenkä tämä C#:lla rakenneltu viritelmä toimisi jotenkin paremmin, kuin esim. Excelillä rakennettu vastaava.

Seuraavaksi voisi ajatella vaikkapa sitä, että mitenkä paljon dataa milloinkin tuodaan tietokannasta. Jos dataa ei ole mahdottomasti niin se kannattaa tuoda kerralla. Jos sitä on todella paljon niin se kannattaa tuoda tapauskohtaisesti ja jo tuotu data, jota ei tulla käyttämään juuri sillä hetkellä poistetaan. Käyttö voi hidastua, mutta se ei ole mitään verrattuna siihen, että koko systeemi alkaa tökkiä ja viimein katuu.

Jos tekisin homman itse oli sitten kyseessä Excel (VBA tai VSTO), C#, VB, VC.NET tai ihan miten vaan. Minulla olisi vain yksi record-/datasetti johon ohjaisin kulloisenkin SQL-kyselyn perusteella haetun datan ja vain yksi taulukko jossa esittäisin haun tuloksen. Sitten kun kyllästyisin kyttäämään yhtä tulosta niin suorittaisin joko uuden kyselyn tai sulkisin koko paskan.

-Nea-

groovyb [03.01.2014 15:41:11]

#

Noh, pidin vain todennäköisenä, että kukaan ei kyttää 200mb:n kasaa arvoja tietokannasta, vaan että sitä jäsennellään jollain tavalla joko loogisesti laskennallisesti, tai visuaalisesti (esim. Excelin omilla kuvaajilla). siinä on meinaan muutama rivi silmillä katseltavana. Jos pelkkää taulukkoa haluaa katsella, kelpaa siihen vaikka pelkkä SQL Management studio ja muutama kysely.

Jos minä tekisin tuon itse, en todennäköisesti löisi käyttäjälle 200mb:n könttiä taulukkoa silmille.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta