Setlength musst du nicht explizit aufrufen.
Also deine Codeschnipsel sind entweder etwas unvollständig, oder der Fehler steckt in der Klasse
Query. Also ich weiß nicht, warum du
Query.Query zuweist.
Die SetLength kannst du weglassen, da nur ein Zeiger auf das erste Element des Arrays übergeben wird. Hierin könnte ein weiteres Problem liegen. Die Variable Data ist nur lokal. Es kann also gut sein, dass du den Speicherbereich des Arrays erstmal in aller Ruhe freigibst und anders verwendest. Ich gehe mal davon aus, dass die Klasse
Query die Funktion aufruft und das Ergebnis von TDBQuery.Query in ihrer Variablen
Query speichert. Wie gesagt, genau genommen wird nur ein Zeiger gespeichert und es ist egal was in dem entsprechendem Speicherbereich steht.
Du musst Data einfach nur etwas globaler definieren und dafür sorgen, dass dieses Array garantiert erst freigegeben wird, wenn du mit der Auswertung fertig bist.