Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Access Problem Autowert und insert Funktion

Frage Microsoft Microsoft Office

Mitglied: greatmgm

greatmgm (Level 2) - Jetzt verbinden

19.09.2008, aktualisiert 15:01 Uhr, 8721 Aufrufe, 7 Kommentare

Guten Morgen zusammen,

ich hab folgendes Problem:

Access Tabelle im Backend mit Autowert als Primärschlüssel.
Zur Bearbeitung wird ein Teil der Tabelle in eine lokale kopiert.
Also 1. lokale löschen, dann via insert aus dem backend in das frontend kopiert.
Mit Anwendungsende werden die Daten wieder zurück geschoben, also "involvierter" Teil des backends löschen
und wieder mit insert die lokale ins backend kopiert.
Beide Tabellen haben die selbe Struktur.
Bisher klappte das auch gut, da die insert Funktion den Autowert nicht angefasst hat sondern
nur die eigentlichen Daten kopiert hat und der jeweiligen Tabelle die Steuerung des Autowerts
überlassen hat.
Heute morgen schmiert mir das frontend ab mit der Fehlermeldung ... doppelter Index ... usw. ihr wisst schon.
Und tatsächlich gehe ich in das backend öffne die Tabelle direkt und versuche einen neuen Datensatz einzugeben
wird als nächster Autowert eine Zahl vergeben die längst existiert.

Reparatur durchgeführt ... keine Besserung.
andere Tabelle mit selber Struktur angelegt, Daten kopiert, alte gelöscht, neue umbenannt, jetzt geht das wieder.

Liegt das an der insert Funktion ?
Sollte ich lieber mit while () wend arbeiten und über .addnew und .update die Daten einfügen ?

Danke für Hilfe.
Mitglied: KUBLIdata
19.09.2008 um 09:46 Uhr
Bei solchen Aktionen muss man wissen, was ein Autowert bedeutet.
Beim Kopieren der Daten von der Haupt-DB müssen die Autowerte zwecks späterem Abgleich kopiert werden. Die Temp-DB darf dann bekanntlich keine Autowerte, sonden normale Longwerte speichern.
Das geht ja bekanntlich bei Ihnen.
Jetzt, nachdem die Daten bearbeitet sind, wird das Ganze zurückgeschrieben. Aber nicht mit INSERT INTO..., sondern mit UPDATE TABLE SET X=, y=... WHER ID=ID.
Ein versehentliches Anfügen von Daten an die Haupt-DB kann nicht funktionieren.
Auch wenn die Daten vorher gelöscht würden, eine Autowert wird niemals wieder gleich vergeben. Nach dem Zurückschreiben muss per Abfrage sichergestellt werden, dass die Daten wirklich vorhanden sind in der Hauft-DB, anschliessend muss die Temp-Tabelle geleert werden.
Zu etwas anderem: Warum verknüpfen Sie die Tabelle nicht einfach und greifen darau zu. Ist die Haupt-DB nicht verfügbaer, muss offline gearbeitet werden?
Wenn die Haupt-DB verfügbar ist, wäre der richtige Schritt: Eine verknüpfte Tabelle anlegen in der Temp-DB. Dann ist schon alles erledigt.
Bitte warten ..
Mitglied: greatmgm
19.09.2008 um 10:39 Uhr
ok, das mit dem update table wird ich umsetzen,
und zu "zu etwas anderem", die Idee zur lokalen Variante des backends ist enstanden aus performance Gründen. Arbeite ich mit der verknüpften Variante des backends ist das sehr langsam, mit der lokalen Variante funktionierts.

Danke für den Tipp, probier ich gleich
Bitte warten ..
Mitglied: greatmgm
19.09.2008 um 14:08 Uhr
mmmh, jetzt klappt das Ganze recht gut, wenn es da nicht noch die Möglichkeit gäbe in dem lokalen frontend auch neue Datensätze zu erstellen ...
d.h. lokal brauch ich doch einen Autowert und mit update table werden nur vorhandene Positionen angefasst aber nicht die neu angelegten in der lokalen db.

Ich mach glaube doch lieber while () wend und .addnew
Bitte warten ..
Mitglied: KUBLIdata
19.09.2008 um 14:22 Uhr
Also:
Beim Neuerfassen im lokalen Frontend sollte ein "Dummy" vergeben werden. Dieser kann aus einer Funktion geholt werden, die den höchsten ID der Tabelle holt und um 1 erhöht. Dies geschieht NUR, weil im Feld "ID" etwas stehen sollte. Beim Updatestatement und auch beim Insert werden keine ID's mitgegeben.
Beim Zurückschreiben wird es nun etws interessanter. Eine Abfrage muss alle jene Datensätze UPDATEN, die bei beiden Tabellen vorhanden sind. Im zweiten Schritt werden all jene Datensätze, die NUR in der lokalen Tabelle vorkommen (zwangsäufig neue Datensätze) separat mittels INSERT INTO.. zurückgeschrieben.
Nun kann es auch sein, dass ein datensatz gelöscht werden sollte in der Backend-DB. Dies wird aber nur funktionieren, wenn der lokale Datensatz nicht gelöscht, sonden gekennzeichnet wird (zB. in einem Feld, zwei Underlines vorne an den Text schreiben). Dann heisst die Löschabfrage:
DELETE From <Frontendtabelle> WHERE ... (nur solche, die in der lokalen Tabelle mit "__" beginnen. Like-Operator benutzen)
Bitte warten ..
Mitglied: greatmgm
19.09.2008 um 14:34 Uhr
super, so gehts auch, stimmt, ich probier mal was schneller ist

Danke.
Bitte warten ..
Mitglied: KUBLIdata
19.09.2008 um 14:36 Uhr
Ich wünsche ein schönes Wochenende und keine grauen Haare !!!
Mein Motto war es immer und ist es geblieben: In Access ist alles möglich, nur die Wege dazu sind manchmal etwas mühsam
Bitte warten ..
Mitglied: greatmgm
19.09.2008 um 15:01 Uhr
wie wahr wie wahr ... und jetzt muss ich noch 30 Zeichen auffüllen
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Problem mit Funktion und Combobox (7)

Frage von Druide83 zum Thema Batch & Shell ...

Datenbanken
gelöst Access 2010 Insert Into bei Fehler Msgbox (2)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

JavaScript
LocalStorage für folgende Funktion (7)

Frage von xsto123 zum Thema JavaScript ...

Microsoft Office
gelöst Suche Access 2000 (3)

Frage von hesper zum Thema Microsoft Office ...

Neue Wissensbeiträge
Multimedia

Raspberry Pi als Digital-Signage-Computer

(1)

Information von BassFishFox zum Thema Multimedia ...

Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(16)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
Freigabe aus anderem Netz nicht erreichbar (33)

Frage von McLion zum Thema Router & Routing ...

Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail (24)

Frage von ahstax zum Thema Visual Studio ...

Batch & Shell
Batch Programm verhalten bei shoutdown -p (19)

Frage von Michael-ITler zum Thema Batch & Shell ...

Windows Netzwerk
Netzwerk Neustrukturierung (15)

Frage von IT-Dreamer zum Thema Windows Netzwerk ...