Close
Duke shfaqur rezultatin -9 deri 0 prej 10
  1. #1
    i/e regjistruar Maska e nince_tutes
    Anëtarësuar
    17-12-2007
    Postime
    216

    Exclamation Si të bëj Update vlerën e një Textbox-i në Access

    kam nje baze te dhenash. e kam ndertuar me keto tabelat qe do jane te bashkangjitura, por kam frike se mos nuk e kam konceptuar mire.

    Dua qe te paraqes disa transaksione parash, qe kryhen ne disa zyra te ndryshme (neper rrethe e kam fjalen), me pas te gjithe keto transaksione (ku ne nje transaksion duhet te permbaje derguesin e parave (Emer, Mbiemer, Vendlindje, Datelindje), vendin ku po i mbyll keto para (qyteti ku po i mbyll keto leke), data e dergeses, Vlera e derguar (ne euro), Kuris i kembimit Euro-Leke, Tarifa (qe do te jete 6 Euro per Vlera nen 100 Euro, 12 per Vlera nga 101-1000, dhe 20 per tarifa mbi 1000 Euro, si dhe shteti ku do dergohen keto para.

    Me pas do te perdoret nje Zarf_Virtual, brenda te cilit do te permbahen psh disa transaksione (psh ato qe kane te njejtin desinacion dhe ne te njejten date).

    Dua qe kur te jap vlerene e Eurove qe do dergohen, automatikisht te gjenerohet tarifa te gjenerohet automatikisht.

    Po databazen, mire e kam konceptuar, a do te kishte ndonje design me te mire?

    Flm shume, po ju pres... Para cuna!!!!!!!!!!!
    Skedarët e Bashkëngjitur Skedarët e Bashkëngjitur

  2. #2
    i/e regjistruar Maska e Borix
    Anëtarësuar
    17-01-2003
    Postime
    2,316
    Le t'i hedhim nje sy logjikes qe ka cuar ne ndertimin e entiteteve

    Se pari, ti ke nevoje te ruash te dhena rreth nje transaksioni. Eshte e pritshme qe ky objekt te kete atribute, prandaj lind natyrshem entiteti i pare TRANSAKSION.

    Meqenese transaksionet kryhen ne zyra te ndryshme, eshte e nevojshme te identifikohen zyrat, si dhe eshte e natyrshme te kryhen operacionet baze te databazes (insert, update, delete, select). Prandaj, kemi edhe nje entitet ZYRE.

    Transaksioni kryhet nga nje PERSON (ose DERGUES), per te cilin kerkojme te ruajme te dhena; prandaj, e shtojme edhe kete si entitet.

    Gjithashtu, nje ZARF permban nje ose me shume TRANSAKSIONE, prandaj eshte i nevojshem si entitet.

    Por, meqenese nje ZARF i caktuar ka nje (dhe vetem nje) DESTINACION, atehere eshte mire te kete edhen je tabele DESTINACION, sic e ke ndertuar.



    Dhene keto entitete baze qe nxorrem, percaktojme relationships nga menyra se si e ke shprehur me lart.

    1. Nje ZARF permban nje ose me shume TRANSAKSIONe. Gjithashtu, nje TRANSAKSION i dhene permbahet vetem nga nje ZARF (dhe kjo eshte logjike). Prandaj, marredhenia midis eniteteve ZARF dhe TRANSAKSION eshte 1:∞ perkatesisht.

    2. Nje PERSON ben nje ose me shume TRANSAKSIONe. Nje TRANSAKSION i caktuar behet vetem nga nje PERSON i dhene. Prandaj, marredhenia PERSON-TRANSAKSION eshte 1:∞.

    3. Nje ZYRE emeton nje ose me shume TRANSAKSIONe. Nje TRANSAKSION i dhene emetohet nga nje ZYRE e dhene (sepse nuk mund te emetohet nga dy zyra njekohesisht). Prandaj, marredhenia ZYRE-TRANSAKSION eshte 1:∞.

    4. Nje ZARF permban nje ose me shume TRANSAKSIONE. Prandaj, edhe kjo marredhenia eshte 1:∞.

    5. Ne nje DESTINACION te caktuar mund te shkojne nje ose me shume ZARFe. Dhe, nje ZARF i caktuar shkon vetem ne nje DESTINACION (sepse nuk mund te shkoje ne dy destinacione njekohesisht). Prandaj, marredhenia DESTINACION-ZARF eshte 1:∞.


    Deri ketu, je ne rregull me designin qe ke bere. Por, une do te keshilloja te shihje me me kujdes atributet. Si rregull i pergjithshem (nga eksperienca) per cdo ENTITET dhe atribut te perbere, te duhet te keshe nje fushe ENTITET_ID (per shembull: ZYRE_ID, TRANSAKSION_ID, ZARF_ID), i cili mund te jete thjesht nje COUNTER (ose AUTONUMBER ne Access).

    Pra, entitetit ZYRA (ose T_ZYRA_EMETUESE) shtoji kolonen Zyra_ID, e cila te jete primary key dhe autonumber. Ndersa fusha tjeter mund te jete Emri_Zyres. E njejta gje per te tjerat.

    Ndersa tek atributi i perbere DESTINACIONI, shto nje fushe autonumber Destinacion_ID pervec fushes Shteti.

    Ne fund, marredheniet jane te perfunduara dhe entitetet te lidhura logjikisht. Por, nese ke rregulla te tjera biznesi te pashprehura me larte, ose te paidentifikuara, eshte me mire ta studiosh fillimisht designin ne menyre logjike (duke bere teste logjike koherence). Une perdor gjithnje Vision, para se te kaloj ne projektim fizik.
    "The rule is perfect: in all matters of opinion our adversaries are insane." (M. Twain)

  3. #3
    i/e regjistruar Maska e Borix
    Anëtarësuar
    17-01-2003
    Postime
    2,316
    Edhe dicka ne lidhje me kursin e kembimit. Ajo qe une kam bere gjithnje eshte te shtoj dy tabela te reja ne databaze: MONEDHA (Monedhe_ID, Emri) dhe KURSI (Kursi_ID, Monedha_Baze_ID, Monedha_Term_ID, Vlera, Data).

    Tek tabela MONEDHA ruan monedhat (ALL, EUR, USD, GBP, etj). Tek tabela KURSI ruan kursin e kembimit te monedhes baze me monedhen term (psh. ALL-USD, ose ALL-LL) per datene e caktuar. Sic e kupton, lidhja MONEDHA-KURSI eshte 1-∞. Ndersa, lidhja e monedhes me tabelen tende TRANSAKSION, le te themi, eshte 1-∞: Pra nje TRANSAKSION ka vetem nje monedhe term, ndersa nje MONEDHE mund te jete e pranishme ne nje ose me shume TRANSAKSIONe...

    Per cdo paqartesi me thuaj...
    "The rule is perfect: in all matters of opinion our adversaries are insane." (M. Twain)

  4. #4
    i/e regjistruar Maska e Borix
    Anëtarësuar
    17-01-2003
    Postime
    2,316
    Me pas do te perdoret nje Zarf_Virtual, brenda te cilit do te permbahen psh disa transaksione (psh ato qe kane te njejtin desinacion dhe ne te njejten date).
    Nese zarfin e ke vetem virtual dhe nuk kerkon te kryesh asnje operacion pervec ndonje raportimi te thejshte, atehere te keshilloj ta heqesh si entitet, sepse shton ne prodhimin kartezian, gje qe mund te ndikoje ne performancen e klausave JOIN.

    Pra, tek tabela TRANSAKSION shto nje Destiancion_ID, qe merret nga fusha me te njejtin e emer e tabeles DESTINACION. Ne fund, grupoji transaksionet sipas destinacionit dhe u formua zarfi virtual. Pra, nuk shoh ndonje nevoje urgjente per nje entitet ZARF. Gjithesesi, nese te duhet per ndonje operacion gjate programit, atehere vendos vete...

    Mos harro kete rregull: Cdo entitet dhe atribut i perbere qe shprehet si entitet duhet te kete patjeter nje kolone e tille qe vlerat e kesaj kolone te identifikojne ne menyre unike rekordin e nje tabele si dhe te shfrytezohet neper marredhenie me tabelat e tjera. Nisur nga eksperienca e shume zhvillueseve eshte mire te perdoresh emrin e tabeles me nje _ID nga pas si fushe AutoNumber (ose COUNTER ne SQL Server), dhe te kujdesesh vete per unicitetin (gje qe te jep me shume kontroll mbi shtresat e sistemit qe zhvillon). Pra, sic i ke ato tabelat, shtoji nga nje fushe (aty ku mungon). Per shembull, tek DESTINACION, shoh qe ke vetem nje fushe qe permban emrat e shteteve. Eliminoje kete forme designi, sepse nuk eshte e normalizuar. Ne vend te kesaj, perdor nje fushe ID dhe me nje JOIN te thjeshte nxjerr emrin nga tabela...
    "The rule is perfect: in all matters of opinion our adversaries are insane." (M. Twain)

  5. #5
    i/e regjistruar Maska e nince_tutes
    Anëtarësuar
    17-12-2007
    Postime
    216
    Borix, si fillim te falenderoj. tani po te jap disa sqarime me shume lidhur me kete databaze.

    Se pari, ate tabelen e zarfit edhe mund ta heq fare, por qellimi im eshte ky, qe nepermjet nje zarfi (qe realisht do dergohet) te mund te futen brenda ose te permbaje disa transaksione, por kuptohet qe keto transaksionet te jene me te njejtin destinacion. Dua qe te identifikoj cdo transaksion pra, se me cilin zarf eshte derguar, (ndaj dhe e kam perdorur).

    dua te krijoj nje formular, i mbeshtetur kryesisht mbi tabelen ZARFI, dhe si subforme te jete te kete tabelen TRANSAKSIONI, ne menyre qe te filloj te vendos transaksionet (kuptohet, transaksionet me te njejtin destinacion). por ne momentin qe do klikoj mbi combobox-in e transaksioni (qe duhet te jete ne subform) te me paraqiten vetem ato transaksione qe nuk jane derguar (ndaj dhe une kam perdorur tek tabela TRANSAKSION nje fushe qe kontrollon nese eshte derguar me zarf ose jo, e tipit Yes/No).

    dhe mbasi te kem zgjedhur transaksionet qe dua t shtoj ne zarf, automatikisht ata te checkohen tek fusha jane derguar ne zarf, pra, pasi ta shtoj nje transaksion ne zarf, ai te mos me paraqitet me si transaksion i paderguar.

    dhe ne fund, lidhur me Monedhat, nuk e kam perdor tabelen tjeter per kursin, pasi gjate gjithe kohes do punoj vetem me EUR-LEK.

    NDIHMA JOTE ESHTE TEJET E VYER.

    flm dhe te tjereve. pres reply

  6. #6
    i/e regjistruar Maska e Borix
    Anëtarësuar
    17-01-2003
    Postime
    2,316
    Arsyeja qe entiteti ZARF nuk eshte urgjentisht i domosdoshem ka lidhje me operacionet e te dhenave. Po marr nje shembull:

    E zeme se ti fut te dhena ne tabelen TRANSACTION. Keto do te kene edhe nje DESTINACION (te percaktuar nepermjet fushes Destiancion_ID). Logjikisht, te duhet te fusesh po keto transaksione edhe ne tabelen ZARF, gje qe krijon nje operacion te perseritur dhe thyen rregullin e normalizimit... Pra, ke nje tabele me shume se sa c'kerkohet nga rregullat e biznesit. E zeme se tabelen transaksion e ke te mbushur me 100 rekorde, ku 90 te parat jane per ne SHBA dhe 10 te fundit per ne Itali. Atehere, edhe tabela ZARF do te permbaje 100 rekorde, por kete radhe te renditura sipas destinacionit - pra, nuk eshte se tabele ZARF kryen ndonje funksion fizik.

    Ne fakt, tabela ZARF eshte thjesht nje koncept per raportim - kur te vije koha, ti do te gruposh transaksionet sipas destinacionit, do te kryesh operacionet e duhura duke perdorur SQL ne query dhe do te nxjerresh rezultatet...
    "The rule is perfect: in all matters of opinion our adversaries are insane." (M. Twain)

  7. #7
    i/e regjistruar Maska e nince_tutes
    Anëtarësuar
    17-12-2007
    Postime
    216
    Borix, ok, supozojme se s'po e perdor fare tabelen Zarfi. por sic ta thashe dua te krijoj nje formular qe te krijoj nje zarf (qe tani po e quaj virtual) ose me mire nje shperndarje, brenda te ciles te perfshije disa transaksione me te njejtin destinacion.

    Atehere si duhet te veproje per te krijuar nje formulara per te bere SHPERNDARJEN e transaksioneve, nga ku une te zgjedh destinacionin qe do jete i njejte, dhe me pas te shtoj ID e transaksioneve qe dua qe ti SHPERNDAJ.

    Po ate fushen Tarifa e pe, si tja bej asaj, qe ne momentin qe fus te dhenen per Vlera (te mbushet ne varesi te saj automatikisht sipas ketij rregulli:
    6 per Vlera <=100
    12 per 100< Vlera <=1000
    dhe
    20 per Vlera > 1000

    Marrje, Respekte

  8. #8
    i/e regjistruar Maska e Borix
    Anëtarësuar
    17-01-2003
    Postime
    2,316
    Dakord, por SHPERNDARJA mund te jete front-end (nje forme ne VB, per shembull, ku paskesaj ti ekzekuton stored procedures ne baze te filtrimit qe ben user-i).

    Persa i perket fushes, duhet te me thuash ne c'gjuhe programimi po punon. Per momentin po supozoj VB ose VBA. Ne te dyja rastet, kemi te bejme me nje event. Kur perdoruesi ndryshon TextBox-in txtVlera, le ta quajme, atehere duhet te ekzekutohet eventi txtVlera_Change() [ose txtVlera_TextChanges() per VB.NET]. Pasi te besh validations (psh. If not IsNumeric(txtVlera.text) then exit sub), atehere do te ekzekutosh queryin. Brenda ne query presupozohet te kesh nje bllok if-i ose SELECT CASE ku te testosh per rastin e vleres. Nese eshte kjo qe kerkon, atehere po pate probleme me ndonje kod na thuaj.

    Roger that?
    "The rule is perfect: in all matters of opinion our adversaries are insane." (M. Twain)

  9. #9
    i/e regjistruar Maska e nince_tutes
    Anëtarësuar
    17-12-2007
    Postime
    216
    Borix, un po perdor vetem accessin, dhe kuptohet qe si gjuhe vetem vba duhet te perdor, Problemi im eshte se me vba scriptet nuk jam shume mire, ndaj dhe dua qe ta bej kete gje me sa me pak kode, \

    A ka ndonje zgjidhje?

  10. #10
    i/e regjistruar Maska e Borix
    Anëtarësuar
    17-01-2003
    Postime
    2,316
    Ok, po te shpjegoj c'kam modifikuar tek databaza jote (sic eshte) ne lidhje me tarifen.

    Se pari, meqenese tarifat jane vlera qe te nesermen ndryshojne (aq me teper intervalet), krijova nje tabele TARIFA me atributet Tarife_ID (autonumber), KufiriPoshtem (number), KufiriSiperm (number), Tarifa (number), Aktive (Yes/No), DataEfektive, DateMbarimi. Fusha Aktive tregon nese Tarifa eshte ende efektive (pra, a aplikohet tek hyrjet e reja), apo jo. Fushat e datave jane te redesishme per arsye raportimesh financiare (per shembull, per te gjetur se cilat tarifa jane aplikuar tek nje set i dhene transaksionesh ne nje interval te dhene kohor).

    Vlera KufiriPoshtem eshte e qarte. Vlera KufiriSiperm mund te jete deri ne pafundesi (psh. kur thua >1000), por meqenese pafundesia nuk eshte diskrete, me konvencion marrim vleren -1. Pra, intervali [1000, -1) do te thote ">1000". Me poshte do te tregoj se si trajtohet "-1".

    Paskesaj, meqenese nje tarife is perket nje ose me shume transaksioni, shtova kolonene Tarife_ID tek tabela TRANSACTION, ne menyre qe te dime se cila tarife aplikohet tek transaksioni.

    Paskesaj, krijova nje PARAMETER QUERY, qe eshte si nje stored procedure e SQL Server-it, me emrin sp_MerrTarifen (Vlera). Pra, dhene Vlera, gjej tarifen ne baze te intervalit ku bie kjo vlere. Kodi per kete query eshte ky:

    Kodi:
    PARAMETERS Vlera IEEEDouble;
    SELECT Tarife_ID, Tarifa
    FROM TARIFA
    WHERE Vlera>=KufiriPoshtem 
                 AND Vlera<IIF(KufiriSiperm=-1, Vlera+1, KufiriSiperm)
                 AND Aktive = TRUE;
    Pra, shko tek Queries, kliko tek butoni Design, pastaj tek menuja View, kliko mbi SQL View. Aty krijohet nje query SQL.

    Tani, tek procedura e mesiperme na intereson te zgjedhim tarifen dhene vlera. Sic shihet tek blloku WHERE, Vlera krahasohet me Kufirin e Poshtem, pastaj krahasohet me kufirin e siperm. Por, ne rast se nuk ka kufi te siperm (pra, ne rastin "-1"), atehere si kufi te siperm bej numrin Vlera+1, ne menyre qe te na rikthehet tarifa perkatese. Pra, nese themi qe per vlerat mbi 1000 tarifa eshte 20, atehere ne kete rast vlera>=1000 dhe vlera<1001. Ne kete menyre, na kthehet tarifa 20. Gjithesesi, kodi behet me i qarte me prova te ndryshme.

    Tani, te kam krijuar dhe nje forme ne Wizard mode nga tabela TRANSACTION. Forma quhet "T_TRANSAKSIONI". Tani, hapa formen ne Design Mode dhe modifikova kodin VBA si me poshte.

    Kodi:
    Private Sub Vlera_Exit(Cancel As Integer)
       Tarife = MerrTarifen(CDbl(Vlera.Text))
       
       Tarifa.Locked = False
       Tarifa.SetFocus
       Tarifa.Text = Tarife
       Tarifa.Locked = True
       
       Tarife_ID.Locked = False
       Tarife_ID.SetFocus
       Tarife_ID.Text = TarifeID
       Tarife_ID.Locked = True
    End Sub
    
    Private Sub Vlera_LostFocus()
       If Vlera.Text = vbNullString Or Vlera.Text = "" Then
          Vlera.Text = 0.1
       End If
       
       Tarife = MerrTarifen(CDbl(Vlera.Text))
       
    End Sub
    Sa here qe perdoruesi futet tek textbox-i Vlera dhe ndryshon nje vlere, ekzekutohen dy eventet e mesiperme. Funksioni MerrTarifen() eshte vene Public ne nje module, si me poshte:

    Kodi:
    Global Tarife As Double, TarifeID As Integer
    
    Public Function MerrTarifen(vl As Double) As Double
       Dim stProc As QueryDef, rs As Recordset, fld As New Field, db As Database
       
       Set db = CurrentDb
             
       Set stProc = db.QueryDefs("sp_MerrTarifen")
       stProc.Parameters("Vlera") = vl
               
       For Each fld In stProc.OpenRecordset.Fields
          If fld.Name = "Tarifa" Then
                MerrTarifen = fld.Value
          Else
                TarifeID = fld.Value
          End If
       Next fld
    
       Set rs = Nothing
       Set db = Nothing
       
    End Function
    Pra, sa here largohesh nga textboxi "Vlera", te ekzekutohet funksioni MerrTarifen(Vlera) dhe variablat globale Tarife dhe TarifeID ruajne perkatesisht tarifen dhe tarife_id e kthyer nga query sp_MerrTarifen. Paskesaj, keto vlera ruhen ne textbox-et perkatese ne forme.

    Sic mund ta vesh re, textbox-i Tarife_ID eshte krijuar nga Wizard nga tabela TRANSACTION, por textbox-in Tarifa e shtova une sa per efekt paraqitje te tarifes. Ne te vertete, ne tabelen TRANSACTION nuk ruhet vlera e tarifes, por Tarife_ID.


    Gjithesesi, po te bashkangjis databazen me ndryshimet e mesiperme. Hidhi nje sy. Bej nje prove: shto nje rekord te ri duke perdorur formen T_Transaksioni dhe shih se c'ndodh me tej. Me thuaj per ndonje gje, gabim, etj.
    Skedarët e Bashkëngjitur Skedarët e Bashkëngjitur
    "The rule is perfect: in all matters of opinion our adversaries are insane." (M. Twain)

Tema të Ngjashme

  1. Mediat Ne Kosove
    Nga ARIANI_TB në forumin Aktualitete shoqërore
    Përgjigje: 2
    Postimi i Fundit: 26-03-2006, 19:08
  2. Microsoft Security UpDate!
    Nga Ardi_Pg_ID në forumin Lajme nga informatika
    Përgjigje: 1
    Postimi i Fundit: 15-02-2006, 06:50
  3. Projekti amerikan për Lindjen e Mesme të Madhe
    Nga ORIONI në forumin Problemet ndërkombëtare
    Përgjigje: 54
    Postimi i Fundit: 26-01-2005, 11:20

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.
  •