Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Access97: Fehler 3112





Frage

Hallo! Hiermit starte ich einen Versuch jemanden zu finden, der mir bei meinem Problem mit Access97 helfen kann! Es würde mich sehr freuen, wenn Sie einen Tipp für mich haben - folgendes Problem: Access97-Fehlermeldung "Fehler 3112" Hergang: Es wurde ein Datensatz über ein Formular bearbeitet; durch "ausschneiden" (Strg + X) entfernte ich einen Satz im Textfeld "Info", dieser Satz wurde dadurch in den Zwischenspeicher kopiert (für späteres einfügen...), im gleichen Formular ist ein Schalter der ein Textfeld öffnet, der auf den g l e i c h e n Datensatz zugreift. In dieses Textfeld hatte ich den vorher kopierten Satz eingefügt (Strg + V) !!! Dadurch habe ich 2x auf den selben (noch nicht gespeicherten) Datensatz zugegriffen. Beim Versuch den Datensatz zu speichern erhielt ich die Meldung ähnlich wie "diese Änderung speichern, vorige speichern oder Änderung verwerfen". Seit dem habe ich wirklich ein Problem: Dieser Datensatz bzw. das Feld kann ich nicht mehr ändern -> nicht einmal der gesamte Datensatz läßt sich löschen !!! Wollte die gesamte Datenbank komprimieren, auch nicht möglich..... Neue Datenbank erstellen - wozu ich inzwischen bereit wäre (Access, Office XP) - funktioniert auch nicht, weil die Schlüßelfelder (Adress# / Autowert) gleich bleiben müssen (alle anderen Tabellen beziehen sich auf diese Nummern....) Ich weiß mir keinen Rat !!!!!!!!!! Über Ihre Hilfe würde ich mich sehr freuen !!!! Vielen Dank im voraus! Gruß Tom

Antwort 1 von Massaraksch

Ist die Datenbank geschützt? Der Fehler taucht eigentlich im Zusammenhang mit Access-Arbeitsgruppenberechtigungen auf. Habe hier bei M$ was dazu gefunden:
ACC97: "...No read permission..." Error When Opening a Se...

Kannst du dir ja mal durchlesen. Vielleicht gibts Hinweise...

Massaraksch

Antwort 2 von Herbert

Hallo MrGit,
folgender Versuch.
Neue DB unter beliebigem Namen anlegen.
Öffnen und dann aus der ggf. defekten DB unter Datei - erxterne Daten -Importieren - Alle Tabs/Forms etc mit Beziehungen importieren.
Alte Db umbennen
Neue DB auf alten Namen setzen und Testen.
Wenns nicht klappt ggf. defekte DB unter A2000 ohne zu konvertieren reparieren.
Gruß Herbert

Antwort 3 von MrGit

Hallo nochmal!

Vielen Dank für eure Tipps.... ich habe heute viel im net gesucht, teilweise auch was gefunden.... verschiedenes ausprobiert und: konnte das Problem lösen, weiß nicht mehr wie das ging, hatte eine Kopie meiner Datenbank mit Namen "db1" dort war die Tabelle mit dem Datenfehler und im betreffenden Feld stand " ########### " dies konnte ich dann löschen -> damit erledigt --->>> Gott sei Dank!

Mein nächster Schritt: Ich möchte diese Access97-Datenbank in Access 2002 importieren/konverteiren:

>>>Leider (natürlich) schonwieder ein Fehler - Meldung (nach öffnen der 97er DB in Access 2002, DB konvertieren):

"Während des Konvertierens oder Aktivierens dieser Datenbank sind Kompilierfehler aufgetreten."

So: Was mach ich jetzt ???? Muß ich jetzt alles einzeln importieren, neue Beziehungen erstellen..... ???

Vielleich kann mir irgendjemand hierzu einen Tipp geben ???

Ich würde mich sehr feuen -> Vielen Dank im voraus !!! ;-)

Gruß Tom

Antwort 4 von Massaraksch

Kompilierfehler heißt IMO, daß irgendein Teil des VBA-Codes nicht korrekt automatisch umgewandelt werden konnte. VBA von Acc97 unterscheidet sich nunmal von Acc2002. Da mußt du wahrscheinlich den Code selbst mal durchgehen und evtl. anpassen. Ist sowieso zu empfehlen.

Massaraksch

Antwort 5 von mrgit

Hallo Massaraksch ,

inzwischen habe ich den Fehler entdeckt: hatte als Formularname ";" verwendet >> das mochte Access 2002 nicht !!!
Durch Komma "," ersetzt u. schon hat´s funktioniert.

Vielen Dank für Deine nette Hilfe !!!! ;-)

Gruß Tom

Antwort 6 von mrgit

