Top-Themen

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

gelöst Datensatz über VBA hinzufügen (recordset.AddNew) dauert ewig

Mitglied: n4426

n4426 (Level 2) - Jetzt verbinden

19.07.2011, aktualisiert 13:44 Uhr, 40650 Aufrufe, 4 Kommentare

Hallo zusammen,

ich hab eine Access-Datenbank (Frontend). Als Backend verwende ich MS SQL Server 2008.

Mein Problem besteht darin, dass ich ein Log-Tabelle habe, die mittlerweile ca. 350.000 Datensätze enthält.

Wenn ich jetzt über diesen VBA-Code eine neuen Datensatz in die Tabelle schreibe, dauert es ca. 1-2 Sekeunden.

Ich hab jetzt zum Testen eine leere Tabelle mit gleicher Struktur angelegt. Da wird der Datensatz ohne merkliche verzögerung eingetragen (also weniger als 0,5 Sec).

Hat da einer von euch eine Idee, wie man das schneller hinbekommt? (eine leere Tabelle ist ja nicht wirklich die lösung)


01.
Dim DB As Database 
02.
Dim rs As Recordset 
03.
 
04.
Set DB = CurrentDb() 
05.
 
06.
 
07.
' Benutzerdaten 
08.
Set rs = DB.OpenRecordset("TBL_History", dbOpenDynaset, dbSeeChanges) 
09.
  
10.
    rs.AddNew 
11.
        rs!ID = logIDNr 
12.
        rs!Tabelle = "TBL_123" 
13.
        rs!User = thisUser.ID 
14.
        rs!Date = Date + Time 
15.
        rs!Feld = logFeld 
16.
        rs!WertALT = logWertAlt 
17.
        rs!WertNEU = logWertneu 
18.
    rs.Update 
19.
rs.Close 
20.
 
21.
DB.Close
mfg
n4426
Mitglied: NetWolf
19.07.2011 um 14:40 Uhr
Moin Moin,

ich vermute mal, dass ein oder mehrere Indexe in der Tabelle definiert sind. Das verzögert natürlich die Zugriffszeit.

Auch würde ich vor dem rs.AddNew ein rs.MoveLast einfügen. Das sollte das Schreiben beschleunigen.

Grundsätzlich ist die Frage: Wann wird diese Historie geschrieben? So wie ich das sehe, bei jeder Änderung in einem Feld!?
Das ist imho übertrieben. Wenn das Formular verlassen wird, könnten die geänderten Feldinhalte alle auf einmal geschrieben werden.

Wenn wirklich bei jeder Änderung eines Feldes diese Prozedur aufgerufen wird, solltest du nicht jedes mal den Recordset öffnen und wieder schließen.
Halte Ihn offen und schließe ihn wenn das Programm beendet wird.

Zusätzlich würde ich noch die ODBC Einstellungen von Access prüfen und reduzieren. Sorry, da gibt es keine Vorgabewerte, es hilft nur try & error in Abhängigkeit von der Umgebung.
Du solltest dir auch langfristig eine Lösung einfallen lassen, denn die Datensätze werden nicht weniger.

Vielleicht lässt es sich vereinbaren, dass nur der alte Wert mit User-ID und Zeit/Datum gespeichert wird, dann könnte man die bestehende Tabelle um diese Felder einfach erweitern.

Beispiel:
Aktuelles_Feld
Alter_Feldwert
User-ID
Datum/Zeit

Du hättest dann pro Feld natürlich drei zusätzliche Felder in der Tabelle, die du aber auch zu einem Feld zusammenfassen könntest. Historie = User-ID & "|" & Datum/Zeit & "|" & Alter_Feldwert
Der Vorteil, man könnte sehr schnell auf die alten Werte zugreifen

Grüße aus Rostock
Wolfgang
(Netwolf)
Bitte warten ..
Mitglied: n4426
19.07.2011 um 15:28 Uhr
Hi Wolfgang,

als das rs.movelast hat jetzt zumindest nicht spürbar was verändert.

Wie kann ich den recordset offen halten?

Ich hab die Funktion zum schreiben des Logs in einem Modul abgelegt, das aus verschiedenen Formularen aufgerufen.

mfg
n4426

EDIT: oder ist es vieleicht besser, für das Log einfach nur ein SQL-Comand (INSERT ....) zu schreiben?
Bitte warten ..
Mitglied: n4426
20.07.2011 um 21:23 Uhr
habs jetzt über DoCmd.RunSQL("Insert ....") gemacht, das läuft super schnell.

mfg
n4426
Bitte warten ..
Mitglied: NetWolf
21.07.2011 um 01:14 Uhr
*vordenkopfschlag*

logisch, klar ist das schneller als vorher einen Dynaset zu erzeugen.

Grüße aus Rostock
Wolfgang
(Netwolf)
Bitte warten ..
Ähnliche Inhalte
Microsoft Office

Excel VBA CreateObject("Scripting.FileSystemObject") auf Netzlaufwerk dauert ewig

gelöst Frage von MeierjoMicrosoft Office5 Kommentare

Hallo zusammen Habe ein Excel-Makro, welches auf einem Netzlaufwerk ein Verzeichnis und ein Unterverzeichnis nach dem Vorhanden sein einer ...

Windows Netzwerk

Computereinstellungen werden übernommen. Dauert ewig

gelöst Frage von Mad-EyeWindows Netzwerk1 Kommentar

Hallo zusammen, ich versuche gerade herauszufinden warum alle unsere Computer etwa 2 Minuten im Bildschirm "Computereinstellungen werden übernommen" stehen ...

Xenserver

Export VM dauert ewig

gelöst Frage von goodbytesXenserver4 Kommentare

Hallo, ich stehe vor dem Problem, dass ich VM`s von einem alten XEN-Server auf eine neue Maschine transferieren muss. ...

Datenbanken

Datensatz hinzufügen, nicht überschreiben Access

gelöst Frage von Dr.CornwallisDatenbanken19 Kommentare

Liebe Gemeinde, ich habe folgenden Code (bei Button klick): Wähle ich mit diesem Code einen anderen Wert im Kombifeld ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 5 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 8 StundenAdministrator.de Feedback10 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...