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
Ohne zu wissen, wie Du auf das externe Werkzeugdatenprogramm zugreifst und was die Positionen 1...n bedeuten, wird Dir keiner weiterhelfen können.
Die Daten von dem Werkzeugprogramm sind mit OBDC in Access verknüpft
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
Hallo,
eine quick&dirty-Möglichkeit:
Schreib in die Eigenschaft "Standardwert" für das Formular-Textfeld, das den "Index" anzeigt:
= DMax("[Index]";"tblDeineTabelle")+1
danke :-)
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?
Hallo,
Zitatin SQL Server unter Index mal probiert
??? :o
ich kann in der Tabelle in Access nichts ändern , da ist die Tabelle schreib geschützt ist.
Hi,
der vorgeschlagene Ausdruck wird als Steuerelementinhalt *) eines Textfeldes im Formular eingetragen - nicht anders wurde das auch beschrieben.
*) bzw. Standardwert
:-[
Ich kapiere das einfach nicht !!! kannst du mir bitte schritt für schritt das klären
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!
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
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
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
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äääää...?*
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.
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.
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
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?
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
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 ?
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]
funktionniert einwandfrei :) Danke
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?
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