Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Youssef am Juni 02, 2015, 11:35:46

Titel: Position automatisieren
Beitrag von: Youssef am Juni 02, 2015, 11:35:46
Hallo,
ich brauche bitte wieder Hilfe hier.
ich habe eine Access-Anwendung programmiert die auf ein extern Werkzeugdatenbankprogramm  zugreift und damit Datensätze editiert bzw. einfügt.
Ich habe die Postionen 1 bis ...n immer selber in meine Anwendung eingegeben für den nächsten eingefügten Datensatz.
Möchte nun das nicht mehr machen und zwar Automatisieren lassen das heißt, wenn die Position 1 belegt ist ,soll dann auf die nächste Position  gehen und  den Datensatz speichern.

Kann mir bitte jemanden helfen?

Lg
Youssef
Titel: Re: Position automatisieren
Beitrag von: Wurliwurm am Juni 02, 2015, 12:23:36
Ohne zu wissen, wie Du auf das externe Werkzeugdatenprogramm zugreifst und was die Positionen 1...n bedeuten, wird Dir keiner weiterhelfen können.
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 02, 2015, 12:55:47
Die Daten von dem Werkzeugprogramm sind mit OBDC in Access verknüpft
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 07, 2015, 15:26:44
das Werkzeugdatenbankprogramm heißt TDM , sobald ich in access Daten eingebe erscheint in TDM ein Datensatz, aber ich muß immer einen  Index(Reihenfolge) eingeben:
Bsp. das sieht so aus in TDM :
Index     ToolID      Material
1             123            HM
2             131            HM
3             101           VHM

dieser Index will ich Programmiert haben und zwar für den neuen Datensatz den alten +1 weiter hoch zählen.

Index ist Bestandteil einer Tabelle mit den Feldern Index,ToolID, Material...

Danke
Lg
Youssef
Titel: Re: Position automatisieren
Beitrag von: DF6GL am Juni 07, 2015, 15:33:56
Hallo,


eine quick&dirty-Möglichkeit:

Schreib in die Eigenschaft "Standardwert" für das Formular-Textfeld, das den "Index" anzeigt:

= DMax("[Index]";"tblDeineTabelle")+1
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 07, 2015, 15:44:08
danke :-)
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 08, 2015, 10:52:44
Hallo ,
ich habe den Ausdruck in SQL Server unter Index mal probiert, sobald ich speichern durchführe smeißt mich ") +1 raus und bleibt nur =DMax("[Index]";"meineTabelle
gibts eine andere Möglichkeit?
Titel: Re: Position automatisieren
Beitrag von: DF6GL am Juni 08, 2015, 12:00:26
Hallo,

Zitatin SQL Server unter Index mal probiert


???   :o
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 08, 2015, 13:20:31
ich kann in der Tabelle in Access nichts ändern , da ist die Tabelle schreib geschützt ist.
Titel: Re: Position automatisieren
Beitrag von: MaggieMay am Juni 08, 2015, 13:32:53
Hi,

der vorgeschlagene Ausdruck wird als Steuerelementinhalt *) eines Textfeldes im Formular eingetragen - nicht anders wurde das auch beschrieben.

*) bzw. Standardwert
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 08, 2015, 13:42:56

