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
GELÖST

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

Frage Microsoft Microsoft Office

Mitglied: n4426

n4426 (Level 2) - Jetzt verbinden

19.07.2011, aktualisiert 13:44 Uhr, 39580 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
Windows 10
"geräte und drucker" unter w8 bzw. w10 zu starten dauert ewig (5)

Frage von tobias3355 zum Thema Windows 10 ...

Netzwerkmanagement
gelöst Servergespeicherte Profile, Starten von Windows dauert ewig lange bei externen Rechnern (3)

Frage von sammy65 zum Thema Netzwerkmanagement ...

Windows 7
Bitte warten (win7) dauert ewig auf Laptop? (7)

Frage von grillinator95 zum Thema Windows 7 ...

Datenbanken
gelöst Access 2010 SQL Tabellen Datensätze einfügen (6)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Neue Wissensbeiträge
Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(2)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (16)

Frage von Lynkon zum Thema TK-Netze & Geräte ...