# Shkenca > Informatikë dhe Internet > Arti i programimit >  Access: Databazë për shitje/blerje në dyqan

## Delilah

Jam duke punuar ne nje databaze ne access, jam duke bere nje program per shitje.   Kam nje problem:

E kam tabelen e mallit ne te cilen e kam edhe rekordin sasia e mallit. Tash kam bere "form" shitja. Dua qe te kjo forme te kete nje fushe ne te cilen shkruhet sasia e artikullit te shitur. 
Pastaj dua qe kur ti jap te dhena kesaj fushe, automatikisht te zbritet sasia e cila eshte e shenuar te tabela malli.
GJithashtu te forma tjeter me emrin furnizimi i mallit, kur te fusha sasia futet nje sasi, edhe kjo sasi te shtohet te tabela e mallit ne rekordin sasia.

Ju lutem per ndihme sa  me pare, pasi kam bllokuar te kjo....

----------


## Uke Topalli

Cfar mjetesh (veglash) je duke perdor per te krijuar programin/interface (psh vetem MS Access, apo VS)?

----------


## edspace

Kam bashkëngjitur një DB të thjeshtë si shembull: artikujt.zip. Permban një tabelë për artikujt dhe një formular për shitje e furnizim. Kur ndryshon sasinë e shitjes ose furnizimit, ndryshon edhe sasia e gjendjes. 

Fushat e sasisë kanë pak kod që ekzekutohet vetvetiu për ngjarjen _AfterUpdate_, dmth pasi i ndryshon.   



```
Private Sub sasia_e_shitur_AfterUpdate()

    If CDec(Me.sasia_e_shitur) < 1 Then
        MsgBox "Duhet te jete shitur te pakten 1 artikull"
        Exit Sub
    End If
    
    If CDec(Me.sasia_e_shitur) > Me.sasia_gjendje Then
        MsgBox "Nuk mund te jene shitur me shume sec jane ne gjendje"
        Exit Sub
    End If
        
    
    Me!sasia_gjendje = Me!sasia_gjendje - Me!sasia_e_shitur
    Me!sasia_e_shitur = 0

End Sub


Private Sub sasia_furnizuar_AfterUpdate()
    If CDec(Me.sasia_furnizuar) > 0 Then
        Me!sasia_gjendje = Me!sasia_gjendje + Me!sasia_furnizuar
        Me!sasia_furnizuar = 0
    End If
End Sub
```

----------


## Uke Topalli

dizajn  te mire. Dizajni i mire fillon me paracaktimin e kerkesave te cilat nje program/baze a shenimeve duhet ti plotesoj. Ne rastet ale e moduleve per 
kontroll te mallrave (inventory control) kerkesa fundamentale eshte: 

-cilat mallra i kam dhe sa kam mallra ne depo/dyqan

mirepo te krijosh modulin i cili e permbush vetem kete pyetje eshte e kote pasi qe ngusht eshte jane te lidhura edhe keto:

-kush me furnizon, sa me ka furnizuar gjat nje kohe ndonje prej furnizuesve ose te gjithe

-sa kam shitje te mallit te caktuar, sa kam shitje ne nje periudhe kohore

-kush jane bleresit e mi, sa mall ka blere ndonje prej bleresve te mi ne ndonje periudhe kohore

Ka edhe shume kerkesa tjera, por keto me larte mjaftojne per te drejtuar ne procesin e dizajnit te bazes se shenimeve. Pra nga keto mund te shohesh se ke nevoj per te pakten keto tabela:
- Furnizuesit (te pakten emri, adresa, )
- Porosite e mallit kryesore (data,furnizuesi, numri i porosise, cmimi total, pagesa)
- Porosite e mallit detale (numri i porosise, artikulli i porositur, sasia e porositur, sasia a pranuar, cmimi i artikullit)
Mvaresisht nga tipi i dyqanit/depos ke dy varianta
a) dyqani me pakice
-Regjistri i shitjes (data, artikulli, sasia, cmimi)
b) dyqani me shumice
-Bleresit (emri, adresa)
-Regjistri kryesor i shitjes (bleresi, data, numri i porosise se bleresit,cmimi total, pagesa, numri i shitjes)
-Regjistri detal i shitjes (numri i shitjes, artikulli, sasia e porositur, sasia e derguar, cmimi i artikullit)

-Lista e artikujve (artikulli, cmimi furnizues, furnizuesi i zakonshem, cmimi shites)
-Niveli i artikujve (artikulli, niveli i tanishem, te porositura, te shitura)

Keta tabela sipas mendimit tim jane minimumi per nje modul te tille, dhe te mundesojne qe te krijosh "query" dhe raporte te dobishme per analizen dhe
drejtimin e punes

----------


## Uke Topalli

Nga numri i shfrytezuesve dhe rrjeta do te zgjedhes bazen e shenimeve adekuate (Acces, MS SQL, MySQL, DB2 etj). Le te sypozojme se Access eshte e mjaftueshme.
Eshte e preferueshme qe logjiken ta ndash nga baza e shenimeve, ne kete menyre,
baza e shenimeve e ben punen e vet primare futjen dhe leximin e shenimeve, ndersa 
programi e ben perpunimin a shenimeve. Se cfar gjuhe programuese do te zgjedhesh
eshte ceshtje e preferences personale. MS ka edicione falas te VB, C# etj. besoj se
thirren express edition. Ne program i krijon te pakten keto dritare/forma:
- Moduli i kontrollit te depos, tipi MDI (multiple document interface)
me menyne (Mirembajtja/Artikujve,Furnizuesve,Bleresve-T
ransakcionet/Porosite/Shitjet-Raportet/Niveli i artikujve,Porosite e papranuara, Shitjet e paderguara etj)

-Artikujt tipi SDI (ben mirembajtjen/futjen e shenimeve)
-Furnizuesit
-Bleresit
 e keshtu me radhe

Sipas mendimit tim VBA (te cilen mund ta perdoresh ne kuader te Access) nuk te ofron mjaft flexibilitet kur hap me shum se nje tabele (psh forma transakcionet
porosite i caset ketyre tabelave: Furnizuesit, Porosite kryesore, Porosite detaje,
lista e artikujve, dhe niveli i artikujve Prandaj te kisha preferuar VB.NET

----------


## Delilah

Flm shum Edi, le te mbyllet kjo teme, u kry puna. Vetem kisha edhe nje pyetje:
si mund te behet nje databaze ne access, qe kur tia jap dikuj tjeter, te mos ket mundesi te ket qasje ne tabela, query, forma dhe raporte direkt, por vetem prej formes kryesore (switchboard) . Pra si me i fsheh keto te tjerat. edhe nje here faleminderit per pergjigjen e sakte.

----------


## edspace

Tek menyja _tools > startup_ mund të shfaqësh/fshehësh dritaret, menytë, dhe shiritët e veglave. 




Ki kujdes se kjo vetëm sa fsheh dritaret dhe veglat për përdoruesit e thjeshtë; mos kujto se databaza është e sigurtë sepse mjafton të mbash shtypur butonin shift kur hap databazën për të shfaqur ndërfaqen e plotë. 

Nëse nuk do që përdoruesi të ndryshojë formularët, raportet ose kodin, duhet ta kthesh databazën në formatin MDE. Në këtë format përdoruesit mund të ndryshojnë vetëm tabelat, kërkesat, ose makrot.

Për ta kthyer databazën në formatin MDE duhet të zgjedhësh menynë  _Tools > Database Utilities > Make MDE File_. Ky është hapi i fundit që duhet të bësh, pasi ke përfunduar punë me databazën. Databazën MDE ua jep përdoruesve, ndërsa databazën origjinale në formatin *MDB duhet ta ruash* në një vend të sigurtë që të mund të bësh ndryshime në të ardhmen. MDB mund të kthehet në MDE, por MDE nuk e kthen dot mbrapsh në MDB. 

Kur të bësh ndryshime të MDB, duhet të importosh të gjitha tabelat nga MDE dhe pastaj të krijosh një MDE të re. 

Për ta qartësuar:
1. Krijo MDB 
2. Ktheje MDB në MDE 
3. Ruaje MDB për vete dhe jepi klientit MDE
4. Klienti përdor databazën; mbush tabelat
5. Klienti kërkon të bësh ndryshime të formularëve ose raporteve
6. Ndrysho databazën MDB të ruajtur në hapin 3

7. Importo tabelat nga MDE e klientit në MDB e re
8. Ktheje MDB e re në MDE

ose

7. Ktheje MDB e re në MDE
8. Importo tabelat nga MDE e vjetër në MDE e re

9. Përsërit hapat 3-8

----------


## Delilah

Edi je i madh!! flm edhe per pergjigjen e dyte, por kam edhe nje pyetje nese ke mundesi. Me fal se ndoshta e teprova pak.

Kjo me vjen pak me e komplikuar:

E kam forme "shitja".Ne te e kam te vendosur mallin. Dua qe kur te shes mall, te klikoj ne ate mall,(p.sh. prej ne combo box) dhe ky mall i shitur te del psh. ne anen e djathte te te njejtes forme. dmth, nese klientit ka blere me shume se nje mall, ateher te gjtha mallet qe te zgjidhen si te shitur, te dalin ne anen e djathte te formes (ose me subform), ku edhe te mblidhet dhe ne fund te tyre te tregohet shuma  totale e tyre. Ky eshte mendimi im, po nuk e di nese mund te funksionon ashtu, pasi nuk kam shum njohuri ne access. Prandaj nese ti ke ndonje ide tjeter, te isha lutur te me tregosh se si mund te funksionon nje forme per shitje, ne nje menyre te  ngjashme me kete. Flm dhe nje here dhe me fal. Te jam shum mirenjohes.

pershendetje

----------


## edspace

Krijova një databazë tjetër si shembull që kryen atë që kërkove. 



Në të majtë janë të gjithë artikujt e dyqanit. Në të djathtë është fatura me numrin, emrin e klientit, datën kur është krijuar, artikujt e blerë dhe shumën e tyre totale. 

Për të shtuar artikuj të ri në faturë mund të klikosh dy herë mbi listën e artikujve të dyqanit, ose mund të përdorësh butonin [ Bli >> ]. Po ashtu, për t'i hequr, mund të klikosh dy herë mbi artikullin e faturës, ose mund të përdorësh butonin [ << hiq ]. 

Vër re se kur krijon një faturë të re, duhet të kesh futur të paktën emrin e klientit në mënyrë që të ruhet fatura. 


Si është ndërtuar databaza? 

Në fillim krijova tre tabela: një për artikujt, një për faturat, dhe një që bën lidhjen e artikujve me faturat. 



Një faturë mund të ketë disa artikuj, por dhe i njëjti artikull mund të jetë në disa fatura. 

Pastaj krijova formularin dyqani. Burimi i formularit është tabela fatura. Artikujt i shfaqim në një listë me tre kolona: (1) artikulli_id,  (2) artikulli, (3) çmimi.  Kolona e parë është fshehur por është e rëndësishme sepse nëpërmjet asaj mund të identifikojmë artikullin që ka zgjedhur përdoruesi. Kur shtojmë një artikull në faturë, ekzekutohet kërkesa bli_artikul" e cila përdor vlerën artikulli_id dhe fatura_id për të shtuar një rekord të ri në tabelën fatura_me_artikuj.

Në të njëjtën mënyrë, shporta ka tre kolona: (1) id nga tabela fatura_me_artikuj,  (2) artikulli (3) çmimi.  Kolona e parë është fshehur por kur përdoruesi heq një artikull nga shporta, ekzekutohet kërkesa hiq_artikull e cila përdor vlerën id për të  fshirë rekodrin në tabelën fatura_me_artikuj. Nëse nuk do kishim këtë id, atëherë nuk do mund të hiqnim dot vetëm një prej artikujve, por do hiqnim të gjithë artikujt me një artikull_id të caktuar. 

Ky është kodi VBA në formular që ekzekutohet kur klikon dy herë mbi një nga listat ose kur klikon butonat [bli >>] dhe [<< hiq]. Vër re se pas çdo ndryshimi që bën përdoruesi, duhet të azhurnojmë listën e shportës dhe atë të shumës totale. 



```
Option Compare Database

Private Sub bli_btn_Click()
    dyqani_DblClick 0
End Sub

Private Sub dyqani_DblClick(Cancel As Integer)
    DoCmd.SetWarnings False         ' paafteso paralajmerimet
    
    If Me.NewRecord Then            ' ruaj faturen se po blejme artikull
        RunCommand acCmdSaveRecord
        Me.klienti.SetFocus
    End If
    
    If Not Me.NewRecord Then        ' nese fatura eshte ruajtur
        ' shto artikullin e ri ne shporte
        DoCmd.OpenQuery "bli_artikull", acViewNormal, acAdd
        Me.shporta.Requery          ' azhurno shporten
        Me.shporta_total.Requery    ' azhurno totalin e shportes
    End If
    
    DoCmd.SetWarnings True          ' afteso paralajmerimet
End Sub


Private Sub Form_Current()       ' azhurno shporten kur ndryshojme faturat
    Me.shporta.Requery
    Me.shporta_total.Requery
End Sub

Private Sub hiq_btn_Click()
    shporta_DblClick 0
End Sub

Private Sub shporta_DblClick(Cancel As Integer)
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "hiq_artikull", acViewNormal, acEdit
    Me.shporta.Requery
    Me.shporta_total.Requery
    DoCmd.SetWarnings True
End Sub
```


*Shkarko databazën:* dyqani.zip

----------


## Delilah

Edi flm shum per pergjigjen, por ka nje problem pasi ajo forme nuk me pershtatet shum pasi kam me shum mall. Keshtu qe nuk mundem me e gjet mallin qe dua me e shit. Un e kam provu shitjen me e be ne nje forme me subforme, ashtu si ne figuren me poshte. Tash prej te emri (combo box) mundem me e zgjedh mallin I cili lidhet me te gjith fushat, pra pershtatet si ne tabele. Te njejten gje du ta bej edhe prej te shifra, por nuk me funksionon. Pra du qe ta zgjedh mallin edhe sipas shifres edhe sipas emrit.
   Ndersa te sasia du qe ta fus sasine e shitur, e cila e minuson sasine e pergjithshme (prandaj e kerkova edhe ne pyetjen e pare ne kete teme), dhe vlera te llogariten sipas sasise se shitur dhe cmimit. Kjo nuk funksionon pasi sasia e futur e mer menjeher vleren 0, dhe shuma nuk mund te behet.

----------


## Delilah



----------


## Uke Topalli

Ja nje form i krijuar me VB me access database. A kerkon keshtu dicka?

----------


## Uke Topalli

shtypjen a pulles "Add"


```
Dim dr As ProjectsDataSet.ProjectsDetRow
        Dim rtCost As Double = 0
        Dim rtPrice As Double = 0

        dr = ProjectsDataSet.ProjectsDet.NewRow()
        dr.IDProjects = DuQuoteM.ProjID
        dr.ItemCode = ComboBox1.Text
        dr.ItemDescription = AccDescriptionTextBox.Text
        dr.ItemUOM = AccUOMTextBox.Text
        dr.ItemCost = AccPriceTextBox.Text
        dr.ItemMarkUp = DuQuoteM.C_Company.C_DefMargin
        dr.ItemQTY = QTYTextBox.Text
        dr.ItemPrice = dr.ItemCost / (1 - (dr.ItemMarkUp / 100))
        dr.ItemShow = True
        ProjectsDataSet.ProjectsDet.AddProjectsDetRow(dr)
        Me.ProjectsDetTableAdapter.Update(Me.ProjectsDataSet.ProjectsDet)
        Me.ProjectsDetTableAdapter.Fill(Me.ProjectsDataSet.ProjectsDet)
        Dim RIndex As Integer
        For RIndex = 0 To ProjectsDetDataGridView.RowCount - 1
            ProjectsDetDataGridView.Item(9, RIndex).Value = ProjectsDetDataGridView.Item(8, RIndex).Value * ProjectsDetDataGridView.Item(5, RIndex).Value
            rtCost = rtCost + (ProjectsDetDataGridView.Item(5, RIndex).Value * ProjectsDetDataGridView.Item(6, RIndex).Value)
            rtPrice = rtPrice + (ProjectsDetDataGridView.Item(5, RIndex).Value * ProjectsDetDataGridView.Item(8, RIndex).Value)
        Next
        dr = Nothing
        txtRTCost.Text = rtCost.ToString("C")
        txtRTPrice.Text = rtPrice.ToString("C")
        If SA > 0 Then
            txtCostsqft.Text = (rtCost / SA).ToString("C")
            txtPricesqft.Text = (rtPrice / SA).ToString("C")
        Else
            txtCostsqft.Text = 0
            txtPricesqft.Text = 0
        End If
        QTYTextBox.Text = 0
```

----------


## Delilah

keshtu dicka, megjithse nuk duket shum paster fotografia. dhe nese mundesh nese ke ndonji skedar, si shembull ma lesho qe ta shoh, se nuk eshte shum e qarte keshtu, dhe nuk e di se si funksionon kjo.

   Megjithate flm

----------


## Uke Topalli

ta kryej nje proto tip me bazen e Ed-it (te plotesuar) dhe me nje frontend ne VB.net
Te kisha propozu me e shkarku VS2005 falas nga microsofti per te perfunduar projektin. Faqja per shkarkim: http://msdn.microsoft.com/vstudio/ex...s/default.aspx

----------


## Delilah

Uke, une du me bo nji Databaze per vete, dhe e kam mesu accessin vetem per te krijuar nje databaze te tille. keshtu qe nuk i kam shume te njohura keta veglat tjera te lidhura me databazat. Pra  nuk e di se per cfar mund te me sherben VS2005. Nese ke mundesi shpjegoma pak kete.

----------


## Uke Topalli

Sic kam thene me larte baza e shenimeve eshte e dobishme per ti ruajtur shenimet, ndersa per manipulimin e tyre perdoren programet te cilat i shkruan ti vet. Ne kete menyre ke me shum flexibilitet ne perpunimin e shenimeve si dhe ne paraqitjen e tyre. Pasi qe ti je i njohtuar me access ku perdoret VBA (e cila eshte pjese e vogel e VB) une te kisha propozuar te kalosh ne VB.NET ku do te kesh mundesi me te medha, dhe me te lehta te programimit. VS2005 eshte nje IDE (integrated development environment) per programim. Pra mjet me te cilin mund te krijosh programe. Gati e kam te kryer prototipin keshtu qe pas dy oreve do ta postoj ketu. Prototipin mundesh me e instalu ne kompjuter per me e pa se si funksionon, ndersa kodin burimor (te cilin poashtu do ta postoj) mundesh me e perdor per ta zgjeruar programin me ane te VS2005

----------


## Uke Topalli

Eshte kryer dhe mund te zbritet nga:
http://rapidshare.com/files/24035799/prototipi.zip.html
kodi burimor mund te zbritet nga:
http://rapidshare.com/files/24036431/Jetmiri.zip.html

----------


## Delilah

Uke flm por mua me teper me konvenon kjo forma e Edspace por me disa ndryshime. Nese dikush mund te me ndihmon:

 1. Kur te shes mall ( nxjer ne anen e majte)  sasia e pergjithshme te minusohet 

 2. Pasi kam me shume lloj se 200 artikuj, me nevoitet qe te kete nji mundesi per te kerkuar mallin sipas emrit dhe sipas shifres(pra te artikujt ne dyqan duhet te futet edhe shifra e mallit) per te gjetur mallin.

----------


## Delilah

Ju lutem a din dikush te me ndihmoje per te zgjidhur kete probem , si ne figuren me larte ????!!!!  Nese dikush e din se nuk mund te funksionije ashtu si them une, le te me tregon!!

----------