Hallo!

Hab schon wieder was:

Wie kann ich beim Klick auf den Schalter "Neu":
* einen neuen Datensatz erstellen
* das Zahlenfeld: Maximalzahl (ReNr) + 1
(Damit soll eine neue Nummer erstellt werden, die die höchste Zahl um "1"erhöht = neue z. B. Rechnungsnummer)
* Cursor auf Feld "Datum"

Die Funktion "AutoWert" hat den Nachteil, daß alle Datensätze (z. B. beim Import) neu duchnummeriert werden u. deshalb bestehende/alte Schlüßelnummern in dieses Feld (z. B. ReNr) nicht erfaßt werden können. Und, man kann keine Zahl manuell eintragen.....

Wäre um einen Tipp sehr dankbar!

Bis dann!

Gruß Tom

Antwort 7 von Herbert

Hallo Tom,
bastel Dir Deinen eigenen Buttom für "NEU".
Erstelle eine Abfrage mit allen Feldern Deiner Tabelle und stelle Dein Zahlenfeld auf Abwärtssortierung als so, das die höchste Zahl zuerst erscheint.

Dann öffne die Tabelle mit der Abfrage.
Beispielprozedur:

Dim Rst1 As Recordset
Dim db1 As Database
Dim Zaehler As Long
Set db1 = CurrentDb


Set Rst1 = db1.OpenRecordset("MeineAbfrage", DB_OPEN_DYNASET)
Zaehler = Rst1!MeinZahlenfeld
Rst1.AddNew
Zaehler = Zaehler + 1
Rst1!MeinZahlenfeld = Zaehler
Rst1.Update

Rst1.Close: Set Rst1 = Nothing
Set db1 = Nothing

MeinUnterForm.Requery ´ Oder was auch immer
Ende der Prozedur
Daten anfügen mußt Du dann aber in Deinem Formular disabeln.

Das sollte Dir weiterhelfen.
Gruß Herbert

Antwort 8 von Knubbel

Hallo Tom,

für deinen neuen DS (Rechnungs-Nr.) verwende doch einfach die DOMMAX-Funktion . und mit einer Makrozeile stellst du den Fokus auf "Datum".

mfg Knubbel

Antwort 9 von MrGit

Hi !

Vielen Dank euch - das werde ich ausprobieren.....

Gruß Tom

Antwort 10 von Knubbel

Hallo Tom,

anknüpfend an meine Antwort 8:

Ohne die Antwort von Herbert bewerten zu wollen (ich kenne mich mit VBA nicht aus) mein Vorschlag unter zu Hilfe nahme der eingebauten Makrofunktionen.

Ich unterstelle, dass dein Button "Neuer Datensatz" eine neue Eingabemaske (Formular) öffnet.

Nun erstellst du (mit dem Makroeditor) ein Makro Neuer_Datensatz. Dies Makro bindest du an die Eigenschaft "Beim Öffnen" des Formulars.

Aufbau des Makros:
1.Zeile: Bedingung: [ReNr] IST NULL
Aktion: SetzenWert Im Feld "Element" trägst du den Namen deines Steuerelements ein (z.B. ReNr)
Im Feld "Ausdruck" steht dann die Funktion DMax("[ReNr]+1";"Auftragsliste")
Hier unterstelle ich, dass deine Tabelle "Auftragsliste" heisst und das Datenfeld "ReNr" in der Tabelle vorhanden ist.
Durch die Bedingung wird sicher gestellt, dass nur dann eine um 1 erhöhte Nr eingetragen wird, wenn kein Wert vorhanden ist (das Makro wird nur bei einem neuen Datensatz ausgeführt).
2. Zeile: Aktion: GeheZuSteuerelement
Bei Steuerelementname gibst du Datum (oder wie dein Steuerelement heisst) ein.

Fertig

mfg Knubbel

Antwort 11 von MrGit

Hallo Knubbel ,

vielen Dank für den Tipp / die Anleitung - ich denke ich kann damit was anfangen..... ;-)

Super Sache hier.... - alleine würde ich nie so schnell dahinter kommen.... ;-)

Mein nächstes Thema ist: "Rundung" in Access 2002

Wie kann ich in einer Abfrage oder im Steuerelement das Ergebnis einer Formel (z. B.: Nettobetrag * 16% = 1,4445 ~ 1,45) auf 2 Nachkommastellen runden lassen ???
>> Nach den richtigen Rundungs-Regeln !!!

Bsp:
* 1,0145 = 1,02
* 9,9946 = 10,00
* 1,144 = 1,14
usw...............

Vielen Dank im voraus !!!

Bis dann !!!

Gruß Tom

Antwort 12 von Knubbel

Hi Tom,

