![]() |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Zitat:
Du solltest ggf. mal etwas weiter ausholen was Du erreichen willst, und welche Daten Du hast. Solange Du darauf bestehst 3Mio Datensätze einzulesen, woher kommen die überhaupt?, drehen wir uns nur im Kreis. Gruß K-H |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Zitat:
Warum lässt Du in "intern" nicht 'Select * from Tabelle Where <gehört zum Gegenstand>" ablaufen. Es ist kaum vorstellbar, dass wirklich 3 Millionen Bestandteile zu einer Zeichnung gehören. |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
sorry Jungs : das Hinterfragen ob ich wirklich 3 Mio Datensätze brauche ist sinnlos, es sind heute in unserem Problem-Projekt 3 Mio records - können aber auch mal deutlich mehr werden;
Delphi-Quellcode:
// von ~ 10 Records bis zu 10 Mio .... alles ist technisch möglich
/// aquery.sql.add ('select* from database where material = 'Alu''); aquery.open; LoopIndex := aquery.recordCount for i:= 0 to LoopIndex do begin ReadSinglerecordFromTable; CopySingleRecordIntoObjectList; aquery.next; // ist natürlich auch enthalten :-) end; // die ObjectList darf nur durch den verfügbaren Hauptspeicher am Computer begrenzt sein // ich brauche alle Daten in der Liste !!!!!!! MachwasMitderObjectList; SchreibeObjectListInTabelleZurück, |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Das ist nicht dein Ernst, Du liest 3+ Mio Datensätze ein, nur zu ermitteln wieviel es sind?
:shock:
Delphi-Quellcode:
sollte das Selbe machen nur halt schenller und mit minimalen Speicherverbrauch!!!
aQuery.Sql.Text := 'select count(*) from database where material = :material;';
aQuery.Paramters.Params[0].asString := 'Alu'; aQuery.Open; LoopIndex := aquery.Fields[0].asInteger; |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Delphi-Quellcode:
Für das Query ist das kein Problem, denn dem kann man ja sagen, daß es die Daten noch im Datenbankserver belassen soll und nur nach und nach die "benötigten" Records nachladen soll.
//LoopIndex := aquery.recordCount
//for i:= 0 to LoopIndex do while not aquery.EOF do begin ReadSinglerecordFromTable; CopySingleRecordIntoObjectList; aquery.Next; end; Aber mit deiner Liste kannst du dennoch an die Grenzen des lokalen Arbeitsspeichers stoßen. Und nee, im Grunde braucht man die Liste nicht, wenn man die RecNo's der Datensätze nimmt und dann auf das Query zugreift. |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Wobei ja auc h interessant wäre, was ReadSinglerecordFromTable() genau macht
|
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Zitat:
Zitat:
ganz einfach : procedure ReadSinglerecordFromTable() begin aClass := TDatabaseClassContent.create; CopyDBRecord (aClass ); // die meisten Felder der Klasse werden hier 1:1 aus der DB gefüllt BerechneWas; // ein paar Sachen muss ich aber noch separat berechnen end; |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Ich würde das ja mit
Code:
lösen.
LIMIT
Du kannst dir den Count() der Daten holen und dann den Index immer weiter verschieben. Das ist um einiges besser als x-Millionen Datensätze zur gleichen Zeit.. Edit: MSSQL hat keinen Limit-Befehl wie MySQL, richtig? :-( Das könnte dir weiterhelfen: ![]() Schlagt mich nicht, wenn ich auf der falschen Fährte bin.. |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Zitat:
Wäre es da nicht einfacher sich mit der ursprünglichen Query nur die IDs zu holen und die CopyDBRecord Prozedur entsprechend anzupassen, dass die sich nur den jeweils einen Datensatz mit der aktuellen ID aus der DB holt? |
AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error
Zitat:
Wobei dann weiterhin interessant wäre, was MachwasMitderObjectList(); genau macht...:) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz