Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Neueste Beiträge

#1
Access Programmierung / Re: Listenfeld via vba sortier...
Letzter Beitrag von Fronti - Heute um 16:06:23
Auch schon probiert, leider nein. Dennoch vielen Dank. :)
#2
Access Programmierung / Re: Listenfeld via vba sortier...
Letzter Beitrag von Köbi - Heute um 15:34:42
Schuss ins Blaue. Müsste man im strSQL das + nicht durch & ersetzen?
#3
Access Programmierung / Re: VBA-Code Las-t Out > First...
Letzter Beitrag von MzKlMu - Heute um 14:37:39
Hallo,
ZitatIch habe Variante gewählt, weil ich zum einen nicht jeden Tag hunderte neue Datensätze erzeugen möchte
Meine Version erzeugt nicht mehr DS warum auch ?
Zitatund zum anderen auch neben dem Lagerbestannd so auch immer den richtigen Waenwert bekomme. Schließlich varriieren die Einkaufspreise in Zeiten wie diesen.
Für den Warenwert spielen die Einkaufspreise eigentlich keine Rolle. Der Warenwert ergibt sich aus dem aktuellen Preis. Wenn Du 10 Aktien zu 100.-€ kaufst und die Aktie dann auf 110.-€ steigt, sind Deine Aktien 1100.-€ wert und keine 1000.-€.

Wenn Du wirklich die Einkaufspreise verwenden willst, muss aber eine Rückgabe auch wieder dem Einkaufsvorgang zugeordnet werden, damit der richtige Preis berücksichtigt wird.
Ich halte das für nicht umsetzbar, besonders wegen der Eingabe der Rückgaben durch die Mitarbeiter.

Ich bin nach wie vor der Meinung eine Umgestaltung der DB wäre besser, zumal da eigentlich kein VBA benötigt wird.
Ist aber Deine Sache. Ich habe nichts weiter zu sagen.
#4
Access Programmierung / Re: VBA-Code Las-t Out > First...
Letzter Beitrag von markusxy - Heute um 14:12:58
Hier mal ein simpler Ansatz, der dein Modell fortführt.
Trotzdem würde  ich das generell überdenken.
Do While Anzahl > rs!Differenz
    rs.Edit
    rs!Rest = rs!Anzahl
    Anzahl = Anzahl - rs!Differenz
    rs.Update
    rs.MoveNext
Loop
If Anzahl then
    rs.Edit
    rs!Rest = rs!Rest + Anzahl
    rs.Update
end if
#5
Access Programmierung / Re: Fehlender Werte mit Schlei...
Letzter Beitrag von sandi - Heute um 13:45:56
Also so funktioniert es, wenn ich die betreffenden Felder im Select reinhole..
Option Compare Database
Option Explicit

Public Sub Miss_var()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Fehlende_Werte As Integer
Dim i As Integer
Dim Miss As Integer

Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "SELECT check_fit_ID, Spinning , Lunges , Squats , Fehlende_Werte FROM tblcheck_fit", CurrentProject.Connection, adOpenStatic, adLockOptimistic


Do While Not rs.EOF

  Miss = 0
 
  For i = 0 To rs.Fields.Count - 1
 
  If IsNull(rs.Fields(i)) Then
       Miss = Miss + 1
  End If
 
     rs!Fehlende_Werte = Miss
  Next i
    Debug.Print rs!check_fit_ID, rs!Fehlende_Werte
    rs.MoveNext
Loop

End Sub

Geht das auch mit einer Schleife mit bestimmter Indizierung für die Felder die es betrifft?
Gruß
Sandi
#6
Access Programmierung / Fehlender Werte mit Schleife
Letzter Beitrag von sandi - Heute um 12:48:32
Hallo an die Profis hier,
ich bin noch VBA Anfängerin und habe folgende Aufgabe.
Ich habe eine Tabelle und möchte Fehlende Werte von bestimmten Feldern eines Datensatzes in der Tabelle ermitteln und mir das Ergebnis in einer Variablen" Fehlende_Werte" speichern lassen.
Also zu jedem Datensatz die Fehlenden Werte.

