Jag håller på med ett program som skall registrera ett lager. Man skall både kunna lägga till i lagret genom inköp och tabort genom försäljning. När du registrerar ett inköp läggs datum, sort, antal kg och utbetalt in i lagertab. När du sedan skall sälja en vara så skall programet ta bort den vara som stämmer in på beställningen (sort), den varan med äldst inköpsdatum skall alltid tas bort först. Mitt program funkar utom på en punkt, företaget kan ha flera köptillfällen på samma vara och samma dag. Som det är nu så tar programet bort alla där datumet och varan matchar. Tycker du krånglar till det. Testa att istället öppna och loppa igenom recordsetet: Säger du att det är lättare med negativa värden så är jag intresserad av hur man gör det. Jag håller på att lära mig att databasprogramera så det finns mycket som kan göras bättre i mitt program. Opps, slarvfel. Skall vara: Ja det felet borde jag kunnat ha sett själv :). Jag hittade något skumt. Jag har gått igenom koden och kan inte fatta varför programmet gör som det gör. Testa med en update. Kanske avbryter redigeringen när man stänger recordsetet. Thats it. Tack!! Nu tror jag att detta skall vara sista frågan om det här. vbcrlf är carrige return line feed, eller nått sånt, den radbryter texten och placerar markören längst till vänster igen iaf.Lager
Så om jag först köper in 5 kg tomater och sedan samma dag ytterligare 5. Sedan får jag en beställning på 5kg tomater, då skall ju programet inte ta bort båda posterna.
Här följer min kod.
<code>
Set tabell = New ADODB.Recordset
Dim vikt As Integer
vikt = CInt(Text6.Text)
Dim fortsätt As Boolean
fortsätt = True
Dim datum As Date
Do While fortsätt
tabell.Open "select min(datum) from lagertab where sort = '" & Text3.Text & "'", frmMain.databas
datum = tabell(0)
tabell.Close
tabell.Open "select * from lagertab where sort = '" & Text3.Text & "' and datum = #" & datum & "#", frmMain.databas
If vikt >= tabell("kg") Then
vikt = vikt - tabell("kg")
tabell.Close
tabell.Open "delete from Lagertab where sort = '" & Text3.Text & "' and datum = #" & datum & "#", frmMain.databas
Else
tabell.Close
tabell.Open " update lagertab set kg=kg- " & vikt & " where sort = '" & Text3.Text & "' and datum = #" & datum & "#", frmMain.databas
fortsätt = False
End If
Loop
</code>
Mycket tacksam för hjälpSv: Lager
<code>
Dim Vikt As Long
Dim fltKg As ADODB.Field
Dim rsLager As ADODB.Recordset
Vikt = CInt(Text6.Text)
Set rsLager = New ADODB.Recordset
rsLager.Open "SELECT *" & vbCrLf & _
"FROM lagertab" & vbCrLf & _
"WHERE sort = '" & Text3.Text & "'" & vbCrLf & _
"ORDER BY datum DESC", frmMain.databas, adOpenKeyset, adLockOptimistic
Set fltKg = rsLager = tabell("kg")
Do Until rsLager.EOF
If fltKg.Value > Vikt Then
fltKg.Value = fltKg.Value - Vikt
Vikt = 0
Exit Do
Else
Vikt = Vikt - fltKg.Value
rsLager.Delete
End If
rsLager.MoveNext
Loop
rsLager.Close
If Vikt Then
MsgBox "Det saknas " & Vikt & "kg för att fylla ordern!"
End If
</code>
Men jag skulle inte göra på ditt sätt. Skulle lagra utag som negativa värden. Så är det bara att summera.Sv: Lager
I den koden du skrev funkar inte detta
<code>
Set fltKg = rsLager = tabell("kg")
</code>
Det går inte att blanda datatyperna.
Tack för att du tar dig tid.Sv: Lager
<code>
Set fltKg = rsLager("kg")
</code>
<br>
Typ Lager tabellen:<br>
<br>
Datum: Typ: St:<br>
20020101 Lampa 10<br>
20020101 Lampa 15<br>
20020102 Lampa -5<br>
20020104 Lampa -10<br>
<br>
Kör du en summa får du att det fins totalt 10 lampor. Fördelen är att du får historik. Du kan se vilka leveranser som kommit in och vilka som komit ut.Sv: Lager
Jag har en tabell för försäljning och inköp. Tror jag använder ditt första exempel för det är ganska likt mitt eget och jag vet vad allt gör utom en sak. Vad är vbCrLf?Sv: Lager
Om det i lagertab finns följande.
Datum Sort Kg
2002-03-03 KJ 5
2002-03-03 KJ 5
2002-05-05 KJ 5
Om det kommer en order på 6 Kg KJ då tar programmet bara bort den första posten, alltså så tas bara 5 Kg bort från lagret när 6 har sålts.
Har du några ideér?Sv: Lager
<code>
Dim Vikt As Long
Dim fltKg As ADODB.Field
Dim rsLager As ADODB.Recordset
Vikt = CInt(Text6.Text)
Set rsLager = New ADODB.Recordset
rsLager.Open "SELECT *" & vbCrLf & _
"FROM lagertab" & vbCrLf & _
"WHERE sort = '" & Text3.Text & "'" & vbCrLf & _
"ORDER BY datum DESC", frmMain.databas, adOpenKeyset, adLockOptimistic
Set fltKg = rsLager("kg")
Do Until rsLager.EOF
If fltKg.Value > Vikt Then
fltKg.Value = fltKg.Value - Vikt
rsLager.Update
Vikt = 0
Exit Do
Else
Vikt = Vikt - fltKg.Value
rsLager.Delete
End If
rsLager.MoveNext
Loop
rsLager.Close
If Vikt Then
MsgBox "Det saknas " & Vikt & "kg för att fylla ordern!"
End If
</code>Sv: Lager
Vad gör VbCrLf, har kollat hjälpen men jag fattar inte.Sv: Lager