3.5k Aufrufe
Gefragt in Datenbanken von Mitglied (335 Punkte)
Hallo ACCperten,

Ich meine dieses Mal ein anspruchsvolleres Thema gefunden zu haben :).

Und zwar haben wir für jede Maschine eine Seriennummer (Primärschlüssel, Format Text).

Es gehören aber n Maschinen zu einem Projekt (Format Text).

In den aller meisten Fällen sind die Seriennummern fortlaufend (1000, 1001,1002 usw.), so dass ich mir die Frage gestellt habe, ob es vielleich möglich ist eine Textbox VON und eine andere BIS zu nennen.

Dort würde ich z. B. 1000 und 1002 eintragen.

Kann man einen VBA Code so stricken, dass er über eine Schleife auch die 1001 einträgt und noch dazu gehörige Angaben mit einfügt?

Solche dazugehörigen Angaben sind z. B. Listenpreise, Rabatte, Frachtkosten (alles Zahlformat).

Alle Eingaben würden sich in einer Tabelle befinden.

Hintergrund meiner Anfrage ist, dass ein Projekt schnell über hundert Maschinen haben kann, und wenn ich die Eingaben für jeden Datensatz extra machen muss, habe ich gleich keine Lust mehr ;).

Ich hoffe, dass ich mein Anliegen klar beschrieben habe.

Vielen Dank für Eure Hilfe im Vorraus.

Peter.

19 Antworten

0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Peter,
Ich sag mal "Ja".
Das Anliegen habe ich verstanden, aber wo was rein soll nicht.

Gruß
lorf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Lorf,

sämtliche Eingabefelder befinden sich auf einer Registerkarte in einem Formular.

Darunter befindet sich auch gleich die Tabelle in die alle Daten rein sollen.

Die Textfelder tragen auch die selben Namen, wie die Spalten der Tabelle.

Ich hoffe, dass das weiterhilft.

Danke.

Peter
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Peter,
das ist für den Anfang nicht schlecht. Wir brauchen die Namen:
[list] des Formulars,
der Registerkarte,
der Tabelle,
der Textfelder.[/list]
Denn müsste man noch auf der Registerkarte einen Button plazieren können, der den Code startet.
Und das Wichtigste ist natürlich, dass du an den Basic-Editor kommen kannst, damit du den Code einfügen kannst.
Irgendwie liest sich das für mich, als hättest du da fertige Software vor dir, der aber einige Features fehlen, und versuchst nun als letztes Glied in der Kette, was dran zu basteln. Das wird voraussichtlich nicht gelingen. Da würde ich mich an deiner Stelle denn besser an den Hersteller wenden.

Gruß
lorf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Lorf,

Name des Formulars: Frm_Sales
Name der Registerkarte: TabCtl0
Name der Tabelle: Tbl_KZ_Sales_Data

Namen der Textfelder: From, To (in diese Felder sollen die erste und die letzte Seriennummer rein), Project, Qty, List_price_per_unit_USD, Special_handling_costs_per_unit_USD, Estimated_freight_costs_per_unit_USD, Insurance_costs_per_unit_USD, Contracted_Value_per_unit_USD

Das mit dem Button habe ich schon, er heißt Data_Entry.

Mit VBA bin ich in Excel sehr vertraut aber in Access komme ich noch nicht klar.