:-[
Ich kapiere das einfach nicht !!! kannst du mir bitte schritt für schritt das klären
Titel: Re: Position automatisieren
Beitrag von: DF6GL am Juni 08, 2015, 13:56:55
Hallo,



ZitatSchreib in die Eigenschaft "Standardwert" für das Formular-Textfeld, das den "Index" anzeigt:

= DMax("[Index]";"tblDeineTabelle")+1


Was genau "kapierst" Du denn daran nicht?

tblDeineTabelle   muss natürlich durch den richtigen Namen Deiner Tabelle ersetzt werden.


Du beschreibst allerdings die Situation der DB ziemlich vage...

Und Du wirst hoffentlich nicht(!!!) direkt die odbc-verknüpften Tabellen in der Tabellenansicht(!) editieren wollen...

Benutz dazu IMMER ein Formular!
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 09, 2015, 11:34:17
Hallo,
ich habe nochmal versucht gehts nicht leider.
und die Funktion DMax gibts net sondern DomMax.
Hier ist mein Code :
=DomMax("[cboTOOLTECHNOPOS]";"TMS_TDM_TOOLTECHNO")+1
LG
Youssef
Titel: Re: Position automatisieren
Beitrag von: MzKlMu am Juni 09, 2015, 11:57:30
Hallo,
DomMax und DMax ist das gleiche DomMax ist nur eingedeutscht.

Du muss in der Funktion einen Feldnamen der Tabelle verwenden.
Ganz allgemein:
=DomMax("FeldNameInDerTabelle";"TabellenName")+1
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 09, 2015, 13:25:00
Hallo,
ich habe die Formel korigiert  es funktioniert einiger maßen.
das Problem ist nun, dass die position immer  hoch gezählt wird für alle IDs , ich will damit sagen , dass es gut wäre wenn  es geprüft bei jeden einzelnen ID-Nummer.
LG
Youssef
Titel: Re: Position automatisieren
Beitrag von: database am Juni 09, 2015, 16:39:45
Hallo,

Zitatdas Problem ist nun, dass die position immer  hoch gezählt wird für alle IDs

Die gezeigte Formel erhöht den MAXIMALWERT im Feld 'xy' deiner Tabelle 'yz' um 1 wenn ein neuer Datensatz erzeugt wird.
Deiner vorangegangenen Beschreibung nach wird das das Index-Feld sein, das du zuvor manuell bei jedem Datensatz um 1 erhöht hast.

Diese Position wird durch die Formel klarerweise IMMER (bei JEDEM neuen Datensatz) hochgezählt - das ist ja auch der Sinn und Zweck einer Automatisierung!

Zitatich will damit sagen , dass es gut wäre wenn  es geprüft bei jeden einzelnen ID-Nummer

*häääää...?*
Titel: Re: Position automatisieren
Beitrag von: MaggieMay am Juni 09, 2015, 23:27:53
Sorry, aber...
Zitat von: database am Juni 09, 2015, 16:39:45*häääää...?*
geht ja nun gar nicht.

Das soll wohl heißen "Wie meinst du das?" und es wäre schön wenn das auch so oder ähnlich freundlich formuliert zum Ausdruck gebracht würde.


Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 10, 2015, 11:39:16
Hallo,
ich habe in meinem Datenbank Werkzeuge IDs , jeden Werkzeug-ID-Nummer bekommt einen oder mehreren Datensätze(Daten).
Ich will durch meine Programmierung, dass die Reihenfolge automatisch fesgelegt wird das heißt wenn ich für das Werkzeug ID xxxx Daten einfüge die nächste freie Positionnummer vergeben wird.
Titel: Re: Position automatisieren
Beitrag von: MaggieMay am Juni 10, 2015, 13:47:48
Hi,

dann musst du noch ein Kriterium hinzufügen, bspw so:=DomMax("FeldNameInDerTabelle";"TabellenName";"ID=" & [ID])+1
Da musst du natürlich auch noch den richtigen Datenfeld- und Steuerelementnamen einsetzen.

Und damit es auch beim ersten Datensatz einer neuen ID klappt, setzt du noch die NZ-Funktion ein:
=NZ(DomMax("FeldNameInDerTabelle";"TabellenName";"ID=" & [ID]);0)+1
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 10, 2015, 14:35:29
hi,
danke für den Code habe ihn probiert geht nicht .
ich habe hier mein VBA code villeicht ist besser zu verstehen um was es geht:
Die Variable a soll meine veränderliche  Position sein  .
'Einfügen in der Tabe.TMS_TDM_TOOLTECHNOEXV
strSQL1 = "INSERT INTO TMS_TDM_TOOLTECHNOEXV ([TOOLID],[MATERIALID],[MATERIALGROUPID],[MACHINEID],[MACHINEGROUPID],[TECHNOCLASSID],TOOLTECHNOPOS )" & _
                "VALUES ('" & Me.txtTOOLID & "', '" & _
                        Me.txtMATERIALID & "','" & _
                        Me.txtMATERIALGROUPID & "', '" & _
                        Me.txtMACHINEID & "', '" & _
                        Me.txtMACHINEGROUPID & "', '" & _
                        Me.txtTECHNOCLASSID & "',a)"


'Einfügen in der Tabe.TMS_TDM_TOOLTECHNOLIST
strSQL = "INSERT INTO TMS_TDM_TOOLTECHNOLIST ([TOOLID],CUTSPEED,FEEDPTOOTH,TOOLTECHNOLISTPOS,IDTYPE,TOOLTECHNOPOS)" & _
                "VALUES ('" & Me.txtTOOLID & "'," & _
                        str(Me.txtCUTSPEED) & "," & _
                        str(Me.txtFEEDPTOOTH) & ", " & _
                        str(Me.cboTOOLTECHNOLISTPOS) & " ,2,a)"


'Einfügen in der Tabe.TMS_TDM_TOOLTECHNO
strSQL2 = "INSERT INTO TMS_TDM_TOOLTECHNO ([TOOLID],[TECHNOCLASSID],IDTYPE,TOOLTECHNOPOS)" & _
                "VALUES ('" & Me.txtTOOLID & "','" & _
                        Me.txtTECHNOCLASSID & "',2,a)"

Kann man die a variable in Abhängigkeit von TOOLID  machen und damit die Position festlegen?

Titel: Re: Position automatisieren
Beitrag von: MaggieMay am Juni 10, 2015, 15:05:35
Wenn du den Datensatz per VBA einfügst musst du halt dort den Domänenausdruck einsetzen:
a = NZ(DomMax("TOOLTECHNOPOS","TMS_TDM_TOOLTECHNOLIST","TOOLID='" & Me.txtTOOLID & "'"),0)+1
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 10, 2015, 15:16:29
Zitat von: MaggieMay am Juni 10, 2015, 15:05:35
Wenn du den Datensatz per VBA einfügst musst du halt dort den Domänenausdruck einsetzen:
a = NZ(DomMax("TOOLTECHNOPOS","TMS_TDM_TOOLTECHNOLIST","TOOLID='" & Me.txtTOOLID & "'"),0)+1

das ist in VBA, was meinst du mit dort ?
meinst du im Programm selber ?
Titel: Re: Position automatisieren
Beitrag von: MaggieMay am Juni 10, 2015, 15:51:01
Hi,

"dort" ist da wo du die SQL-Strings erzeugst und vermutlich auch ausführst, also in dem Code-Auszug den du oben gezeigt hast.
Bevor du die Variable "a" bei der Erstellung des SQL-Codes verwendest, ermittelst du die neue Position.

Das sähe dann bspw. so aus:
Dim a As Long
a = NZ(DMax("TOOLTECHNOPOS","TMS_TDM_TOOLTECHNOLIST","TOOLID='" & Me.txtTOOLID & "'"),0)+1

'Einfügen in der Tabe.TMS_TDM_TOOLTECHNOEXV
strSQL1 = "INSERT INTO TMS_TDM_TOOLTECHNOEXV ([TOOLID],[MATERIALID],[MATERIALGROUPID],[MACHINEID],[MACHINEGROUPID],[TECHNOCLASSID],TOOLTECHNOPOS )" & _
                "VALUES ('" & Me.txtTOOLID & "', '" & _
                        Me.txtMATERIALID & "','" & _
                        Me.txtMATERIALGROUPID & "', '" & _
                        Me.txtMACHINEID & "', '" & _
                        Me.txtMACHINEGROUPID & "', '" & _
[color=blue]                        Me.txtTECHNOCLASSID & "'," & a & ")"[/color]


'Einfügen in der Tabe.TMS_TDM_TOOLTECHNOLIST
strSQL = "INSERT INTO TMS_TDM_TOOLTECHNOLIST ([TOOLID],CUTSPEED,FEEDPTOOTH,TOOLTECHNOLISTPOS,IDTYPE,TOOLTECHNOPOS)" & _
                "VALUES ('" & Me.txtTOOLID & "'," & _
                        str(Me.txtCUTSPEED) & "," & _
                        str(Me.txtFEEDPTOOTH) & ", " & _
[color=blue]                        str(Me.cboTOOLTECHNOLISTPOS) & " ,2," & a & ")"[/color]


'Einfügen in der Tabe.TMS_TDM_TOOLTECHNO
strSQL2 = "INSERT INTO TMS_TDM_TOOLTECHNO ([TOOLID],[TECHNOCLASSID],IDTYPE,TOOLTECHNOPOS)" & _
                "VALUES ('" & Me.txtTOOLID & "','" & _
[color=blue]                        Me.txtTECHNOCLASSID & "',2," & a & ")"[/color]
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 10, 2015, 15:57:39
funktionniert einwandfrei :) Danke
Titel: Re: Position automatisieren
Beitrag von: MaggieMay am Juni 10, 2015, 16:03:17
Wenn diese Position allerdings in verschiedenen Tabellen steht, muss sichergestellt werden, dass es stets dieselbe ist. Andernfalls muss sie auch mehrfach ermittelt werden.

Warum hast du so viele Tabellen zu einer ToolID-Position?
Titel: Re: Position automatisieren
Beitrag von: Youssef am Juni 11, 2015, 10:54:13
Hallo,
danke erstmal für die Antwort gestern.
Ich habe eingentlich nichts zu tun mit den Tabellen, die Tabellen gehören zu dem Programm TDM und die Kann man nicht ändern.
Meine Aufgabe war, dass ich darauf zugreife und die Daten ändern bzw. einfüge. deswegen hatte ich auch am Anfang sehr große Schwierigkeiten euch das nah zu bringen bzw. erklären.
Auf jedenfall Danke für die Unterstützung
LG
Youssef