<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>5 строк кода</title>
	
	<link>http://5codelines.net</link>
	<description>Как писать комерческие приложения на MS Access</description>
	<lastBuildDate>Mon, 12 Oct 2009 14:32:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/5codelines" type="application/rss+xml" /><feedburner:emailServiceId>5codelines</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2F5codelines" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2F5codelines" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2F5codelines" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/5codelines" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2F5codelines" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2F5codelines" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2F5codelines" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2F5codelines" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Как получить значение поля таблицы</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/gUvvqLmszLo/</link>
		<comments>http://5codelines.net/kak-poluchit-znachenie-polya-tablicy/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 14:23:29 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=172</guid>
		<description><![CDATA[
Очень часто новички сталкиваются с задачей прочитать значение из поля таблицы. Например, они знают о существовании библиотек DAO или ADO и пишут свою функцию для вычисления этой операции (или не пишут, а идут на форумы спрашивать  ). Но ведь есть встроенные. Знакомьтесь:

DLookUp
DFirst
DLast
DCount
DMax
DMin

У всех этих функций одинаковые параметры: имя поля или выражение, таблица, условие отбора. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-187" title="Таблица" src="http://5codelines.net/wp-content/uploads/2009/10/table.PNG" alt="Таблица" width="118" height="157" /></p>
<p>Очень часто новички сталкиваются с задачей прочитать значение из поля таблицы. Например, они знают о существовании библиотек <a href="http://ru.wikipedia.org/wiki/Data_Access_Objects">DAO</a> или <a href="http://ru.wikipedia.org/wiki/ADO">ADO</a> и пишут свою функцию для вычисления этой операции (или не пишут, а идут на форумы спрашивать <img src='http://5codelines.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ). Но ведь есть встроенные. Знакомьтесь:</p>
<ul>
<li>DLookUp</li>
<li>DFirst</li>
<li>DLast</li>
<li>DCount</li>
<li>DMax</li>
<li>DMin</li>
</ul>
<p>У всех этих функций одинаковые параметры: имя поля или выражение, таблица, условие отбора. Возвращать они могут Null (кроме DCount), по этому использование nz() не будет лишним.</p>
<p>И напоследок пара примеров использования:</p>
<pre name="code" class="vb">Public Sub test()
    Dim stKlient As String
    Dim lK_KLIENT As Long
    Dim count As Long

    lK_KLIENT = 123

    stKlient = Nz(DLookup("T_KLIENT", "b_klient", "K_KLIENT = " &amp; lK_KLIENT))
    count = DCount("*", "b_klient", "T_KLIENT LIke '" &amp; Left(stKlient, 3) &amp; "*'")
End Sub</pre>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<p>Подписаться на: <a href="http://feeds2.feedburner.com/5codelines">RSS</a> или <a href="http://5codelines.net/e-mail-rassylka/">e-mail рассылку</a> или <a href="http://www.livejournal.com/friends/add.bml?user=5codelines">добавить в ЖЖ друзья</a>.</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/gUvvqLmszLo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-poluchit-znachenie-polya-tablicy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/kak-poluchit-znachenie-polya-tablicy/</feedburner:origLink></item>
		<item>
		<title>Сказка</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/55LjNhMBa0M/</link>
		<comments>http://5codelines.net/skazka/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 09:07:31 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[шучу]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=175</guid>
		<description><![CDATA[&#8220;Жил был царь Репозиторий. И было у него три сына: старший &#8211; Транк, средний &#8211; Тэг и средний &#8211; Бранч.&#8221;
(с) Скоков Сергей
]]></description>
			<content:encoded><![CDATA[<p>&#8220;Жил был царь Репозиторий. И было у него три сына: старший &#8211; Транк, средний &#8211; Тэг и средний &#8211; Бранч.&#8221;</p>
<p align="right">(с) Скоков Сергей</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/55LjNhMBa0M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/skazka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/skazka/</feedburner:origLink></item>
		<item>
		<title>Как создать меню в MS Access</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/2Ja4cJYOsss/</link>
		<comments>http://5codelines.net/kak-sozdat-menyu-v-ms-access/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 13:07:22 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=158</guid>
		<description><![CDATA[Всем привет!
Как оказалось очень полезно смотреть ключевые слова, по которым пользователи переходят на мой сайт. В них можно найти новые тему. Например, как эту. Оказывается, у некоторых это вызывает трудности.
Как создать меню
В прошлой статье про меню я забыл дорасказать, как же все же добавляеть новые пункты меню в строку меню. По-этом рекомендую сперва ознакомится с [...]]]></description>
			<content:encoded><![CDATA[<p>Всем привет!</p>
<p>Как оказалось очень полезно смотреть ключевые слова, по которым пользователи переходят на мой сайт. В них можно найти новые тему. Например, как эту. Оказывается, у некоторых это вызывает трудности.</p>
<p><strong>Как создать меню</strong><br />
В <a href="http://5codelines.net/3menu/">прошлой статье про меню</a> я забыл дорасказать, как же все же добавляеть новые пункты меню в строку меню. По-этом рекомендую сперва ознакомится с прошлым постом и пеерходить к чтению этого.</p>
<p><strong>Как создать пункты меню</strong><br />
<img src="http://5codelines.net/wp-content/uploads/kak-sozdat-menyu-v-ms-access/1_3.png" alt="Настройка меню" /></p>
<p>Чтобы сюда попасть можно выбрать пункт меню MS Access &#8220;Сервис &#8211; Настройка&#8221; или кликнуть в пустом месте меню и в контестном меню выбрать пункт &#8220;Настройка&#8221;.</p>
<p><img src="http://5codelines.net/wp-content/uploads/kak-sozdat-menyu-v-ms-access/2.png" alt="Настройка меню" /></p>
<p>Теперь все внимание на вкладку &#8220;Команды&#8221; нового окошка.</p>
<p>В категории &#8220;Файл&#8221; вы найдете пункт меню &#8220;Специальная&#8221;. Это рабочая лошадка меню. На самом деле это кнопка.</p>
<p><img src="http://5codelines.net/wp-content/uploads/kak-sozdat-menyu-v-ms-access/1_3.png" alt="Пункты меню" /></p>
<p>В категории &#8220;Новое меню&#8221; найдете выпадающее меню &#8220;Новое меню&#8221;. На самом деле это поле с выпадающим списком.</p>
<p>Еще в категории &#8220;Все формы&#8221; и т.п. вы найдете соостветственно готовые пункты меню. У них есть свои особенности. Об этом ниже.</p>
<p>Это все &#8220;многообразие&#8221; элементов можно при помощи перетаскивания перенести на свою строку меню или панель инструментов (я надеюсь вы прочитали предыдущую статью и знаете как это делать).</p>
<p><img src="http://5codelines.net/wp-content/uploads/kak-sozdat-menyu-v-ms-access/4.png" alt="Панель еню" /></p>
<p><strong>Как выполнить действие</strong><br />
Тут самое интересное. <span style="text-decoration: underline;">Только не закрывайте чудесное окошко &#8220;Настройка&#8221;.</span> Кликните правой кнопочкой мыши на любом пункте меню (не список!) и в контекстном меню выберете пункт &#8220;Свойства&#8221;. У вас откроется следующее окошко:</p>
<p><img src="http://5codelines.net/wp-content/uploads/kak-sozdat-menyu-v-ms-access/5.png" alt="Свойства пункта меню" /></p>
<p>Все поля содержат описание и понятны. При помощи этого пункта меню можно вызвать любую функцию из модуля, написав так <code>=MyFunction()</code>. Чаще всего я использую именно этот способ, т.к. частенько формы открываются с какими-то параметрами.</p>
<p><strong>Особенности открытия форм</strong><br />
А теперь давайте таким же образом откроем пункт меню, созданный перетаскиванием пункта из группы &#8220;Все формы&#8221;, например.</p>
<p><img src="http://5codelines.net/wp-content/uploads/kak-sozdat-menyu-v-ms-access/6.png" alt="Свойства пункта меню" /></p>
<p>В свойстве &#8220;Параметр&#8221; вы обнаружите имя формы. Так вот, если прописать это же имя в пункте меню из группы &#8220;File&#8221;, то форма не откроется. Вот такой чудесный нюанс.</p>
<p>В следующий раз опишу о программном создании и управлении меню.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<p>Подписаться на: <a href="http://feeds2.feedburner.com/5codelines">RSS</a> или <a href="http://5codelines.net/e-mail-rassylka/">e-mail рассылку</a> или <a href="http://www.livejournal.com/friends/add.bml?user=5codelines">добавить в ЖЖ друзья</a>.</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/2Ja4cJYOsss" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-sozdat-menyu-v-ms-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/kak-sozdat-menyu-v-ms-access/</feedburner:origLink></item>
		<item>
		<title>Недостатки DoCmd.GoToRecord и достоинства CodeContextObject</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/ngfVmprChdQ/</link>
		<comments>http://5codelines.net/gotolastrecord/#comments</comments>
		<pubDate>Wed, 27 May 2009 13:35:37 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[архитектура]]></category>
		<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=149</guid>
		<description><![CDATA[Пара камней в огород DoCmd
Как-то мне понадобилось перейти к последней записи в подчиненной форме. Перейти к последней записи можно разными способами, простейший &#8211; это вот эта команда: DoCmd.GoToRecord , , acLast. Вот с подчиненненными формами есть нюанс &#8211; нужно вызывать ее в обработчике события или методе подчиненной формы. В моем случае события не подходили, метод [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Пара камней в огород DoCmd</strong><br />
Как-то мне понадобилось перейти к последней записи в подчиненной форме. Перейти к последней записи можно разными способами, простейший &#8211; это вот эта команда: <code>DoCmd.GoToRecord , , acLast</code>. Вот с подчиненненными формами есть нюанс &#8211; нужно вызывать ее в обработчике события или методе подчиненной формы. В моем случае события не подходили, метод было реализовывать влом и очень хотелось реализовать это на главной форме.</p>
<p>Поэтому пришлось написать свою функцию. Благодаря тому, что функция принимает ссылку на форму, а не имя, то можно ее использовать для любой формы, подчиненной, созданной при помощи DoCmd.OpenForm или оператора New.</p>
<pre name="code" class="vb">
Public Sub CM_FormGoToLastRecord(Optional ByRef frm As Form = Nothing)
' перейти на последнюю запись
' frm можно не передавать, в этом случае она будет получена при помощи CodeContextObject
On Error GoTo Err_

    If frm Is Nothing Then
        Set frm = CodeContextObject
    End If

    If frm Is Nothing Then Exit Sub

    Dim rst As DAO.Recordset

    Set rst = frm.RecordsetClone
    If Not rst.EOF Then rst.MoveLast
    frm.Bookmark = rst.Bookmark

Exit_:
    Exit Sub
Err_:
    mc_Log.MC_LogErr ("CM_FormGoToLastRecord()")
    Resume Exit_:
End Sub
</pre>
<p><code>mc_Log.MC_LogErr ("FormGoToLastRecord()") </code>- фукнция, которая логирует ошибку в текстовом файле. О ведении лога я как-нибудь расскажу попозже.</p>
<p><strong>CodeContextObject</strong><br />
В процедуре <code>CM_FormGoToLastRecord()</code> используется такая штука, как <code>CodeContextObject</code>, которое в справке называют свойством. Это свойство позволяет получить ссылку на объект, в рамках которого выполняется данный код. Если вызвать процедуру <code>CM_FormGoToLastRecord()</code> в событии подчиненной формы, то <code>CodeContextObject</code> выдаст ссылку на подчиненную форму. Этот же способ использует DoCmd.GoToRecord, когда не указывается имя объекта.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<p>Подписаться на: <a href="http://feeds2.feedburner.com/5codelines">RSS</a> или <a href="http://5codelines.net/e-mail-rassylka/">e-mail рассылку</a> или <a href="http://www.livejournal.com/friends/add.bml?user=5codelines">добавить в ЖЖ друзья</a>.</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/ngfVmprChdQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/gotolastrecord/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/gotolastrecord/</feedburner:origLink></item>
		<item>
		<title>Как получить доступ к свойствам диаграммы и других ActiveX объектов</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/MyqPJyl4yHY/</link>
		<comments>http://5codelines.net/activex1/#comments</comments>
		<pubDate>Tue, 05 May 2009 22:45:02 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=140</guid>
		<description><![CDATA[MS Access поддерживает технологию ActiveX. Но те возможности, которые предоставляет стандартный элемент управления OLE объектами весьма скудны. А иногда бывает необходимо управлять скрытыми свойствами ActiveX объекта. Как же добраться до свойств объектов ActiveX?
Рассмотрим эту задачку на примере диаграмм.
На форму (или отчет) вставим диаграмму с именем “OLE_PRODAZHA_CHART” и изменим название диаграммы программно.
Далее необходимо подключить библиотеку “Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>MS Access поддерживает технологию ActiveX. Но те возможности, которые предоставляет стандартный элемент управления OLE объектами весьма скудны. А иногда бывает необходимо управлять скрытыми свойствами ActiveX объекта. Как же добраться до свойств объектов ActiveX?</p>
<p><strong>Рассмотрим эту задачку на примере диаграмм.</strong><br />
На форму (или отчет) вставим диаграмму с именем “OLE_PRODAZHA_CHART” и изменим название диаграммы программно.<br />
Далее необходимо подключить библиотеку “Microsoft Graph X.0 Object Library”, чтобы тип “Chart” (диаграмма) стал доступен (ниже узнаете зачем он нужен). Увы для диаграмм Access почему-то не добавляет ссылку на библиотеку.<br />
Также добавим на форму кнопку с названием “Изменить название диаграммы”. В обработчике событий разместим следующий код:</p>
<pre name="code" class="vb">
Dim obj As Graph.Chart

Set obj = Me.OLE_PRODAZHA_CHART.Object
obj.ChartTitle.Text = "Мое название"
</pre>
<p>Весь фокус заключается в типе “Graph.Chart” и свойстве “Object” элемента управления. Свойство “Object” элемента управления возвращает ссылку на созданный объект. Библиотека “Microsoft Graph X.0 Object Library” в коде называется Graph и предоставляет класс типа Chart. Теперь можно пользоваться справкой и просмотреть все свойства и методы класса Graph.Chart.</p>
<p><strong>Как быть с другим ActiveX объектами?</strong><br />
После вставки ActiveX элемента на форму, Access сам добавить Reference на библиотеку типов. Найти библиотеку и тип ActiveX элемента можно найти в Object Browser (в редакторе кода можно нажать кнопку F2).<br />
Чтобы точно определить имя нужной библиотеки и типа ActiveX элемента, давайте посмотрим на свойства уже ранее созданной диаграммы. А именно “Класс” и “Класс OLE”.<br />
Для диаграммы свойства имеют значения:<br />
- Класс = MSGraph.Chart.8<br />
- Класс OLE = Microsoft Graph Chart<br />
“Класс OLE” содержит описание для пользователя. По этому имени можно найти библиотеку типов списке ссылок (Tools-&gt;References). “Класс” содежит имя класса, при помощи которого можно создать этот объект.</p>
<p>Возвращаясь к злосчастной диаграмме, в Object Browser имя библиотеки будет Graph, а имя класса Chart.</p>
<p>В <a href="http://www.5codelines.net/wp-content/uploads/ActiveX_1_sampe.rar">примере </a>вы также найдете ActiveX элемент TreeView, посмотрите код в модуле формы. Там добавлена обработка события, которого нет в списке событий в свойствах элемента управления.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<p>Подписаться на: <a href="http://feeds2.feedburner.com/5codelines">RSS</a> или <a href="http://5codelines.net/e-mail-rassylka/">e-mail рассылку</a> или <a href="http://www.livejournal.com/friends/add.bml?user=5codelines">добавить в ЖЖ друзья</a>.</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/MyqPJyl4yHY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/activex1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://5codelines.net/activex1/</feedburner:origLink></item>
		<item>
		<title>Как получить значение ключевого поля для добавленной записи</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/3BxvwYKcoh8/</link>
		<comments>http://5codelines.net/kak-poluchit-znachenie-klyuchevogo-polya-dlya-dobavlennoj-zapisi/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 13:10:14 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=130</guid>
		<description><![CDATA[Всем привет!
Как оказалось вопросы по этой теме все еще возникают. Рассказываю  . 
Значение ключевого поля новой записи при помощи библиотеки DAO можно получить следующим образом (K_KLIENT &#8211; ключевое поле):

Dim rst as DAO.Recordset
Dim lPk as Long

' ....
rst.AddNew
rst("T_KLIENT")="ОАО Рога и копыта"
' ...

А дальше есть несколько вариантов:
- 1-й вариант:

lPk = rst("K_KLIENT")
rst.Update

- 2-й вариант:

rst.Update
rst.Bookmark = rst.LastModified
lPk = rst("K_KLIENT")

1-й [...]]]></description>
			<content:encoded><![CDATA[<p>Всем привет!</p>
<p>Как оказалось вопросы по этой теме все еще возникают. Рассказываю <img src='http://5codelines.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . </p>
<p>Значение ключевого поля новой записи при помощи библиотеки DAO можно получить следующим образом (K_KLIENT &#8211; ключевое поле):</p>
<pre name="code" class="vb">
Dim rst as DAO.Recordset
Dim lPk as Long

' ....
rst.AddNew
rst("T_KLIENT")="ОАО Рога и копыта"
' ...
</pre>
<p>А дальше есть несколько вариантов:<br />
- 1-й вариант:</p>
<pre name="code" class="vb">
lPk = rst("K_KLIENT")
rst.Update
</pre>
<p>- 2-й вариант:</p>
<pre name="code" class="vb">
rst.Update
rst.Bookmark = rst.LastModified
lPk = rst("K_KLIENT")
</pre>
<p>1-й вариант работает только с таблицами MS Access, т.к. значение счетчика вычилсяется сразу же после AddNew. На всех остальных нужно проверять. Например, с ODBC таблицами 1-й вариант точно не прокатит, т.к. значение счетчика вычисляет сервер.</p>
<p>C библиотекой ADO получится только 1-й вариант.</p>
<pre name="code" class="vb">
Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset
rst.Open "tbl1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rst.AddNew
MsgBox rst("key")
rst.Update
</pre>
<p>А с серверами БД придется что-то придумывать, например, использовать TimeStamp, чтобы найти только что добавленную запись.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/3BxvwYKcoh8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-poluchit-znachenie-klyuchevogo-polya-dlya-dobavlennoj-zapisi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/kak-poluchit-znachenie-klyuchevogo-polya-dlya-dobavlennoj-zapisi/</feedburner:origLink></item>
		<item>
		<title>Стоит ли использовать временные таблицы для отчетов</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/IcPcRJkPCRs/</link>
		<comments>http://5codelines.net/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 15:14:38 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[архитектура]]></category>
		<category><![CDATA[сопровождение]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=134</guid>
		<description><![CDATA[Стоит ли использовать временные таблицы для отчетов]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p><img src="http://5codelines.net/wp-content/uploads/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/report.PNG" alt="Отчет" /></p>
<p>Сегодня <a href="http://forum.vingrad.ru/forum/topic-251975/anchor-entry1819420/0.html#">прочитал спорное мнение на форуме</a>, что использовать временные таблицы при формировании отчетов это кривое решение. С этим мнением я в корне не согласен.</p>
<p>Мои доводы ЗА:<br />
1. <em>Модульность.</em> Временные таблицы позволяют разделить между собой отчет и код расчета данных. В последующем это повышает сопровождаемость (см. п.3).</p>
<p>2. <em>Удобство отладки.</em> Если отчет перестал работать или работает как-то не правильно, то гораздо легче проверить расчет данных для него.</p>
<p>3. <em>Сопровождаемость.</em> В любой момент может возникнуть необходимость переделать либо расчет данных, либо переделать отчет, например, печатать его в word. Это все можно модифицировать по отдельности. Также пользователь может захотеть хранить рассчитанные данные, этого тоже будет просто добиться.</p>
<p>4. <em>Документирование</em>. Если разработчик укажет комментарии к полям для временной таблицы, то это можно считать документацией.</p>
<p>Мои доводы ПРОТИВ:<br />
1. <em>Увеличивается время разработки</em>. Это происходит в том случае, если для отчета можно использовать простой запрос в качестве источника данных. Если же расчет данных не вписывается в простейшие запросы, то будет проще и надежней реализовать расчет отчета в коде.</p>
<p>Больше против я не вспомнил. Выбор очевиден <img src='http://5codelines.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Увлекаться данным способом естественно не стоит, каждой проблеме лучше подбирать свое решение. Этот метод подходит для отчетов со &#8220;сложными&#8221; расчетами данных.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<p>Подписаться на: <a href="http://feeds2.feedburner.com/5codelines">RSS</a> или <a href="http://5codelines.net/e-mail-rassylka/">e-mail рассылку</a> или <a href="http://www.livejournal.com/friends/add.bml?user=5codelines">добавить в ЖЖ друзья</a>.</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/IcPcRJkPCRs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/</feedburner:origLink></item>
		<item>
		<title>3 вида меню в MS Access</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/5HlZSoRRSKY/</link>
		<comments>http://5codelines.net/3menu/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 11:41:30 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[архитектура]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=103</guid>
		<description><![CDATA[3 вида меню в MS Access]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/menu.png" alt="5codelines.net" /></p>
<p>То, что первым видит пользователь в программе &#8211; это меню. От него зависит (и не только) на сколько удобно будет работать с программой. С течением времени определенные подходы, которые я видел, классифицировались в следующие виды меню:<br />
- формы с кнопками,<br />
- кнопочная форма (на основе мастера),<br />
- строка меню.</p>
<p>Я заметил, что «новички» начинают с форм с кнопками, затем открывают для себя кнопочные формы, а если встает задача сделать, как классическом текстовом редакторе, то переходят к строке меню или используют вместо нее панель инструментов. Конечно, бывают исключения и это только мои наблюдения.</p>
<p>Очень долгое время я думал, что самое лучшее и удобное меню – это строка меню. Но как показала жизнь, для каждого класса задач подходит свое меню.</p>
<p><strong>1 Формы с кнопками</strong><br />
При этом подходе создается множество однотипных форм с кнопками или группой переключателей. Этот метод очень активно использовался в старых ДОСовских программах.</p>
<p>Это очень удобно использовать, когда пользователю при работе с одной из функций не нужна другая функция, которая вызывается из меню. Примером таких программ могут служить любые, в которых происходит потоковая регистрация и пользователю некогда переключаться между клавиатурой и мышкой.</p>
<p>К минусам такого способа можно отнести большое количество форм и муторность в изменении этого меню. Для пользователя может быть не удобно закрывать или сворачивать текущие формы, чтобы увидеть меню и открыть необходимую форму.</p>
<p>Очень не рекомендую использовать группы переключателей в качестве кнопок, переходить клавишами по такому меню не удастся.</p>
<p><strong>2 Кнопочная форма (на основе мастера)</strong><br />
В этом варианте существует только одна форма и мастер редактирования пунктов. Из недостатков – при открытии любая формы, форма меню будет не видна.</p>
<p>При ближайшем рассмотрении оказалось, что это обыкновенная форма с х кнопками и надписями и с системной таблицей в качестве источника данных.</p>
<p>Не знаю почему, но мне этот вариант мне не нравится. Я лучше сам его реализую при необходимости.</p>
<p><strong>3 Строка меню</strong><br />
Это мой самый любимый способ, т.к. очень просто изменять и все время на виду. Да и очень редко мне доводится разрабатывать программы для людей, не пользующихся мышкой.</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/image001.png" alt="" /></p>
<p>Чтобы меню выглядело при запуске программы как на картинке, придется немножко пошаманить.</p>
<p>При создании меню (Сервис-&gt;Настройка), по умолчанию создается панель инструментов. По этому, выбрав созданное меню, необходимо нажать кнопку свойства. Необходимо настроить его следующим образом:</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/image002.png" alt="" /></p>
<p>Я изменил тип на «Строка меню» и убрал галочку «Отображение и скрытие», чтобы пользователь ее не мог скрыть. Снимать все галочки не рекомендую, если будет желание то после этого обязательно проверьте, что из этого получилось и подойдет ли пользователю. А то можете получить проблему из-за меню. Также можно убрать перемещение, но только после того, как закончите сами ее настраивать.</p>
<p>Теперь необходимо зайти в Параметры запуска (Сервис –&gt; Параметры запуска).</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/image003.png" alt="" /></p>
<p>Тут я выбираю свою строку меню и убираю отображение окна базы данных. В таком режиме я и работаю.</p>
<p>Как вы заметили можно и свое контекстное меню сделать. Или убрать панели инструментов по умолчанию. Не рекомендую этим увлекаться. Например, панель инструментов отчетов ой как нужна, чтобы напечатать. А на панели инструментов для форм есть такая полезная штуковина как сортировка.</p>
<p>После того, как вы перезапустите свою БД, то всегда будет отображаться ваше меню. А стандартного не будет. Чтобы его отобразить/скрыть достаточно нажать Ctrl+F11. Очень удобно.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/5HlZSoRRSKY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/3menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/3menu/</feedburner:origLink></item>
		<item>
		<title>Как показать первое значение в поле со списком</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/vtFKgpLuhc0/</link>
		<comments>http://5codelines.net/kak-pokazat-pervoe-znachenie-v-pole-so-spiskom/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 00:52:35 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=95</guid>
		<description><![CDATA[Как показать первое значение в поле со списком]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p><img src="http://5codelines.net/wp-content/uploads/CM_ListSelectFirst/CM_ListSelectFirst.JPG" alt="CM_ListSelectFirst" /></p>
<p>Поделюсь с вами еще одной удобной функцией. У меня часто возникает ситуация, когда при открытии формы в поле со списком необходимо показать первое значение. </p>
<p>Например, на форме списка пользотваль хочет видеть данные за текущий год. Для этого я добавил на форму поле со списком &#8220;Год&#8221; (Имя элемента управления P_GOD). В нем выводятся года, за которые есть данные в обратном порядке. А при открытии формы вызвал специальную фукнцию:</p>
<pre name="code" class="vb">
Call CM_ListSelectFirst( Me.P_GOD_FLT ) '-- мега функция
'-- увы при программном изменении значения поля события не происходят,
'-- то придется еще вызвать фукнцию соотвествующую фукнцию
Call SetFilter()
</pre>
<p>А вот код той самой функции <code>CM_ListSelectFirst()</code>:</p>
<pre name="code" class="vb">
Public Sub CM_ListSelectFirst(ByRef ctl As Control)
' Скоков С.А. 2009-02-25
' Выбрать первое значение в поле со списком или списке
    With ctl
        If Not (.ControlType = acListBox Or .ControlType = acComboBox) Then
            Exit Sub
        End If

        If .ListCount > 0 Then
            .Value = Nz(.ItemData(0))
        End If
    End With
End Sub
</pre>
<p>P.S. Эта же функция будет работать для списков <img src='http://5codelines.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/vtFKgpLuhc0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-pokazat-pervoe-znachenie-v-pole-so-spiskom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/kak-pokazat-pervoe-znachenie-v-pole-so-spiskom/</feedburner:origLink></item>
		<item>
		<title>Хитрость печати отчетов</title>
		<link>http://feedproxy.google.com/~r/5codelines/~3/zrRMq5EyVA4/</link>
		<comments>http://5codelines.net/xitrost-pechati-otchetov/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 11:49:00 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=82</guid>
		<description><![CDATA[Хитрость печати отчетов в MS Word]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p><img src="http://5codelines.net/wp-content/uploads/xitrost-pechati-otchetov/logo5codelines.jpg" alt="Логотип" /></p>
<p>В одной из программ реализована функциональность печати адресов клиентов на конверты, в результате пользователь получает готовенький документ MS Word. Клиент попросил добавить свой логотип на каждый конверт. Существующая реализация формирования документа в Word не позволяет дублировать картинку для каждой страницы. Переделывать полностью не хотелось. Поэтому я искал как обойтись меньшей кровью.</p>
<p>Идея пришла из ниоткуда. Я мониторил меню Word 2007 в поисках пункта записи макросов (может они и могли мне помочь, но увы <img src='http://5codelines.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ) и наткнулся на создание подложки &#8211; &#8220;Разметка страницы &#8211; Подложка &#8211; Настраиваемая подложка&#8221; (&#8221;Формат &#8211; Фон &#8211; Подложка&#8221; для Word 2003).</p>
<p>Как оказалось это отличная идея. Рисунок располагается на странице за текстом, размер и положение можно изменить в режиме изменения колонтитулов.</p>
<p>Супер. Просто и со вкусом. Пример можно посмотреть <a href="/wp-content/uploads/xitrost-pechati-otchetov/sample.zip">тут</a>.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<img src="http://feeds.feedburner.com/~r/5codelines/~4/zrRMq5EyVA4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/xitrost-pechati-otchetov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://5codelines.net/xitrost-pechati-otchetov/</feedburner:origLink></item>
	</channel>
</rss>
