<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[gelöst] TDataSet; schneller Datenzugriff]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein TDataSet mit mehreren tausend Datensätzen. Diese Daten sollen in eine Datei gespeichert oder in die Zwischenablage kopiert werden. Dazu habe ich mit For-Schleifen die Daten in einen String geschrieben:</p>
<pre><code class="language-cpp">AnsiString Data = &quot;&quot;;
for (DataSet1-&gt;First(); !DataSet1-&gt;Eof; DataSet1-&gt;Next())
  {
  for (int i=0; i&lt;DataSet1-&gt;Fields-&gt;Count; ++i)
    {
    Data += DataSet1-&gt;Fields-&gt;Fields[i]-&gt;AsString+&quot;\t&quot;;
    }
  Data[Data.Length()]='\n';
  }
Data.Delete(Data.Length(),1);
Clipboard()-&gt;AsText = Data;
</code></pre>
<p>Leider dauert das ziemlich lang.<br />
Scheinbar dauert das Hinzufügen der Strings zu <strong>Data</strong> die meiste Zeit. Ich hab schon std::string versucht, aber das ist noch langsamer.<br />
Hat jemand eine Idee, wie das zu beschleunigen ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186550/gelöst-tdataset-schneller-datenzugriff</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:18:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186550.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Jul 2007 07:46:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] TDataSet; schneller Datenzugriff on Tue, 10 Jul 2007 09:05:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein TDataSet mit mehreren tausend Datensätzen. Diese Daten sollen in eine Datei gespeichert oder in die Zwischenablage kopiert werden. Dazu habe ich mit For-Schleifen die Daten in einen String geschrieben:</p>
<pre><code class="language-cpp">AnsiString Data = &quot;&quot;;
for (DataSet1-&gt;First(); !DataSet1-&gt;Eof; DataSet1-&gt;Next())
  {
  for (int i=0; i&lt;DataSet1-&gt;Fields-&gt;Count; ++i)
    {
    Data += DataSet1-&gt;Fields-&gt;Fields[i]-&gt;AsString+&quot;\t&quot;;
    }
  Data[Data.Length()]='\n';
  }
Data.Delete(Data.Length(),1);
Clipboard()-&gt;AsText = Data;
</code></pre>
<p>Leider dauert das ziemlich lang.<br />
Scheinbar dauert das Hinzufügen der Strings zu <strong>Data</strong> die meiste Zeit. Ich hab schon std::string versucht, aber das ist noch langsamer.<br />
Hat jemand eine Idee, wie das zu beschleunigen ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321998</guid><dc:creator><![CDATA[Morris Szyslak]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] TDataSet; schneller Datenzugriff on Tue, 10 Jul 2007 08:27:24 GMT]]></title><description><![CDATA[<p>Wenn der Gesamtstring sehr groß ist (mehrere MB), dann könntest du bei std::string zuerst dir mit reserve(x) Speicher reservieren lassen (dann braucht der String nicht immer wieder beim Vergrößeren intern umkopiert werden).<br />
Bei AnsiString gibt es soetwas (leider) nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322035</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 10 Jul 2007 08:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] TDataSet; schneller Datenzugriff on Tue, 10 Jul 2007 09:05:03 GMT]]></title><description><![CDATA[<p>Danke für den Tip, funktioniert hervorragend. Klappt fast in Echtzeit und sieht jetzt so aus:</p>
<pre><code class="language-cpp">std::string data = &quot;&quot;;
data.reserve(102400); //erstmal 100k reservieren
for (DataSet-&gt;First(); !DataSet-&gt;Eof; DataSet-&gt;Next())
  {
  for (int i=0; i&lt;DataSet-&gt;Fields-&gt;Count; ++i)
    {
    data.append((DataSet-&gt;Fields-&gt;Fields[i]+&quot;\t&quot;).c_str());
    if (data.length()+1024 &gt; data.capacity()) //wenn Platz knapp wird
      data.reserve(data.capacity()+102400); //weitere 100k anfordern
    }
  data[data.length()-1]='\n';
  }
data.erase(data.length()-1,1);
Clipboard()-&gt;AsText = data.c_str();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1322069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322069</guid><dc:creator><![CDATA[Morris Szyslak]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:05:03 GMT</pubDate></item></channel></rss>