<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2591628</guid>
        <pubDate>Tue, 11 May 2010 16:31:22 +0000</pubDate>
        <title>ClientDataSet и поля типа ftDataSet</title>
        <link>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2591628</link>
        <description><![CDATA[S-V-E: Ха&#33;  :crazy:  Я же не создавал записи в самом ClientDataSet&#33; Ну я и  :wall: … Теперь все нормально, проверил — работает как надо   :)   Спасибо большое за ответы&#33; <br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>на больших таблицах мне не удавалось получить датасет с симнадцатой строчки</div></div><br>
спасибо за житейский совет  :) , учту на будущее, но у меня их всего лишь 12 :blush: <br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>но таблицы у меня были и впрям большие (грузилось из xml файла 30-70 мб)</div></div><br>
у меня каждая максимум 1,5-2 Мб<br>
Еще раз спасибо за ответы&#33;  :thanks:]]></description>
        <author>S-V-E</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2590671</guid>
        <pubDate>Mon, 10 May 2010 17:40:21 +0000</pubDate>
        <title>ClientDataSet и поля типа ftDataSet</title>
        <link>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2590671</link>
        <description><![CDATA[ViktorXP: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=302756&view=findpost&p=2590561'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>S&#045;V&#045;E &#064; <time class="tag-quote__quoted-time" datetime="2010-05-10T15:21:01+00:00">10.05.10, 15:21</time></span><div class='quote '>Поэтому добраться до них у меня получилось только через NestedDataSet:</div></div><br>
блин. моя ошибка. <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=302756&view=findpost&p=2590561'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>S&#045;V&#045;E &#064; <time class="tag-quote__quoted-time" datetime="2010-05-10T15:21:01+00:00">10.05.10, 15:21</time></span><div class='quote '>Вот только записи во вложенный датасет не добавляются — выходит ошибка «at beginning of table» и после вставки записей всегда -1. </div></div><br>
Может что то не так делаешь. вот пример как динамически создать записи с вложенным дата сетом<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;ClientDataSet1.FieldDefs.Add(&#39;id&#39;, ftAutoInc); // добавляем поля в &quot;родительский&quot; датасет</div><div class="code_line">&nbsp;&nbsp;ClientDataSet1.FieldDefs.Add(&#39;child_dataset&#39;, ftDataSet);</div><div class="code_line">&nbsp;&nbsp;with ClientDataSet1.FieldDefs[1].ChildDefs do // добавляем поля в &quot;дочерний&quot; датасет</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Add(&#39;id&#39;, ftAutoInc);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Add(&#39;name&#39;, ftString, 20);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;ClientDataSet1.CreateDataSet; // создаем датасет.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;ClientDataSet1.Insert; // создаем строчку в родительском датасете</div><div class="code_line">&nbsp;&nbsp;with TDataSetField(ClientDataSet1.Fields[1]).NestedDataSet do</div><div class="code_line">&nbsp;&nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp;Insert;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Fields[1].AsString := &#39;Бла бла бла&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Post;</div><div class="code_line">&nbsp;&nbsp;until (RecNo &#62; 9); // набиваем дочерний датасет десятьма записями</div><div class="code_line">&nbsp;&nbsp;ClientDataSet1.Post; // сохраняем данные в родительском датасете </div><div class="code_line">/// (это можно сделать и до инсертов в дочернем, но по окончании добавления в дочерний, родительский останется в режиме редактирования)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;ClientDataSet1.Insert; // добавляем вторую строчку</div><div class="code_line">&nbsp;&nbsp;with TDataSetField(ClientDataSet1.Fields[1]).NestedDataSet do</div><div class="code_line">&nbsp;&nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp;Insert;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Fields[1].AsString := &#39;Вторая строка с вложеным дата сетом&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Post;</div><div class="code_line">&nbsp;&nbsp;until (RecNo &#62; 9);</div><div class="code_line">&nbsp;&nbsp;ClientDataSet1.Post;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-05-10T17:46:48+00:00">10.05.10, 17:46</time></span></span><br>
пс. как практика показывает то ClientDataSet глючит насчет внутренних датасетов (на больших таблицах мне не удавалось получить датасет с симнадцатой строчки. почему именно 16 первых работало покрыто мраком), поэтому не переусердствуй. )))<br>
пс. пс. но таблицы у меня были и впрям большие (грузилось из xml файла 30-70 мб).]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2590561</guid>
        <pubDate>Mon, 10 May 2010 15:21:01 +0000</pubDate>
        <title>ClientDataSet и поля типа ftDataSet</title>
        <link>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2590561</link>
        <description><![CDATA[S-V-E: Спасибо за ответ&#33;<br>
<br>
Предложенный выше код работает почему-то со всем ClientDataSet, а мне нужно заполнить вложенные датасеты (поля ftDataSet). Поэтому добраться до них у меня получилось только через NestedDataSet:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">with (ClientDataSet1.Fields[0] as TDataSetField).NestedDataSet do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;insert;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FieldByName(&#39;my_text&#39;).AsString := &#39;Это вложеный дата_сет&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;post;</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div><br>
Вот только записи во вложенный датасет не добавляются — выходит ошибка «at beginning of table» и после вставки записей всегда -1.]]></description>
        <author>S-V-E</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2589933</guid>
        <pubDate>Sun, 09 May 2010 17:23:15 +0000</pubDate>
        <title>ClientDataSet и поля типа ftDataSet</title>
        <link>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2589933</link>
        <description><![CDATA[ViktorXP: ну если ты создал поле ftDataSet то и работай с им как с датасетом.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp;with (ClientDataSet1.Fields[0] as TDataSetField).DataSet do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;insert;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FieldByName(&#39;my_text&#39;).AsString := &#39;Это вложеный дата_сет&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;post;</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div>]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2589819</guid>
        <pubDate>Sun, 09 May 2010 14:07:10 +0000</pubDate>
        <title>ClientDataSet и поля типа ftDataSet</title>
        <link>https://forum.sources.ru/index.php?showtopic=302756&amp;view=findpost&amp;p=2589819</link>
        <description><![CDATA[S-V-E: Всем привет&#33;<br>
<br>
В моей программе достаточно много вычислений — результаты выводятся в 12 больших табличек (исп-ся <strong class='tag-b'>cxGrid</strong>-ы). Полученные результаты нужно распечатывать в виде отчета (исп. <strong class='tag-b'>QReport</strong>), причем можно будет выбирать желаемые таблицы или печатать все вместе.  Для передачи данных из табличек в отчет использую <strong class='tag-b'>ClientDataSet</strong>. В нем определил <strong class='tag-b'>FieldDefs</strong> — поля типа <strong class='tag-b'>ftDataSet</strong> для каждой таблицы, и у каждого свойство <strong class='tag-b'>ChildDefs</strong> с описанием полей этой самой таблицы. <br>
Но когда дело дошло до написания кода — я застрял. Никак не могу понять каким образом записывать в ClientDataSet данные из табличек? Пробовал так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">ClientDataSet1.FieldDefs[1].ChildDefs[0] := Values[i, j];</div></ol></div></div></div></div><br>
Ругается — то несоответствие типов, то индексы списков выходят за пределы и т.п. Самое главное — не соображу, как можно работать с полем из FieldDefs (которое определено как ftDataSet) как с настоящим DataSet-ом (например, добавлять записи)?]]></description>
        <author>S-V-E</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	