Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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 1) - Jetzt verbinden

19.09.2008, aktualisiert 15:01 Uhr, 8450 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
Access Problem beim Bericht erstellen (1)

Frage von terpeberi zum Thema Microsoft Office ...

Microsoft Office
Access 2013 - Beispiel für mehrfach Update und Insert (2)

Frage von evolution zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...