Opzet van een registratie in database

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Ik trek maar even de stoute schoenen aan, na diverse pogingen
om er iets van te maken.
Mijn Database moet worden uitgebreid met een uren-item.
Bij een persoon worden tijden bijgehouden wanneer
deze aanwezig zijn in een week.
Dus een datum, aankomsttijd en vertrektijd, totaaluren.
En zo een week lang.
De totaal uren van deze dag kunnen worden onderverdeeld in dagdelen.
Dus van 09:00 tot 17:00 uur = 8 uur = totaal uren
Deze uren kunnen worden onderverdeeld in
Begeleid = 2 uur
Individueel begeleid = 2 uur
Kort verblijf = 4
Wat ik in VB.net heb is een form ( zie bijgevoegde foto)
Bij selecteren van een weeknummer worden de dagen
zichtbaar gemaakt met de data erachter.
Nu wil ik dit allemaal in opslaan in een database.
Maar als ik zo zie zal de DB heel snel vollopen.

Ik heb een:
Tabel Personalia
Velden: PersID, UrenID, Naam enz.

Tabel Uren
UrenID, PersID, Jaar, Weeknummer, Datum1, TijdVanTot, totaalUren, Begegeleid, Individueel, KortVerblijf, Datum2 enz
tot en met Datum7

Is er een mogelijkheid om één en ander zodanig te maken, dat de DB niet veel vol loopt,
door gebruik te maken van meerdere tabellen mbt uren dmv koppel tabellen o.i.d.
Ik mis daar even de creativiteit voor,voor een Insert commando
 

Bijlagen

  • InvoerUren.jpg
    InvoerUren.jpg
    57,5 KB · Weergaven: 121
Je tabel Uren zou een stuk slimmer kunnen. Om te beginnen wil je een enorme berg dataredundantie toevoegen, wat ik niet zou doen. Verder voeg je velden toe die berekend kunnen worden uit een ander gegeven, en dat doe je niet in een genormaliseerde database. Dus ik zou de tabel Uren zo maken:
Tabel Uren
UrenID, PersID, DatumIn, TijdVan, TijdTot, Soort
Soort is dan een keuzelijst met Begeleid, Individueel en Kort verblijf.
Overigens loopt een db niet zo snel vol met dit soort data :)
 
Dank voor je antwoord.
Dat Soort kan ik dat ook aanpassen naar Begeleid, Individueeel, KortVerblijf
Omdat VB uitrekent de tijd tussen Tijdvan - TijdTot. Deze tijd moet overeenkomen
met het aantal uren die dag wat besteed is aan Begeleid - Individueel - KortVerblijf

Dus dan krijg ik zoiets als:
UrenID, PersID, DatumIn, TijdVan, TijdTot, TotaalTijd, Begeleiding, Individueel, KortVerblijf.

Met dank
 
Jouw keuze, maar ik zou mijn opzet gebruiken. Dus geen extra overbodige velden, zoals je nu wel hebt.
 
Nu blijkt dat ik muurvast zit.
Als ik alle velden heb gevuld en ik wil inserten
De 1e Insert gaat goed.
dan krijg ik bij de 2e insert (DI) de melding dat de SelectCommand.(Zie bijlage)

Wat ik doe is:
Wanneer de uren zijn ingevuld, moet hij alles inserten.
Hij insert dan elke dag opnieuw. Dus Maandag, Dinsdag, enz.
Behalve de dagen dat men niet aanwezig was, daar waar niets is ingevuld.