was bezeichnest du mit "richtigen Rundungsregeln"?

kaufmännische (allgemeine) Rundung bedeutet bei deinen Beispielen (auf 2 Stellen):

* 1,0145 = 1,01
* 9,9946 = 9,99
* 1,144 = 1,14

Bei Access kannst du wie folgt runden:
Ergebnis:Int(Zahl*100+,5)/100

Solltest du eine andere Rundungsmethode wünschen, musst du halt die Formel anpassen.

mfg Knubbel

Antwort 13 von MrGit

Hi Knubbel ,

vielen Dank für Deine schnelle Antwort !!!

Also ich muß für die Finanzbuchhaltung meine Zahlen richtig auf- bzw. abgerundet haben. Auch für meine Rechungspositionen (Menge*Preis/100*Inhalt -> da gibts oft viele Nachkommastellen....;-) Möchte einfach von Anfang an mit 2 Nachkommastellen arbeiten - sonst gibts immer Differenzen beim Summieren.

Frage: 9,9946 = 9,99 nicht. 10,00 ???

-> ach ja, I glab des stimmt: die 3. Nachkommastelle entscheidet zur Auf- bzw. Abrundung.

Folgendes habe ich schon getestet - das Ergebnis ist nicht richtig:

INT-Formel: INT([Feldname]*20+0,5)/20

In meinem Fall - in einer Abfrage:

Int(([Bruttobetrag]/(100+[USt-Satz])*[USt-Satz])*20+0,5)/20

Ergebnissbeispiele:

* 14,01€ : 116 * 16 = 1,9324137931
-> sollte sein: 1,93 -> lt. Formel: 1,95

* 6.097,52€ : 116 * 16 = 841,03724138
-> sollte sein: 841,04 -> lt. Formel: 841,05

* 41,84€ : 116 * 16 = 5,7710344828
-> sollte sein: 5,77 -> lt. Formel: 5,75

Tja, fast - aber stimmt halt nicht ganz...


.........

Hab im net was gefunden - Formeln:

(1) >>>
Access hat keine kfm.Rundungsfunktion, daher muss man sie selbst programmieren, Ergebnis:

--------------------------------
Option Compare Database
Option Explicit

Function kfmRundung(varNr, Optional varPl = 2) As Double

kfmRundung = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^ varPl)

End Function
<<<

(2)>>>>

Math. Funktion:
trunc (x[, n]) abschneiden auf n Nachkommastellen
round (x[, n]) runden auf n Nachkommastellen

<<<<

Aber leider kann ich dies nicht umsetzten u. weiss auch gar nicht was damit anfangen bzw. wie damit umgehen.....

Schade daß Access das nicht automatisch kann... (außer die Formatierungen)....

Also dann - nochmal Danke..... ;-)

Gruß Tom

Antwort 14 von MrGit

uhps.... -> es funktioniert ja doch....

hab gerade Deine Formel angewandt:

Ergebnis:Int(Zahl*100+,5)/100

Des haut hin ->>> vielen vielen Dank !!!!!!!!! phuuhhh, jez bin I awa froh... !!!!!!!!!!!!!!!

Danke ;-)

Gute Nacht !!

Gruß Tom

Antwort 15 von Knubbel

Hi MrGit ,

mit deinen im Internet gefundenen Funktionen kann ich auch nichts anfangen.

Bei meinem Vorschlag (Multiplikation mit 100 und anschliessender Division durch 100) kannst du sicher auf 2 Nachkommastellen runden. Bei 3 Nachkommastellen ist der Multiplikator/Devisor halt 1000. Jede Zehnerstelle steht halt für eine Dezimalstelle (und das ohne Rundungsfehler).

Freut mich, dass mein Vorschlag geholfen hat.

mfg Knubbel

Antwort 16 von MrGit

Hallo Knubbel ,

vielen Dank - haut super hin.... ;-)

UND - das mit der neuen Nummer +1 funktioniert auch!

So hab ich´s mir nun zusammen gebastelt:

Tabelle "Neu+1"
-Felder: Nr / text / zahl

Formular "Neu+1"
-Felder: Nr / text / zahl.
-Schalter "Neu": Beim Klicken > Makro "Neu+1"

Makro"Neu+1"

1. Aktion: GeheZuDatensatz Objekttyp: Formular Objektname: Neu+1 Datensatz: Neuer
2. Aktion: SetzenWert Element: [Formulare]![Neu+1]![Nr] Ausdruck: DomMax("[Nr]+1";"Neu+1")
3. Aktion: GeheZuSteuerelement -Name: text

Klappt ! (hätte mir nicht gedacht, daß ich das hinbekomme.....;-)

Danke!

Bis dann...

Gruß Tom

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: