AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Schnelles schreiben in Access DB
Thema durchsuchen
Ansicht
Themen-Optionen

Schnelles schreiben in Access DB

Ein Thema von R2009 · begonnen am 26. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 10:02
Datenbank: MSaccess • Version: 2003 • Zugriff über: ADO
Hi,

ich nutze eine ADOconnection die zu einer Access Testdatenbank verbunden ist.
Normal eingestellt: Read/Write.
An die Connection ist eine ADOtable angeflanscht.

Delphi-Quellcode:
  For n:=1 to 1000 do
    begin
      ADOTable1.Append;
      ADOTable1.FieldByName('Nummer').AsInteger:=n;
      ADOTable1.Post;
    end;
Wenn ich diesen Programmteil laufen lasse dauert es mehr als 6 Sekunden bis dieser Teil abgeschlossen ist. Bei 10000 dauerts 1:07
Hab den post auch schon aus der For Schleife rausgezogen es hat sich nichts geändert.
Gibt es (ausser BDE und DBexpress) noch andere Möglichkeiten?
Fremdkomponenten kommen nicht in Frage (kosten Geld).
Mach ich sonst irgendetwas falsch?

Grüsse
rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 10:03
Versuch mal
Delphi-Quellcode:
For n:=1 to 1000 do
    begin
      ADOTable1.Append;
      ADOTable1.FieldByName('Nummer').Value:=n;
    end;
ADOTable1.Post;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 10:05
Welche Curserlocation verwendest du?
Bei Access ist clUseServer angesagt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 10:06
Hi mkinzler,

ich will ja nix sagen, aber:
Zitat:
Hab den post auch schon aus der For Schleife rausgezogen es hat sich nichts geändert.
Nutzt nichts.
Ich kann leider auch nicht von Access weg.

Grüsse
rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 10:08
Hi,
ich nutze: clUseClient
ich probiers aus.

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 10:13
Hi,
hab bei Tadoconnection und bei Tadotable cursorlocation auf clUseServer gesetzt,
jetzt funktioniert das!

In der Delphi Hilfe steht:
Zitat:
Mit CursorLocation können Sie festlegen, ob eine clientseitige oder eine serverseitige Cursor-Bibliothek verwendet wird. Der Wert wirkt sich aber nur auf Verbindungen aus, die nach der Zuweisung geöffnet werden. Der Standardwert ist clUseClient.

Ein Client-Cursor bietet mehr Flexibilität. Die gesamten Daten werden auf den lokalen Rechner abgerufen und hier bearbeitet. Dadurch können Aktionen durchgeführt werden (z. B. spezielle Sortier- und Filteroperationen), die vom Server möglicherweise nicht unterstützt werden. Da die SQL-Anweisungen auf dem Server ausgeführt werden, wird beim Einschränken der Ergebnismenge durch eine WHERE-Klausel nur eine Teilmenge der Daten an den lokalen Cursor übertragen.

Ein serverseitiger Cursor ist nicht so flexibel, kann aber bei sehr großen Ergebnismengen vorteilhaft (oder sogar notwendig) sein. Er muss verwendet werden, wenn die Größe der Ergebnismenge den verfügbaren Festplattenspeicher des Client-Systems überschreitet. Viele Server unterstützen außerdem nur Vorwärts-Cursor, bei denen der Satzzeiger in der Ergebnismenge nicht in Richtung Tabellenanfang bewegt werden kann.
So ganz versteh ich das nicht. Die Datenbank liegt doch hier auf meinem Rechner.
Kann mir das jemand mit kurzen Worten erklären!

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 10:45
Du hast mit Access ein Desktop-DB. Die Logik läuft alles in deinem Adressraum und die Daten liegen auch schon so vor das ein Clientseitiger Curser nur unnötige Speicherkopieraktionen bewirkt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 11:12
Hi,
sorry aber ist mir immer noch zu lahm. Ich habe jetzt für einen Durchsatz von 100000 Integerzahlen einen Zeitbedarf von 57sec d.h.
der Rechner braucht 0,6 msec / Datensatz. Das kann doch nicht der Weisheit letzter Schluss sein. Wenn ich den post verlagere braucht er sogar noch länger.
Kann ich den Datenbankinhalt irgendwie im Speicher halten, sodass wenigstens die Plattenzugriffe reduziert werden?

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 11:20
Du könntest versuchen mit INSERTS-Statements direkt arbeiten. Diese dann prepared Anlegen und u.U. mehrere Inserts in einem Statement laufen lassen. Ob das jedoch bei Access viel bringt?

Wenn schau mal ob nicht evtl. ein Virenscanner die MDB-Dateien permanent checkt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Schnelles schreiben in Access DB

  Alt 26. Okt 2009, 11:36
Oh Mann,
unser Mcafee. Das könnte sein!

Danke Bernhard

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz