<?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[IBDataSet und grid schnellerer zugriff]]></title><description><![CDATA[<p>Hallo,</p>
<p>wieder mal hab ich ein problem und brauche eure hilfe! :p</p>
<p>Also ich will meine Datensätze die ich via select anweisung in IBDataSet habe in ein Grid reinkopieren!<br />
Sicherlich werden jetzt einige fragen warum ich nicht einfach ein DataSource mit einen DBGrid verbinde und fertsch... ja, das DBGrid genügt mienen ansprüchen (Layout und Funktionalität) nicht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Deshalb habe ich mir ein AdvStringGrid besorgt und will nun meine DBDaten da drin haben!</p>
<p>Ich hab das mit zwei schleifen gelöst, aber irgendwie dauert das vieeeeel zu lange (ca. 2,30 min bei 55000 Datensätzen) man bedenke das ein DBGrid nichmal ne sekunde brauch!???? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Hier mein ansatz:</p>
<pre><code class="language-cpp">StringGrid1-&gt;ColCount = IBDataSet1-&gt;Fields-&gt;Count;
	StringGrid1-&gt;RowCount = IBDataSet1-&gt;RecordCount;
	IBDataSet1-&gt;First();

	for (int i = 0; !IBDataSet1-&gt;Eof; i++, IBDataSet1-&gt;Next())
		{
			for (int j = 0; j &lt; IBDataSet1-&gt;Fields-&gt;Count; j++)
				{
					StringGrid1-&gt;Cells[j][i] = IBDataSet1-&gt;Fields-&gt;Fields[j]-&gt;AsString;
				}
		}
</code></pre>
<p>Also das muß doch irgendwie möglich sein die daten in ein Grid nahezu so schnell wie in ein DBGrid reinzuladen!</p>
<p>Tia</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195892/ibdataset-und-grid-schnellerer-zugriff</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 11:15:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195892.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Oct 2007 09:46:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Tue, 23 Oct 2007 09:46:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wieder mal hab ich ein problem und brauche eure hilfe! :p</p>
<p>Also ich will meine Datensätze die ich via select anweisung in IBDataSet habe in ein Grid reinkopieren!<br />
Sicherlich werden jetzt einige fragen warum ich nicht einfach ein DataSource mit einen DBGrid verbinde und fertsch... ja, das DBGrid genügt mienen ansprüchen (Layout und Funktionalität) nicht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Deshalb habe ich mir ein AdvStringGrid besorgt und will nun meine DBDaten da drin haben!</p>
<p>Ich hab das mit zwei schleifen gelöst, aber irgendwie dauert das vieeeeel zu lange (ca. 2,30 min bei 55000 Datensätzen) man bedenke das ein DBGrid nichmal ne sekunde brauch!???? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Hier mein ansatz:</p>
<pre><code class="language-cpp">StringGrid1-&gt;ColCount = IBDataSet1-&gt;Fields-&gt;Count;
	StringGrid1-&gt;RowCount = IBDataSet1-&gt;RecordCount;
	IBDataSet1-&gt;First();

	for (int i = 0; !IBDataSet1-&gt;Eof; i++, IBDataSet1-&gt;Next())
		{
			for (int j = 0; j &lt; IBDataSet1-&gt;Fields-&gt;Count; j++)
				{
					StringGrid1-&gt;Cells[j][i] = IBDataSet1-&gt;Fields-&gt;Fields[j]-&gt;AsString;
				}
		}
</code></pre>
<p>Also das muß doch irgendwie möglich sein die daten in ein Grid nahezu so schnell wie in ein DBGrid reinzuladen!</p>
<p>Tia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390432</guid><dc:creator><![CDATA[Karlos2323]]></dc:creator><pubDate>Tue, 23 Oct 2007 09:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Tue, 23 Oct 2007 09:49:10 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Dein Problem ist das du alles auf einmal in das Grid einträgst. Du solltest nur das eintragen was Grad zu sehen ist.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390434</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 23 Oct 2007 09:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Tue, 23 Oct 2007 10:12:32 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort, aber wie soll ich das machen?</p>
<p>Tia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390453</guid><dc:creator><![CDATA[Karlos2323]]></dc:creator><pubDate>Tue, 23 Oct 2007 10:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Tue, 23 Oct 2007 11:20:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>AdvStringGrid besitzt die Methoden BeginUpdate() und EndUpdate().<br />
Wenn du Sie wie folgt einsetzt, wird die Liste deutlich schneller erzeugt.</p>
<pre><code class="language-cpp">StringGrid1-&gt;BeginUpdate();
for (int i = 0; !IBDataSet1-&gt;Eof; i++, IBDataSet1-&gt;Next())
        {
            for (int j = 0; j &lt; IBDataSet1-&gt;Fields-&gt;Count; j++)
                {
                    StringGrid1-&gt;Cells[j][i] =  IBDataSet1-&gt;Fields-&gt;Fields[j]-&gt;AsString;
                }
        }	
StringGrid1-&gt;EndUpdate();
</code></pre>
<p>Gruß FireBirdSQL</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390473</guid><dc:creator><![CDATA[FireBirdSQL]]></dc:creator><pubDate>Tue, 23 Oct 2007 11:20:07 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Tue, 23 Oct 2007 11:55:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für den tipp, aber eine deutliche preformance steigerung is da au net drin!</p>
<p>IMHO dauert das naviegieren im datensatz zu lange (IBDataSet1-&gt;Next()).</p>
<p>Gibt es nicht eine möglichkeit auf alle datensätze der select anweisung zu zu greifen (d.h. ohne den Zeiger per Next() zu verschieben)? Schließlich liegen ja alle datensätze schon nach der Select anweisung beim client in IBDataSet vor!</p>
<p>Tia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390497</guid><dc:creator><![CDATA[Karlos2323]]></dc:creator><pubDate>Tue, 23 Oct 2007 11:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Tue, 23 Oct 2007 12:45:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Schließlich liegen ja alle datensätze schon nach der Select anweisung beim client in IBDataSet vor</p>
</blockquote>
<p>Das ist so nicht richtig. Nur wenn IBDataSet-&gt;FetchAll() aufgerufen wird werden alle Daten geholt.</p>
<p>Wie ist das AdvStringGrid initialisiert ? Die Anzahl von Zeilen bzw. Spalten sollte man schon vor dem Füllen mit Daten setzen.</p>
<pre><code class="language-cpp">IBDataSet1-&gt;FetchAll();
  int iZeilen = IBDataSet1-&gt;RecordCount ;
  int iSpalten = IBDataSet1-&gt;Fields-&gt;Count;

  StringGrid1-&gt;BeginUpdate();

  StringGrid1-&gt;RowCount = iZeilen;   // bei FixedRow = 0;
  StringGrid1-&gt;ColCount = iSpalten;  // bei FixedCol = 0;

   for (int i = 0; i &lt; iZeilen ; i++)
     for (int j = 0; j &lt; iSpalten ; j++)
                {
                    StringGrid1-&gt;Cells[j][i] =     IBDataSet1-&gt;Fields-&gt;Fields[j]-&gt;AsString;
                }
   IBDataSet1-&gt;Next();
}
</code></pre>
<p>Hast Du mal TDBAdvGrid probiert ?</p>
<p>Gruß FSQL</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390533</guid><dc:creator><![CDATA[FireBirdSQL]]></dc:creator><pubDate>Tue, 23 Oct 2007 12:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Tue, 23 Oct 2007 13:37:26 GMT]]></title><description><![CDATA[<p>Also, wenn ich</p>
<pre><code class="language-cpp">IBDataSet1-&gt;FetchAll();
  int iZeilen = IBDataSet1-&gt;RecordCount ;
  int iSpalten = IBDataSet1-&gt;Fields-&gt;Count;

  StringGrid1-&gt;BeginUpdate();

  StringGrid1-&gt;RowCount = iZeilen;   // bei FixedRow = 0;
  StringGrid1-&gt;ColCount = iSpalten;  // bei FixedCol = 0;

   for (int i = 0; i &lt; iZeilen ; i++)
     for (int j = 0; j &lt; iSpalten ; j++)
                {
                    StringGrid1-&gt;Cells[j][i] =     IBDataSet1-&gt;Fields-&gt;Fields[j]-&gt;AsString;
                }
   IBDataSet1-&gt;Next();
}
</code></pre>
<p>nutze ist das resultat das selbige (das Naviegieren im Datensatz dauert zu lange)!</p>
<blockquote>
<p>Hast Du mal TDBAdvGrid probiert ?</p>
</blockquote>
<p>Ja damit hat es ja angefangen... das Hauptproblem war eigentlich das ich meine Datensätze immer aktuell wollte (sprich wenn die Datensätze im grid nach Namen sortiert sind sollen diese nach änderungen am client auch sichtbar sein z.B. neuen namen &quot;Bauer&quot; einfügen)! Da wir ja wissen das wenn man einen neuen datensatz hinzufügt dieser am ende steht blieb nur die möglichkeit DataSet zu schließen und wieder zu öffnen!<br />
Doch das tolle TDBAdvGrid braucht 7 sec um den Datensatz zu öffnen wären ein DBGrid nichmal 1 sec braucht??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Das komische jedoch ist das wenn ich mich im builder (nicht zur laufzeit) mit der DB verbinde zeigt TDBAdvGrid die datensätze in &gt; 1 sec an???<br />
Naja, und was mich absolut vom TDBAdvGrid abgebracht hat ist das es beim grupieren / sortieren eine halbe ewigkeit braucht da ist ein SQL-Statement 1000 mal schneller!</p>
<p>Hoffe es gibt noch irgend eine möglichkeit mein AdvGrid schnell mit den Daten aus DataSet zu füllen?</p>
<p>oder nutze ich das TDBAdvGrid einfach nur fasch?</p>
<p>Tia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390564</guid><dc:creator><![CDATA[Karlos2323]]></dc:creator><pubDate>Tue, 23 Oct 2007 13:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Wed, 24 Oct 2007 07:26:18 GMT]]></title><description><![CDATA[<p>Wie akari schon gesagt hat, erst mal nur das Anzeigen, was der User im Moment sieht und den Rest dann erst nachladen, wenn der User sich im Grid bewegt.</p>
<p>Ehrlich gesagt halte ich aber das Anzeigen von 55000 Datensätzen für unsinnig. Niemand will so viele Datensätze sehen. Ich würde ein Filtern der Daten auf eine überschaubare Menge für sinnvoller halten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390970</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 24 Oct 2007 07:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Thu, 25 Oct 2007 12:30:53 GMT]]></title><description><![CDATA[<p>So, jetzt will ich das so machen wie ihr mir das vorgeschlagen habt (ist auch die schnellste lösung), aber ich finde keinen ansatz wie ich immer nur das ins grid lade was gerade angezeigt wird!?</p>
<p>Also ich habe die Methode</p>
<pre><code class="language-cpp">void __fastcall TForm1::AdvStringGrid1DrawCell(TObject *Sender, int ACol,
	  int ARow, TRect &amp;Rect, TGridDrawState State)
{
}
</code></pre>
<p>Aber immer wenn ich der zelle was zuweise wie:</p>
<pre><code class="language-cpp">void __fastcall TForm1::AdvStringGrid1DrawCell(TObject *Sender, int ACol,
	  int ARow, TRect &amp;Rect, TGridDrawState State)
{
AdvStringGrid1-&gt;Cells[1][ARow] = &quot;blaaaa&quot;; 
}
</code></pre>
<p>lande ich in einer verdamten endlos schleife!</p>
<p>Bitte gebt mir mal nen tip was ich da falsch mache!?</p>
<p>Tia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391832</guid><dc:creator><![CDATA[Karlos2323]]></dc:creator><pubDate>Thu, 25 Oct 2007 12:30:53 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Thu, 25 Oct 2007 13:39:57 GMT]]></title><description><![CDATA[<p>Das Ereignis DrawCell ist (wie der Name ja sagt), zum grafischen Anzeigen des aktuell zum Grid zugehörigen Text zuständig.<br />
D.h. wenn du den Text änderst, wird natürlich wieder DrawCell aufgerufen (-&gt; Rekursion).</p>
<p>Entweder du zeichnest in DrawCell mittels Zugriff auf AdvStringGrid-&gt;Canvas den Text von Hand oder aber du benutzt ein anderes Event: OnTopLeftChanged.<br />
Sobald der Anwender scrollt kopierst du die Daten aus der Datenbank in das StringGrid (natürlich nur soviele Daten wie auch angezeigt werden, d.h. da mußt du ein bißchen mit StringGrid-&gt;Height und StringGrid-&gt;RowHeights rechnen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391907</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 25 Oct 2007 13:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Thu, 25 Oct 2007 14:08:12 GMT]]></title><description><![CDATA[<p>Das klingt ja so weit ganz gut, doch wenn ich AdvStringGrid-&gt;Canvas benutze kann ich meine ausgabenformatierung vergessen, und wenn ich OnTopLeftChanged nutze weis ich net mehr an welcher stell ich im datensatz bin sobald der user sich mit der scrollBar bewegt!? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391927</guid><dc:creator><![CDATA[Karlos2323]]></dc:creator><pubDate>Thu, 25 Oct 2007 14:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Thu, 25 Oct 2007 17:21:58 GMT]]></title><description><![CDATA[<p>So,</p>
<p>habs jetzt über OnTopLeftChanged ,AdvStringGrid-&gt;TopRow und nen bissel rumgrechne mit der gid und column höhe gelöst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392044</guid><dc:creator><![CDATA[karlos 2323]]></dc:creator><pubDate>Thu, 25 Oct 2007 17:21:58 GMT</pubDate></item><item><title><![CDATA[Reply to IBDataSet und grid schnellerer zugriff on Thu, 25 Oct 2007 17:26:19 GMT]]></title><description><![CDATA[<p>Super, geht doch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392047</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 25 Oct 2007 17:26:19 GMT</pubDate></item></channel></rss>