Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

datensatz kopieren

Begonnen von hilflos0001, April 14, 2011, 14:54:19

⏪ vorheriges - nächstes ⏩

hilflos0001

Hallo hab da ein Problem und hoffe hier kann mir jemand helfen
hab ein paar werte die ich miteinander in einer abfrage mittels vba code verrechne.
ungefähr:

anzahl = 1
rechnung:
a= b*c/anzahl
if a größer 100 then
anzahl= anzahl+1
end if

jetzt soll wenn die anzahl bei einem kunden 2 oder höher ist ein neuer datensatz mit den gleichen werten angelegt werden nur der name soll ergänzt werden
hab mir das ungefähr so vorgestellt.

Public Function name(anzahl, KundenName)
If anzahl > 1 Then
Do Until anzahl = 1
datensatz kopieren
name = KundenName & "_" & anzahl
anzahl = anzahl - 1
Loop
Else
name = KundenName
End If
End Function

also das dann die daten so sind

Kunde     a      b     c    1
Kunde_2 a      b     c    2


programmiere mit access 03
gibt es da irgend eine lösung?
vielen dank schonmal :)

MzKlMu

Hallo,
irgendwie versteh ich das Vorhaben nicht.
Kannst Du nicht einfach in einem Feld eine Menge erfassen?
Wieso muss der Datensatz so oft kopiert werden? Du erzeugst doch jede Menge redundante Daten.
Gruß Klaus

hilflos0001

also es geht mir um ein programm zur Kabelberechnung.
wenn ich bei einem Verbraucher einen Kabelquerschnitt von über 300mm² brauche muß ich 2 Kabel legen weil es so dicke Kabel nich gibt.
deswegen muß ich in meiner Kabelliste den Datensatz auch 2mal drin haben.
hoffe es ist jetzt verständlicher warum ich das so brauche.

MzKlMu

#3
Hallo,
versteh ich trotzdem nicht.
Du kannst doch in einem Feld in einer Abfrage die Menge berechnen:

ErforderlicheMenge: [Menge]*(ErrechneterQuerschnitt\301+1)

Wozu dann 2 Datensätze mit dem Kunden?

Zur Beachtung:
Der Teiloperator vor 301 ist der Rückstrich (Backslash) für ganzzahliges teilen.
Gruß Klaus

hilflos0001

schon klar das ich einfach schreiben könnte 2mal das kabel das wär ja einfach
auf der baustelle müssen dann aber 2 kabel verlegt werden und jedes muß eine eigene kennnummer besitzen.
deshalb brauch ich das kabel 2 mal in der kabelliste mit 2 kennummern


kabelkennnummer   von   nach   länge   usw.

hilflos0001

nochmal anschaulicher. ich habe jetzt eine tabelle

kabelnummer von nach länge anzahl querschnitt
K1                   S1  V1      20        1           4,5
K2                   S2  V2      30        2           4,5

und jetzt soll daraus werden

K1                   S1  V2      20        1           4,5
K2_1               S2  V2      30        1           4,5
K2_2               S2  V2      30        1           4,5

MzKlMu

Hallo,
das Problem solltest Du mit einer weiteren Tabelle lösen in der die Kabellänge und die Kennnummer gespeichert wird. Mit einem Bezug zum Kabel. Im Kabel einen Bezug zum Kunden und Du musst gar nicht programmieren.
Gruß Klaus

hilflos0001

da müsste ich doch aber trotzdem alles per hand eingeben oder versteh ich das falsch?

möchte nämlich nicht bei 1000 kabeln kontrollieren ob sie doppelt sein müssen und dann die daten neu eingeben.

MzKlMu

#8
Hallo,
Zitatda müsste ich doch aber trotzdem alles per hand eingeben oder versteh ich das falsch?
Ja, das verstehst Du falsch. Du musst nur die Kennnummer eingeben und das musst Du auch bei deiner Version. Alles andere wird über die Beziehungen automatisch geregelt. Ohne etwas programmieren zu müssen.
Die Eingabe machst Du mit einen Hauptformular für das Kabel an sich (Kabelnummer, Kunde, Länge, Querschnitt usw.)
und einem Unterformular (verknüpft) in das Du einfach die Kennnummern der Kabel schreibst. Im Hafo ermittelst Du noch mit obiger Formel die Anzahl der Kabel und sorgst per VBA dafür dass dass die entsprechen Menge Kennnummern erfasst werden.
Gruß Klaus

hilflos0001

hallo
hab das jetzt über ein formular und folgenden vba code gelöst


'------------------------------------------------------------
' Kopieren
'
'------------------------------------------------------------
Function Kopieren()
On Error GoTo ende
Dim x As Double
Dim y As Double
y = 1
        DoCmd.OpenForm "Kabellisteneu", acNormal, "", "", , acNormal
anfang:
        x = Forms.kabellisteneu.Kabelanzahl
        Forms.kabellisteneu.Kabelanzahl = 1
        If x > 1 Then
          DoCmd.RunCommand acCmdSelectRecord
          DoCmd.RunCommand acCmdCopy
        Do Until x = 1
          DoCmd.RunCommand acCmdRecordsGoToNew
          DoCmd.RunCommand acCmdSelectRecord
          DoCmd.RunCommand acCmdPaste
            If x > 99 Then
                Forms.kabellisteneu.Kabel_Kurzzeichen = Left(Forms.kabellisteneu.Kabel_Kurzzeichen, 2) & x
            ElseIf x > 9 Then
                Forms.kabellisteneu.Kabel_Kurzzeichen = Left(Forms.kabellisteneu.Kabel_Kurzzeichen, 3) & x
            Else
                Forms.kabellisteneu.Kabel_Kurzzeichen = Left(Forms.kabellisteneu.Kabel_Kurzzeichen, 4) & x
            End If
          x = x - 1
          Forms.kabellisteneu.Kabelanzahl = 1
        Loop
        End If
        y = y + 1
        DoCmd.GoToRecord acDataForm, "Kabellisteneu", acGoTo, y
        GoTo anfang
ende:
DoCmd.Close acForm, "Kabellisteneu"
End Function


trotzdem vielen dank

MzKlMu

Hallo,
das ist zwar eine Lösung, aber keine gute. Du erzeugst redundante Daten, die man in einer DB vermeiden sollte. Das ist ja geradezu der Grund für eine DB, keine Redundanzen zu erzeugen..
Mit der 2.Tabelle könntest Du das Vorhaben elegant und datentechnisch richtig ohne eine einzige Zeile VBA umsetzen. Ohne mehr manuell schreiben zu müssen als jetzt auch.
Gruß Klaus