Mogelijk dat iemand een oplossing weet, dan wel hoe doe anderen dit dan?.
Code:
Private Sub InsertUren()

        Dim strSqlUrenInsert As String
        strSqlUrenInsert = ""
        If txtUrenMA.Text <> "" Then	'1e insert
            strSqlUrenInsert = "INSERT INTO UrenClient (PersID, Jaar, Weeknr, Uren, DatumIn, TijdVan, TijdTot, Groep, Individueel, KortVerblijf ) VALUES ('" & PersID & _
            "','" & Year(Now) & "','" & cboWeeknr.Text & "','" & txtUrenMA.Text & "','" & lblDatumMA.Text & "','" & mskAankomst1.Text & "','" & mskVertrek1.Text & "','" & txtGroepMA.Text & "','" & txtIndMA.Text & "','" & txtKVMA.Text & "')"
            InsertUrenClienten(strSqlUrenInsert)
        End If
        If txtUrenDI.Text <> "" Then	'2e insert
            strSqlUrenInsert = ""
            strSqlUrenInsert = "INSERT INTO UrenClient (PersID, Jaar, Weeknr, Uren, DatumIn, TijdVan, TijdTot, Groep, Individueel, KortVerblijf ) VALUES ('" & PersID & _
            "','" & Year(Now) & "','" & cboWeeknr.Text & "','" & txtUrenDI.Text & "','" & lblDatumDI.Text & "','" & mskAankomst2.Text & "','" & mskVertrek2.Text & "','" & txtGroepDI.Text & "','" & txtIndDI.Text & "','" & txtKVDI.Text & "')"
            InsertUrenClienten(strSqlUrenInsert)
        End If
end sub

Code:
Private Sub InsertUrenClienten(ByVal strSqlUrenInsert As String)
        Try
            Conn.Open()
            Dim cmd As New OleDb.OleDbCommand(strSqlUrenInsert, Conn)
            Dim cb As New OleDb.OleDbCommandBuilder(da)
            da.InsertCommand = cb.GetInsertCommand ' Als INSERT commando
            da = New OleDb.OleDbDataAdapter(strSqlUrenInsert, Conn)
            cmd.ExecuteNonQuery()

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Invoer Uren Client", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally

            Conn.Close()
            'da.Dispose()
        End Try
    End Sub
Edit:
Octafish
Dit is even probeersel van mijn kant mbt jou benoemde velden.

UrenID, PersID, DatumIn, TijdVan, TijdTot, Soort
 

Bijlagen

  • Database1.jpg
    Database1.jpg
    19,1 KB · Weergaven: 67
Zonder de db erbij is er niet zoveel definitiefs van te zeggen, maar als ik je code zie, dan is je db niet of erg slecht genormaliseerd. Daar zou ik eerst maar eens wat aan doen. En wat is dit?
Code:
        InsertUrenClienten (strSqlUrenInsert)
Een functie? Waarom zou je een functie maken voor één regel code?
Code:
        CurrentDb.Execute strSqlUrenInsert, dbFailOnError
 
Gelet op jouw eerdere woorden:
- De website heet Help Mij, niet Bouw Voor Mij Je zult zelf een opzetje moeten bedenken,
want wij kunnen zo never nooit niet goed zien wat je nu wilt, wat je wilt vastleggen,
wat je er uit wilt hebben etc. Heb je geen benul van Access, dan is het de vraag of
je het zelf moet gaan bouwen; ik neem aan dat je je auto ook in een showroom hebt
gekocht en niet zelf hebt gebouwd. Tenzij je natuurlijk een automonteur bent, dan
kan het nog een leuke uitdaging zijn. -

Heb ik de stoute schoen maar weer aangetrokken en de DB bijgevoegd.
Ben al 10 jaar gepensioneerd en mijn vraagbaak en leermeester is er ook niet meer,
vandaar dat ik hier wat meer probeer op te steken.
 

Bijlagen

En daarbij helpen we graag. Je hebt de formulieren er niet bijgedaan. In de tabel UrenClient kunnen dus de velden Jaar, Week en Uren weg, want die kun je herleiden uit de Datum, en TijdVan en TijdTot. Dus die heb ik er alvast uitgegooid :).
 
Ik gebruik de DB voor een VB applicatie. Of zie ik iets over het hoofd?
De items Groep-Individueel-Kortverblijf moeten wel opgeslagen worden omdat
men bij wil houden hoeveel uur een persoon één van die item heb gedaan.
 
Laatst bewerkt:
Ook dat zou ik toch echt anders doen. Als een medewerker voor 3 activiteiten uren boekt, dan krijg je 3 records. En de activiteit zelf leg je vast met een veld [Soort werkzaamheden], wat dan een keuzelijst is. Probeer in ieder geval je database te normaliseren, want dat bespaart je uiteindelijk een hoop ellende.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan