<?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=209551&amp;view=findpost&amp;p=1760858</guid>
        <pubDate>Mon, 12 Nov 2007 09:19:54 +0000</pubDate>
        <title>Ошибка вставки записи в БД MS Access</title>
        <link>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1760858</link>
        <description><![CDATA[Игорь Акопян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=209551&view=findpost&p=1758227'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MIF &#064; <time class="tag-quote__quoted-time" datetime="2007-11-09T14:26:46+03:00">09.11.07, 11:26</time></span><div class='quote '>Не, там в коде есть Last.</div></div><br>
упс.. проглядел :)]]></description>
        <author>Игорь Акопян</author>
        <category>Delphi: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1758227</guid>
        <pubDate>Fri, 09 Nov 2007 11:26:46 +0000</pubDate>
        <title>Ошибка вставки записи в БД MS Access</title>
        <link>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1758227</link>
        <description><![CDATA[MIF: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=209551&view=findpost&p=1758208'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Игорь Акопян &#064; <time class="tag-quote__quoted-time" datetime="2007-11-09T11:15:58+00:00">09.11.07, 11:15</time></span><div class='quote '>Он, судя по запросу, хватает первый попавшийся</div></div>Не, там в коде есть Last. Если первичного ключа нет, то выбирает ID близкое к максимальному.<br>
<strong class='tag-b'>SkyStar</strong>, если всё таки хочешь сам генерировать ИД (хотя багов при таком подходе бывает немеряно) то измени запрос так, как советует <strong class='tag-b'>Игорь Акопян</strong>.]]></description>
        <author>MIF</author>
        <category>Delphi: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1758208</guid>
        <pubDate>Fri, 09 Nov 2007 11:15:58 +0000</pubDate>
        <title>Ошибка вставки записи в БД MS Access</title>
        <link>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1758208</link>
        <description><![CDATA[Игорь Акопян: а он наверное бездырочную нумерацию хочет :)<br>
Кроме того, откуда видно, что метод getLastId возвращает именно <strong class='tag-b'>Last</strong> ID? Он, судя по запросу, хватает первый попавшийся, может там МАХ поставить?]]></description>
        <author>Игорь Акопян</author>
        <category>Delphi: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1757526</guid>
        <pubDate>Fri, 09 Nov 2007 04:33:53 +0000</pubDate>
        <title>Ошибка вставки записи в БД MS Access</title>
        <link>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1757526</link>
        <description><![CDATA[MIF: Зарегистрируй ID поле как счётчик и убери код генерации следующего ID из своего кода.]]></description>
        <author>MIF</author>
        <category>Delphi: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1757523</guid>
        <pubDate>Fri, 09 Nov 2007 04:30:39 +0000</pubDate>
        <title>Ошибка вставки записи в БД MS Access</title>
        <link>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1757523</link>
        <description><![CDATA[dron-s: а зачем ты сам себе жизни услажняешь со всем этим делом?<br>нафига ты писал все эти функции и процедуры, когда можно всё сделать намного короче и практичнее&#33;<br>возможно что у тебя где просто идёт очень большая утечка памяти...<br>надо дебажить...]]></description>
        <author>dron-s</author>
        <category>Delphi: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1757522</guid>
        <pubDate>Fri, 09 Nov 2007 04:18:33 +0000</pubDate>
        <title>Ошибка вставки записи в БД MS Access</title>
        <link>https://forum.sources.ru/index.php?showtopic=209551&amp;view=findpost&amp;p=1757522</link>
        <description><![CDATA[SkyStar: Вставка происходит следующим образом (TAccessWorker - мой класс работы с MS Access):<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">ta := TAccessWorker.Create(&#39;db1.mdb&#39;);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
вставка происходит так (TGood - произвольный класс):<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">good := TGood.Create;</div><div class="code_line">good.SetId(ta.getLastGoodId + 1);</div><div class="code_line">&nbsp;</div><div class="code_line">ta.insertGood(good);</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>TAccessWorker.insertGood(good);</strong>(SQLInsert взят из DRKB)<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;procedure TAccessWorker.insertGood(good :TGood);</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp;query :TADOQuery;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;query := TADOQuery.Create(nil);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;with query do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ConnectionString := globalDbConnectionString;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SQL.Text := SqlInsert(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;[good.GetId, good.GetParentId, good.GetName, good.GetDescription, CurrToStr(good.GetPrice), good.GetQuantity],</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#39;goods&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ExecSQL;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Close;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>TAccessWorker.getLastGoodId</strong> - выясняет значение последнего id<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;function TAccessWorker.getLastGoodId : Integer;</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp;query :TADOQuery;</div><div class="code_line">&nbsp;&nbsp; &nbsp;num :String;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;query := TADOQuery.Create(nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp;with query do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ConnectionString := globalDbConnectionString;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SQL.Text := &#39;SELECT id from goods&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Open;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Last;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;num := FieldByName(&#39;id&#39;).AsString;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if(num &#60;&#62; &#39;&#39;) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := StrToInt(num);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Close;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div><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">globalDbConnectionString :=</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;Provider=Microsoft.Jet.OLEDB.4.0;&#39; +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;Data Source=&#39; + fileName + &#39;;&#39; +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;Persist Security Info=False;&#39; +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;Jet OLEDB:Database Password=&#39; + password;</div></ol></div></div></div></div><br>
<br>
Когда я произвожу подряд 32 вставки (между вставками промеуток времени ~1 сек), то после 32-ой итерации, у меня программа падает и выкидывает такой exception (падает постоянно и ИМЕННО после 32-х вставок подряд): EOleException &quot;Неопознанная ошибка&quot;<br>
<br>
Падает он в методе getLastId в строке c Open:<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">...</div><div class="code_line">SQL.Text := &#39;SELECT id from goods&#39;;</div><div class="code_line">Open;</div><div class="code_line">Last;</div><div class="code_line">...</div></ol></div></div></div></div>.<br>
<br>
Также, если производить вставки в БД с меньгим интервалом, то программа падает с EOleException из-за того что я пытаюсь вставить запись с уже существующим Id. То есть видно getLastGoodId возращает ещё необновившийся id.<br>
<br>
Подскажите как бороться с этими 2-я проблемами...]]></description>
        <author>SkyStar</author>
        <category>Delphi: Базы данных</category>
      </item>
	
      </channel>
      </rss>
	