AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-treiber
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-treiber

Ein Thema von Keflock · begonnen am 17. Nov 2008 · letzter Beitrag vom 17. Nov 2008
Antwort Antwort
Keflock

Registriert seit: 23. Nov 2006
17 Beiträge
 
Delphi 2007 Enterprise
 
#1

MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-trei

  Alt 17. Nov 2008, 13:04
Datenbank: MySQL • Version: 5.1 • Zugriff über: ODBC / ADO
Hallo zusammen,
wie öffne ich Tabellen, die sehr groß sind? Ich verwende TADOs und MySQL 5.1 ODBC. Mein Programm frag täglich ein Laufwerk ab und wertet die dort abgespeicherten Dateien aus. Es funktioniert so lange die Tabelle klein ist. Jetzt, wo ich ca. 8.000.000 Datensätze in einer Tabelle eingespielt habe, so steigt mein Programm bei öffnen der Connection aus:
Delphi-Quellcode:
  
  ADOTable1.Open;
  DateienverarbeitenClick(sender);
  saveMemo(Memo_Verzeichnis);
  ADOTable1.Close;
Früher hatte ich alle Tabellen (verwende insgesamt 8 Tabellen) beim Programmstart geöffnet, da stieg mein Programm bei ca. 6.000.000 Datensetzen verteilt auf die 8 Tabellen. Also dachte ich mir, dass ich zur bestimmten Zeit nur eine Tabelle geöffnet haben darf/kann. Das tue ich jetzt, aber ab 8.000.000 funktioniert es auch nicht mehr.
Ich habe 2GB RAM und eine Auslagerungdatei von 8192MB. Bei Öffnent der Tabelle steigt die RAM-Nutzung auf 1.4GB, es verbleibt noch ausgelagerter RAM frei, "Physikalischer Speicher (KB) => verfügbar" geht gegen 0, es wird ausgelagert und dann kommt der Abbruch:
"der odbc-treiber unterstützt die angeforderten eigenschaften nicht"
Ich habe bereits den CursorLocation auf clUseServer umgestellt. Das hatte ein wenig gebracht. Ich konnte von ca. 6.000.000 auf 8.000.000 die "Öffnungsgreze" hochsetzen.
Was kann ich den jetzt tun? Es gibt doch Möglichkeit bei MySQL nicht über einen ODBC-Treiber zu gehen? Irgendwie native Treiber, oder?
Danke
Kef
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 13:19
Zitat von Keflock:
Ich habe bereits den CursorLocation auf clUseServer umgestellt.
MySQL unterstütz AFAIK keine Serverseitigen Curser.

Zitat von Keflock:
Was kann ich den jetzt tun? Es gibt doch Möglichkeit bei MySQL nicht über einen ODBC-Treiber zu gehen? Irgendwie native Treiber, oder?
Eher die Programmlogik anpassen. Wieso werden Mio. von Datensätzen in einer Ergebnismenge benötigt? Wenns Sie benötigt wären dann wäre maximal ein Forward-Only-Curser benötigt + Kompos von Devart welchen einen Serverseitigen Curser "simulieren".
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Keflock

Registriert seit: 23. Nov 2006
17 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 13:55
Hallo,

also mit dem Cursor müsste es doch was gebracht haben, denn vorher konnte ich bis 6.000.000 quer über alle Tabelle (Tabelle 1 hatte damals ca. 2.000.000 Einträge) lesen, nachher bis ca. 8.000.000.

Zitat:
Eher die Programmlogik anpassen. Wieso werden Mio. von Datensätzen in einer Ergebnismenge benötigt? Wenns Sie benötigt wären dann wäre maximal ein Forward-Only-Curser benötigt + Kompos von Devart welchen einen Serverseitigen Curser "simulieren".
Kurze Beschreibung:
a) ich holle Dateien vom Laufwerk ab
b) schaue nach bestimmten Keywords
c) speichere die Keywords in der MySQL-DB
d) mit dem Query-Browser mache anschließend Abfragen

Mein Problem ist Punkt c). Um die Keywords abzuspeichern mache ich eine Connection.Open und hier kommmt es zu dem Fehler.

Wie kann ich die Progammlogik anpassen? Auch wenn ich nichts aus Deiten lesen würde, nur einfach die Tabelle über Connect öffnen würde, auch dann bekäme ich den Fehler.

Grüße
Kef
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 14:16
Wozu machst du eine Open beim einfügen ???

Da reicht doch execute oder ?
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 14:34
Um neue Daten einzufügen, brauchst du doch die bestehenden Daten nicht abzurufen!
Delphi-Quellcode:
Query1.SQL.Text := 'SELECT * FROM Tabelle WHERE 0=1'; // WHERE 0=1 verhindert, dass bestehende Daten abgerufen weerden
Query1.Open;

// ... Schleife über alle einzufügenden Daten
  Query1.Append;
  Query1['Feld1'] := ...
  Query1['Feld2'] := ...
  Query1.Post;
Man kann Datensätze auch mit INSERT einfügen; das ist noch ein bisschen schneller als obige Lösung.
Allerdings ist obige Lösung für den Programmierer bequemer.
Andreas
  Mit Zitat antworten Zitat
Keflock

Registriert seit: 23. Nov 2006
17 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 14:43
Hi,

ich verwende TADOConnection und TADOTable.

Bei TADOTable habe ich kein Execute, nur Open.

Was jetzt?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 14:49
Zitat von Keflock:
ich verwende TADOConnection und TADOTable.
Bei TADOTable habe ich kein Execute, nur Open.
Du ersetzt die TADOTable durch eine TADOQuery-Komponente.
Statt direkt das Property TableName zu setzen, setzt du jetzt das Property SQL auf den Inhalt:
SELECT * FROM Tabelle WHERE 0=1 Das Wort "Tabelle" ersetzt du durch den aktuellen Tabellennamen; is klar.
Alles andere bleibt wie es ist.
Andreas
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 14:50
Fauler Programmierer

Nimm Insert und eine Query und alles wird gut und wenn doch nicht nimm was vernünftiges zum Connecten auf die MySQL DB
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Keflock

Registriert seit: 23. Nov 2006
17 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: MySQL, 8.000.000 DatenS., Tabelle öffnen => der odbc-

  Alt 17. Nov 2008, 15:43
und es geht! Danke!

mfg
KEf
  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 19:12 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