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, 42617 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 ...

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 ...

PHP

Symfonie Datenbank import dauert ewig

gelöst Frage von AlchimedesPHP

Hallo, hat jemand Erfahrung mit dem symfonie Framework und kann mich hier beruhigen weil der Import einer Datenbank ewig ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate
Meine Wissenssammlung zu Bitlocker
Erfahrungsbericht von DerWoWusste vor 15 StundenVerschlüsselung & Zertifikate2 Kommentare

Die Motivation für diesen Beitrag waren die vielen Posts rund um dieses Thema, die deutlich machen, wie viele Einzelaspekte ...

E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 2 TagenE-Mail11 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 2 TagenHyper-V

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 2 TagenSicherheits-Tools1 Kommentar

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Heiß diskutierte Inhalte
Netzwerke
Hilfe bei der Planung meines Heimnetzwerks
Frage von DHD082Netzwerke14 Kommentare

Hallo zusammen, wir bauen gerade ein Einfamilienhaus, welches ich mit einem Heimnetzwerk ausstatten möchte. Da ich zwar auch in ...

Datenschutz
Gilt ein Ransomware-Befall als Datenpanne nach DSGVO?
Frage von MOS6581Datenschutz13 Kommentare

Moin Kollegen, wenn sich jemand Ransomware einfängt und dadurch bspw. Kundendaten verschlüsselt werden; gilt dies dann als meldepflichtige Datenpanne ...

Tipps & Tricks
Nagstamon und PRTG Monitoring
Frage von Der.ITlerTipps & Tricks13 Kommentare

Hallo Ihr, heute am Sonntag bin ich mal früh aufgestanden um mich mit dem Problem von Gestern zu beschäftigen. ...

Hardware
Sophos SG135 - Routing
Frage von Xaero1982Hardware13 Kommentare

Moin Zusammen, ich ersetze gerade nen alten Cisco DualWAN Router durch eine SG 135. Ich muss bestimmte Ziele über ...