Close
Duke shfaqur rezultatin -9 deri 0 prej 5
  1. #1
    i/e regjistruar Maska e zenusi
    Anëtarësuar
    10-08-2006
    Vendndodhja
    Prizren
    Postime
    30

    Access - Databazë për pagat e punëtorëve

    Të nderuar antarë, desha një konsulltë në lidhje me formimin e një baze për llogaritjën e pagave për të ardhurat përsonale.Gjeneratat e reja punijnë me programe më të avansuara,por ne më të vjetrit akoma punojmë me excel dhe pjesërisht me access.
    Pytja është:Kam marr një shembull për llogaritjën e pagave të arsimëtarve në një shkollë.Gjatë formimi të bazës kam kriju tri tabela 1.Evidenca bazë 2.Të dhënat 3.Muajt, kamë bërë lidhjën e tyre. Mirpo baza e pagës mundë të ndyshoj pasë një kohe për ndonjërin dhe ndryshimi të filloi nga aty,dhe kursesi nga fillimi. Kam lexuar access bibla 2000 krotisht sepse nuk njofë gj. angleze.
    Përshendetje.
    Ndryshuar për herë të fundit nga zenusi : 23-08-2006 më 03:35

  2. #2
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Nëse të kuptova qartë, databaza do ruajë historinë e pagës së arsimtarëve gjatë gjithë muajve/viteve dhe nëse dikujt i rritet rroga në Qershor, ti nuk do që të ndryshojë historinë e rrogës që ai/ajo ka patur në muajt më parë.

    Për të bërë këtë gjë, në databazë të duhet të kesh një tabelë që ruan rrogën e punëtorit dhe datën kur ajo rrogë hyri në fuqi. Më poshtë ke një shembull të tabelës së punëtorëve dhe tabelës së pagës. Aty mund të shikosh se punëtori me ID=1 (Edi) paguhej 1000 lekë në Janar 2001; 2000 lekë në Janar 2005; 2500 që prej Janarit 2006.

    Kodi:
    Tabela punetoret
    Id 	emri 	
    1	Edi 
    2	Sokoli
    3	Majlinda
    4	Petriti
    5	Arbeni      
    
    
    Tabela paga
    id_punetorit	data		paga
    1		1/1/2001	$1,000.00
    1		1/1/2005	$2,000.00
    1		1/1/2006	$2,500.00
    2		1/1/2005	$2,000.00
    3		1/1/2005	$2,000.00
    3		1/1/2006	$2,500.00
    4		1/1/2004	$2,000.00
    4		1/1/2005	$3,000.00
    5		1/1/2005	$1,500.00
    Tani, e zëmë se do të duhet të krijosh një raport për historinë e pagave për të gjithë punëtorët. Në SQL kërkesa do ishte:

    Kodi:
    SELECT punetoret.emri, paga.data, paga.paga
    FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
    ORDER BY punetoret.emri, paga.data;
    
    emri		data		paga
    Arbeni		1/1/2005	$1,500.00
    Edi		1/1/2001	$1,000.00
    Edi		1/1/2005	$2,000.00
    Edi		1/1/2006	$2,500.00
    Majlinda	1/1/2005	$2,000.00
    Majlinda	1/1/2006	$2,500.00
    Petriti		1/1/2004	$2,000.00
    Petriti		1/1/2005	$3,000.00
    Sokoli		1/1/2005	$2,000.00
    Ose mund të duash një raport për vetëm një prej punëtorëve. Psh: Duam historinë e pagës së Edit (id=1).

    Kodi:
    SELECT punetoret.emri, paga.data, paga.paga
    FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
    WHERE (((punetoret.id)=1))
    ORDER BY paga.data;
    
    emri	data		paga
    Edi	1/1/2001	$1,000.00
    Edi	1/1/2005	$2,000.00
    Edi	1/1/2006	$2,500.00
    Mund të duash pagën e një punëtori në një muaj të caktuar.
    psh: Duam pagën e Edit për muajin Gusht 2006. Kërkesën në SQL e formojmë duke kërkuar të gjitha pagat e Edit, pastaj marrim vetëm pagat me datë më herët se 08/2006, i rendisim sipas datës, dhe marrim rreshtin e parë të rezultatit (top 1) që është data e fundit kur Edi pati rritje page.

    Kodi:
    SELECT TOP 1 punetoret.emri, paga.data, paga.paga
    FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
    WHERE (((paga.data)<#8/1/2006#) AND ((punetoret.id)=1))
    ORDER paga.data DESC;
    
    emri	data		paga
    Edi	1/1/2006	$2,500.00
    Mund të duash të bësh të njëjtin raport si më lart, por për të gjithë punëtorët. Dmth, të dish pagën e të gjithë punëtorëve në një muaj të caktuar. Për këtë duhet të formosh një kërkesë më të avancuar duke bashkuar dy kërkesa në një të vetme.

    Kodi:
    SELECT First(punetoret.emri) AS emri, "1/8/2006" AS data, 
     First((SELECT TOP 1 paga.paga 
     FROM paga 
     WHERE (((paga.data)<#1/8/2006#) 
     AND ((paga.id_punetorit)=punetoret.id))  ORDER BY paga.data DESC)) AS paga
    FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
    GROUP BY punetoret.id
    ORDER BY First(punetoret.emri);
    
    emri		data		paga
    Arbeni		1/8/2006	$1,500.00
    Edi		1/8/2006	$2,500.00
    Majlinda	1/8/2006	$2,500.00
    Petriti		1/8/2006	$3,000.00
    Sokoli		1/8/2006	$2,000.00
    Më poshtë kam bashkëngjitur databazën shembull bashkë me tabelat dhe kërkesat e mësipërme. Unë përdora versionin American të Access 2003, prandaj mund të duhet të ndryshosh formatin e datave dhe pagave sipas vendit ku do e përdorësh.
    Skedarët e Bashkëngjitur Skedarët e Bashkëngjitur
    Edi

  3. #3
    i/e regjistruar Maska e zenusi
    Anëtarësuar
    10-08-2006
    Vendndodhja
    Prizren
    Postime
    30
    I nderuari edspace; Të faleminderit shumë për këtë shembull, do të analizoj me kujdes këtë shembull, dhe ndoshta prapë do të pysë aty ko do të mbetëm,sepse si që kam cekur më lartë ne gjeneratat e vjetra më pak kuptojm gjuhët programuese.
    Të pëshendes nga Prizreni i bukur.

  4. #4
    i/e regjistruar Maska e zenusi
    Anëtarësuar
    10-08-2006
    Vendndodhja
    Prizren
    Postime
    30
    I nderuar Edi!
    Ju keni krijuar dy tabela; 1.T_puntoret, 2.T_pagat.Si kishte qenë e mundur që baza e pagës të jetë në tabelën e parë,që të mosë përshkruhët për ç'do muaj por të bartet vtëvetiu, që unë të shënoj vetem Nr,ID dhe shenimet tjera të barten.
    1.Puntoret
    -ID
    -Mbiemri
    -Emri
    -Baza
    -Vrejtëje
    2.Pagat
    -Nr.Autonumer
    -ID
    Kështu që ID i tab.1 lidhet me ID tab 2 (një me shumë).
    Përndryshe nëse për ç'do muaj përshkruajm bazën për 10.000 puntor më dukët e pa kuptimtë.Të lutem nëse ka ndonjë shembull përafësishtë kështu në ndonji libër më njofto.
    Përshendetje.
    Ndryshuar për herë të fundit nga zenusi : 29-08-2006 më 07:36

  5. #5
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Zenus,

    Nuk më ke kuptuar mirë. Tek tabela [paga] nuk do ketë të dhëna për çdo muaj, por vetëm kur një punëtor ka rritje/ulje rroge. Në tabelën shembull e shikon se Edi (me ID 1) ka punuar nga 2001-2006, por rroga i është rritur vetëm tre herë (2001, 2005, 2006), prandaj ka vetëm tre rreshta në tabelë. Me këto të dhëna e dimë që nga 2001-2004 ka patur pagën 1,000; në 2005 është paguar 2,000 dhe që prej 1 Janarit 2006 është paguar 2,500. Kështu dhe me punëtorët e tjerë.

    Nëse e zëmë se kemi 10,000 punëtorë dhe çdo punëtori i rritet paga njëherë në vit, atëherë do kesh 10,000 rreshta (rekorde) në tabelën [paga] për çdo vit.

    Nuk e kuptoj mirë shembullin tënd të tabelave, por nëse do të ruash historinë e pagës, atëherë baza nuk mund të jetë në tabelën e punëtorëve. Gjithashtu tek tabela [paga] nuk është nevoja për Nr.Autonumber pasi çelësi primar përbëhet nga lidhja e numrit (ID) të punëtorit dhe datës kur i është ndryshuar rroga; një punëtor nuk mund të paguhet dy rroga të ndryshme në një ditë.

    Shumica e databazave ruajnë vetëm pagën aktuale të punëtorit, prandaj nuk besoj se do gjesh shembuj që ruajnë historinë e pagës. Në këtë faqe jepet një shembull i ngjashëm, por përdor dy data në tabelën [paga] (data e fillimit dhe data e mbarimit). Kjo metodë mund të lehtësojë disi kërkesat, por kërkon më shumë hapësirë dhe vështirëson ruajtjen e pagës aktuale të punëstorit (nuk dihet data e mbarimi; i përket të ardhmes).
    Edi

Tema të Ngjashme

  1. Krijim i nje Databaze në Access
    Nga crackeri në forumin Arti i programimit
    Përgjigje: 7
    Postimi i Fundit: 24-04-2009, 05:26
  2. Dua të bëj një databazë, me Access apo SQL?
    Nga vetonlika në forumin Arti i programimit
    Përgjigje: 9
    Postimi i Fundit: 08-02-2009, 08:14
  3. Përgjigje: 1
    Postimi i Fundit: 30-10-2008, 09:33
  4. Arti i nxitjes së punëtorëve
    Nga Davius në forumin Ekonomi & biznes
    Përgjigje: 2
    Postimi i Fundit: 08-09-2006, 20:13

Regullat e Postimit

  • Ju nuk mund të hapni tema të reja.
  • Ju nuk mund të postoni në tema.
  • Ju nuk mund të bashkëngjitni skedarë.
  • Ju nuk mund të ndryshoni postimet tuaja.
  •