Tabelle = tblcheck_fit
Primary Key der Tabelle = check_fit_ID
Ich benutze Access 2016 und müsste dann mit ADODB arbeiten.
Meinen Idee wäre diese...

Option Compare Database
Option Explicit

Public Sub Miss_var()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Miss As Integer
Dim i As Integer

Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM tblcheck_fit ", CurrentProject.Connection, adOpenStatic, adLockOptimistic
Do Until rs.EOF
' Hier die benötigen Felder der Tabelle zur ID
'und hier ist mein Problem, wie kann ich die Felder die es betrifft, in  der For Schleife durchsuchen
 For i = 'benötigte Felder die ich durchsuchen möchte'
  If IsNull(rs(i)) = True Then
  Miss = Miss + 1
  rs! Fehlende_Werte = Miss
  Debug.Print rs! check_fit_ID, rs!Fehlende_Werte
  End If
  Next
  rs.MoveNext
  Loop
End Sub

Oder nimmt man dann im SELECT nur die Felder die man benötigt?
Oder geht das auch mit einer Schleife mit bestimmter Indizierung für die Felder die es betrifft?
Wie geschrieben, ich bin noch Anfängerin.
Mit der Bitte um Vorschläge bzw. Lösungen.
Danke
Sandi
#7
Access Programmierung / Re: VBA-Code Las-t Out > First...
Letzter Beitrag von Will1974 - Heute um 11:16:09
@ebs17 :
Danke für deinen Tipp, die Theorie würde ich verstehen, aber wie kann ich das im Code umsetzen?
Die Ausbuchung funktioniert ja fast auf selben Weg, ganz ohne sequentielle Splittung der Gesamtausbuchung.

Dafür fehlt mir leider die notwendige VBA-Erfahrung.
#8
Access Programmierung / Re: VBA-Code Las-t Out > First...
Letzter Beitrag von ebs17 - Heute um 11:13:21
ZitatIrgendwas stimmt noch nicht
Wenn ich nur die Situation betrachte: Einem Lagerort sollte nur die Differenz Anzahl - Rest zubuchbar sein. Also müsste die Gesamtzubuchung sequentiell aufgeteilt werden (mit offenen Ausgang für den am frühesten belegten Lagerort).
#9
Access Programmierung / Listenfeld via vba sortieren
Letzter Beitrag von Fronti - Heute um 10:55:07
Hallo liebe Community,

ich spiele seit gestern mal wieder: "Finde den Fehler!"
Habe folgenden VBA-Code und kann mir nicht erklären, weshalb mein Listenfeld, nachdem ich die Schaltfläche angeklickt habe leer bleibt...  :o

Private Sub Befehl434_Click()

' Datenquelle des Formulars

strSQL = "SELECT tblMessung.mes_id " & _
         ",tblFilm.film_download AS Download " & _
         ",IIf([mes_zurueckgesetzt_reset]=1,'X','') AS RST " & _
         ",DateAdd('m',3,[Erster]) AS Verjährung " & _
         ",tblKameraTyp.KamTyp_initialen AS Syst " & _
         ",Format([Erster],'mm' + '/' + 'yyyy') AS Monat " & _
         ",Sum(tblFilm.film_bildanzahl) AS Bildanzahl " & _
         ",tblPlatz.pla_code AS Code " & _
         ",tblPlatz.pla_Bezeichnung AS Bezeichnung " & _
         ",'(' + [fahr_code] + ') ' + [fahr_richtung] AS Fahrtrichtung " & _
         ",[gem_name] + ' - ' + [ort_name] AS Standort " & _
         ",(CONVERT(date, GETDATE())-[film_zeitstempel_plantafel]) AS [Pool seit (T)] " & _
         ",tblFilm.film_zeitstempel_plantafel " & _
         ",Min(tblFilm.film_beginn_messreihe) AS Erster " & _
         ",tblMessung.mes_zurueckgesetzt_reset " & _
         "FROM ((tblGemeinde " & _
         "LEFT JOIN tblOrtschaft ON tblGemeinde.gem_id = tblOrtschaft.gem_id_f) " & _
         "LEFT JOIN tblPlatz ON tblOrtschaft.ort_id = tblPlatz.ort_id_f) " & _
         "LEFT JOIN (((tblKameraTyp " & _
         "RIGHT JOIN tblKamera ON tblKameraTyp.KamTyp_id = tblKamera.Kamtyp_id_f) " & _
         "RIGHT JOIN (tblFahrtrichtung " & _
         "LEFT JOIN (tblEichung " & _
         "RIGHT JOIN tblMessung ON tblEichung.eich_id = tblMessung.eich_id_f) ON tblFahrtrichtung.fahr_id = tblMessung.fahr_id_f) ON tblKamera.Kam_id = tblEichung.Kam_id_f) " & _
         "LEFT JOIN tblFilm ON tblMessung.mes_id = tblFilm.mes_id_f) ON tblPlatz.pla_id = tblFahrtrichtung.pla_id_f " & _
         "WHERE (((tblFilm.film_plantafel)=1))"
         