Meine Datenbank ist 100% Eigenleistung :). Nachdem meine Abfragen aber stehen, geht es an die Prozessoptimierung mit VBA und außer dem Requery habe ich leider noch nichts in VBA zustande bekommen :(.

Danke für Eure Hilfe.

Peter
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Peter,
eine 1. Variante noch ohne Fehlerprüfung:
Private Sub Data_Entry_Click()
On Error GoTo Err_Data_Entry_Click

Dim rec1 As New ADODB.Recordset
rec1.Open "SELECT * from Tbl_KZ_Sales_Data", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
For prj = Forms!frm_sales!From To Forms!frm_sales!To
CurrentDb.Execute _
"INSERT INTO Tbl_KZ_Sales_Data (Project, Qty, List_price_per_unit_USD, Special_handling_costs_per_unit_USD, Estimated_freight_costs_per_unit_USD, Insurance_costs_per_unit_USD)" + _
"VALUES (" + Str(prj) + "," + _
Str(rec1!Qty) + "," + _
Str(rec1!List_price_per_unit_USD) + "," + _
Str(rec1!Special_handling_costs_per_unit_USD) + "," + _
Str(rec1!Estimated_freight_costs_per_unit_USD) + "," + _
Str(rec1!Insurance_costs_per_unit_USD) + _
");"
Next prj
rec1.Close

Exit_Data_Entry_Click:
Exit Sub

Err_Data_Entry_Click:
MsgBox Err.Description
Resume Exit_Data_Entry_Click

End Sub


Gruß
lorf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Danke Lorf,

probiere ich gleich mal aus.

Peter
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Lorf,

habe mich intensiv damit beschäftigt, und ich denke, dass ich Dein Makro vom Ablauf her verstanden habe.

Jedoch habe ich noch folgende Probleme.

1. In die Spalte "Special handling costs" wird oft nichts eingetragen, so dass dort oft auch nichts steht, nicht einmal Null.

Dieser Umstand verursacht folgende Fehlermeldung: "Invalid use of Null"

Also habe ich die Spalte "Special handling costs" erst einmal rausgenommen, womit dieses Problem erst mal nach hinten geschoben wurde.

2. Nun erhalte ich aber eine Fehlermeldung, mit der ich nicht mehr klar komme:

"Number of query values and destination fields ar not the same."

Hast Du vielleicht ein Erklärung hierfür, denn ich habe nach und nach alle Spalten rausgenommen, so dass nur noch die Bestellnummern übrig blieben.

Ich vermute daher, das der Fehler daher kommt, dass das Makro die Bestellnummern nicht mit reinzieht.

Für Deinen Rat wäre ich sehr dankbar.

Peter

Ich
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Peter,
die Fehlerprüfung auf NULL (bei leerem Feld) habe ich eingefügt.
Der Fehler Nr. 2 war wahrscheinlich ein Folgefehler, weil du in der Insert-Anweisung nur die Werteliste, aber nicht auch die "Feldnamenliste" bearbeitet hast.
Einen Fehler hatte ich auch noch drin, nämlich in der SELECT-Anweisung. Es wurde einfach alles selektiert und denn immer nur der 1. Datensatz genommen. Jetzt wird der from-Datensatz selektiert und als from+1-Project, from+2-Project, usw. eingefügt.
Es wird nicht geprüft, ob die Project-Nr schon mal da ist. Da musst du denn aufpassen, falls die Project-Nr nur einmal drin stehen darf.

Private Sub Data_Entry_Click()
On Error GoTo Err_Data_Entry_Click

Dim rec1 As New ADODB.Recordset
rec1.Open "SELECT * from Tbl_KZ_Sales_Data WHERE Project=" & _
Forms!frm_sales!From, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly

For prj = Forms!frm_sales!From + 1 To Forms!frm_sales!To
CurrentDb.Execute _
"INSERT INTO Tbl_KZ_Sales_Data (" + _
"Project, Qty, List_price_per_unit_USD, Special_handling_costs_per_unit_USD, " + _
"Estimated_freight_costs_per_unit_USD, Insurance_costs_per_unit_USD)" + _
"VALUES (" + Str(prj) + "," + _
Str(IIf(IsNull(rec1!Qty), "0", _
rec1!Qty)) + "," + _
Str(IIf(IsNull(rec1!List_price_per_unit_USD), "0", _
rec1!List_price_per_unit_USD)) + "," + _
Str(IIf(IsNull(rec1!Special_handling_costs_per_unit_USD), "0", _
rec1!Special_handling_costs_per_unit_USD)) + "," + _
Str(IIf(IsNull(rec1!Estimated_freight_costs_per_unit_USD), "0", _
rec1!Estimated_freight_costs_per_unit_USD)) + "," + _
Str(IIf(IsNull(rec1!Insurance_costs_per_unit_USD), "0", _
rec1!Insurance_costs_per_unit_USD)) + _
");"
Next prj
rec1.Close

Exit_Data_Entry_Click:
Exit Sub

Err_Data_Entry_Click:
MsgBox Err.Description
Resume Exit_Data_Entry_Click

End Sub



Gruß
lorf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Danke Lorf und entschuldige bitte meine verspätete Antwort.

Ich bin oft unterwegs und habe leider nicht immer Internetzugang.

Ich probiere Deine Variante heute noch aus.

Danke Dir.

Peter
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Lorf,

ich glaube, ich habe mein Problem gefunden, weshalb Deine Makros bei mir nicht funktionieren.

Die beiden Textfelder, in die die Seriennummern reingeschrieben werden, heißen "From" und "To.

In der Tabelle "Tbl_KZ_Sales_Data" wo die Seriennummern mit reingeschrieben werden sollen gibt es die Spalten aber nicht.

Es gibt dort nur die Spalte "Seriennummer", wo praktisch die fortlaufenden Seriennummern aus den Textfeldern "From" und "To" eingetragen werden müssten.

Ich glaube, dass deshalb hier immer eine Fehlermeldung kommt:

Rec1.Open "Select * from Tbl_KZ_Sales_Data where Project =" & _
Forms!Frm_Sales!From, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly

Die Fehlermeldung lautet:

Data type mismatch in criteria expression.

Ich habe wirklich versucht, das Makro zu ändern, aber leider fällt mir Accessprogrammierung wesentlich schwerer als in Excel.

Könntest Du mir bitte noch mal helfen?

Danke

Peter
...