Array wird immer größer
-
Hallo,
Ich erstelle ein Array aus einem DataTable:
DataTable^ _dt = gcnew DataTable; _dt = settings->_dt; String^ FilterExpression = "Date >= '" + StartDate.ToShortDateString() + "' AND Date <= '" + EndDate.ToShortDateString() + "'"; array<DataRow^>^ rowsSorted = _dt->Select(FilterExpression, L"Date");
Dann erstellen ich ein 2. Array, und möchte einen Eintrag aus dem 2. Array in das 1. an Indexposition 0 schreiben:
String^ query = "Date < '" + StartDate.ToShortDateString() + "'"; array<DataRow^>^ rowsSorted2 = _dt->Select(query, L"Date"); if (rowsSorted2->Length > 0) { rowsSorted2[rowsSorted2->Length - 1]["Date"] = StartDate; DataRow^ dr = rowsSorted2[rowsSorted2->Length - 1]; rowsSorted->SetValue(dr, 0); }
Das funktioniert auch erstmal, nur wird bei jedem aufruf der Funktion das Array rowsSorted um einen Index größer.
Aber der DataTable _dt bleibt geleich groß.
Ich verstehe nicht wie das Array immer größer werden kann, es müsste doch bei jedem neuen Aufruf der Funktion neu initialisiert werden, oder nicht?
Kann mir das jemand erklären?
-
Hallo Leute,
ich arbeite mit einer Access DB, nun möchte ich gerne aus der C++/CLI Anwendung ein Backup der DB erstellen, möglichst gezippt.
Ist das möglich?
Wenn ja, welche Funktion muss ich benutzen?Danke
Chris
-
Sry, falscher Beitrag...
Kann Dir aber auch nicht helfen..
Bin noch nicht so lange in der C++ Welt.
Komme aus ABAB.
-
Das gcnew für die DataTable kannst Du dir sparen.
Du holst deine Instanz ja sowiso aus settings.DataTable^ _dt = gcnew DataTable; _dt = settings->_dt; // wird zu: DataTable^ _dt = settings->_dt;
Kann es sein, dass nicht das array grösser wird, sondern die DataRow?
(Das array<> ist nämlich nicht veränderbar in den Dimensionen.)Simon
-
Erstmal danke für deine Antwort, das mit gcnew hab ich geändert.
Aber das Array wird tatsächlich größer, ich lasse mir per MessageBox die
rowsSorted->Length ausgeben, und bei jedem Funktionsaufruf ist die Länge um einen Höher.
Sicherheitshalber lasse ich mir auch die Anzahl der DataRows in dem _dt DataTable anzeigen, die bleibt aber gleich.
Das finde ich ja grad so kurios.
-
Ich habe jetzt mal den kopiervorgang geändert:
if (rowsSorted2->Length > 0) { rowsSorted2[rowsSorted2->Length - 1]["Date"] = StartDate; Array::Copy(rowsSorted2, rowsSorted2->Length - 1, rowsSorted, 0, 1); }
Aber das Problem bleibt, das Array wächst und wächst...
-
Habs gelöst:
if (rowsSorted2->Length > 0) { DataRow^ TempRow = _dt->NewRow(); TempRow[0] = StartDate; TempRow[1] = rowsSorted2[rowsSorted2->Length - 1][1]; TempRow[2] = rowsSorted2[rowsSorted2->Length - 1][2]; Array::Resize(rowsSorted, rowsSorted->Length + 1); Array::Copy(rowsSorted, 0, rowsSorted, 1, rowsSorted->Length - 1); rowsSorted->SetValue(TempRow, 0); }