strSQL = strSQL & "GROUP BY tblMessung.mes_id " & _
         ",tblFilm.film_download " & _
         ",tblKameraTyp.KamTyp_initialen " & _
         ",tblPlatz.pla_code " & _
         ",tblPlatz.pla_Bezeichnung " & _
         ",'(' + [fahr_code] + ') ' + [fahr_richtung] " & _
         ",[gem_name] + ' - ' + [ort_name] " & _
         ",tblFilm.film_zeitstempel_plantafel " & _
         ",tblMessung.mes_zurueckgesetzt_reset " & _
         "ORDER BY Min(tblFilm.film_beginn_messreihe) " & _
         ""


Me.lstPlantafel.RowSource = strSQL

Me.Requery
Me.lstPlantafel.Requery
End Sub
#10
Access Programmierung / Re: VBA-Code Las-t Out > First...
Letzter Beitrag von Will1974 - Heute um 09:56:32
@markusxy:

Zitat von: markusxy am März 24, 2023, 17:12:43
Zitat von: Will1974 am März 24, 2023, 14:27:57rs!Rest = rs!Rest + rs!Differenz
...
Anzahl = Anzahl - rs!Rest[/quote]

Also der Fehler ist recht offensichtlich.
Bei Rest steht ja schon mal der Wert 4.
Den Wert ziehst du dann einfach von der Anzahl ab, obwohl die ja gar nicht zurückgegeben wurden. ;)

Abgesehen davon prüfst du gar nicht, ob Differenz > ist als die Rückgabe.
Den Code solltest du noch mal durchdenken.


Ich habe den Code überarbeitet und habe folgendes (diesmal ohne rs!Differenz).

...

If rs!Rest + Anzahl < 0 Then
    stueck(i) = rs!Rest
    zugangnr(i) = rs!LagerID
    Anzahl = Anzahl + rs!Rest
    rs!Rest = 0
    rs.Update
    rs.MoveNext
Else
    rs!Rest = rs!Rest + Anzahl
    stueck(i) = Anzahl
    zugangnr(i) = rs!LagerID
    Anzahl = 0
    rs.Update
...


Ausgangssituation:

LagerID | Lieferdatum | Anzahl | Rest
163        | 27.02.2023   |    5       |     0
164        | 01.03.2023   |    3       |     0
345        | 22.03.2023   |  12       |     4


Ergebnis bei einer Zubuchung von 13:

LagerID | Lieferdatum | Anzahl | Rest
163        | 27.02.2023   |    5       |     0
164        | 01.03.2023   |    3       |     0
345        | 22.03.2023   |  12       |   17

Die zugebuchte Stückzahl stimmt jetzt (4 + 13 = 17), allerdings wird diese jetzt im Gesamten nur bei letzten Datensatz (LagerID 345) zugebucht :-(

Das Ergebnis sollte aber eigentlich so aussehen:

LagerID | Lieferdatum | Anzahl | Rest
163        | 27.02.2023   |    5       |     2
164        | 01.03.2023   |    3       |     3
345        | 22.03.2023   |  12       |   12

Irgendwas stimmt noch nicht, hast du eine Idee was jetzt noch falsch ist?