<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>5 строк кода &#187; решения</title>
	<atom:link href="http://5codelines.net/category/resheniya/feed/" rel="self" type="application/rss+xml" />
	<link>http://5codelines.net</link>
	<description>Как писать комерческие приложения на MS Access</description>
	<lastBuildDate>Tue, 31 Aug 2010 19:18:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Как отключить скролинг записей формы</title>
		<link>http://5codelines.net/mouse-wheel/</link>
		<comments>http://5codelines.net/mouse-wheel/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 20:45:57 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=179</guid>
		<description><![CDATA[ Для некоторых пользователей колесико мышки является проблемой. Так как они как правило не смотрят на экран, когда меняют что-либо. Нечаянно крутанулось колесико и поменяли не ту запись.
MS Access 2003 поддерживает событие MouseWheel, но, увы, не позволяет отменить это. Даже DoCmd.CancelEvent не помогает.
Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
    [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://5codelines.net/wp-content/uploads/Mouse.jpg"><img class="alignleft size-full wp-image-217" title="Mouse" src="http://5codelines.net/wp-content/uploads/Mouse.jpg" alt="Mouse" width="156" height="120" /></a> Для некоторых пользователей колесико мышки является проблемой. Так как они как правило не смотрят на экран, когда меняют что-либо. Нечаянно крутанулось колесико и поменяли не ту запись.</p>
<p>MS Access 2003 поддерживает событие MouseWheel, но, увы, не позволяет отменить это. Даже <span style="color: #ff0000;">DoCmd.CancelEvent</span> не помогает.</p>
<pre name="code" class="vb">Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
    DoCmd.CancelEvent '-- не работает
End Sub</pre>
<p>Одно из решений это хук событий формы описанный на сайте microsoft (<a href="http://support.microsoft.com/kb/278379">How to Detect and Prevent the Mouse Wheel from Scrolling Through Records in a Form</a>). И тут не обошлось без недостатков. Если не использовать внешней dll, то периодически форма тормозит, т.к. все события проваливаются через медленный VBA. Возможно, если вынести данный код в dll, то будет работать на порядок быстрее. Мне не захотелось возится с отдельной dll, т.к. я нашел метод попроще (об этом ниже). Пока я исследовал пример, немного расширил его. Результат трудов можно скачать <a href="wp-content/uploads/mouse_wheel_sampe/mouse_wheel_sampe.rar ">тут</a>, вдруг кому понадобится.</p>
<p>Более простым решением на мой взгляд является фильтр по ключевому полю. При этом нужно отключить добавление записей. У этой идеи тоже есть недостатки:</p>
<ul>
<li>
для ленточных форм, естественно, это не работает.</li>
<li>
нужно реализовывать добавление записи, а потом уже открывать ее на редактирование.</li>
</ul>
<p>Какой вариант выбрать зависит от ситуации. Я же стараюсь свести дизайн программы ко второму варианту. Уж больно он мне по душе.</p>
<p>До встречи!</p>
<p>(с) Скоков Сергей</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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/mouse-wheel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как из номера квартала получить дату или период для поиска</title>
		<link>http://5codelines.net/kvartal-v-datu/</link>
		<comments>http://5codelines.net/kvartal-v-datu/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 13:23:10 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=192</guid>
		<description><![CDATA[
Недавно на моем любимом форуме проскакивал одноименный ответ. Сперва я сам как-то задумался, а как же. Но как оказалось задача &#8220;По номерам недель получить временной промежуток для фильтра по датам&#8221; оказалось проще простого. Для этого я воспользовался любимым методом &#8220;Разделяй и властвуй&#8221;.
И так, задача разбилась на три части:
1. Функция, которая вернет дату начала недели по [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://5codelines.net/wp-content/uploads/calendar.PNG" alt="calendar" title="calendar" width="116" height="138" class="alignnone size-full wp-image-199" /></p>
<p>Недавно на моем любимом форуме проскакивал одноименный ответ. Сперва я сам как-то задумался, а как же. Но как оказалось задача &#8220;По номерам недель получить временной промежуток для фильтра по датам&#8221; оказалось проще простого. Для этого я воспользовался любимым методом &#8220;Разделяй и властвуй&#8221;.</p>
<p>И так, задача разбилась на три части:<br />
1. Функция, которая вернет дату начала недели по номеру недели и году.</p>
<pre name="code" class="vb">Public Function GetDateOfStartWeek(ByVal nWeek As Byte, ByVal nYear As Integer) As Date

    Dim dt1Jan As Date
    Dim dayFirstWeek As Integer
    Dim dtResult As Date

    dt1Jan = DateSerial(nYear, 1, 1)
    dayFirstWeek = Weekday(dt1Jan, vbMonday)
    dtResult = DateAdd("ww", nWeek - 1, dt1Jan)

    If dayFirstWeek &gt; 1 And nWeek &gt; 1 Then
      dtResult = DateAdd("d", -1 * (7 - Weekday(dt1Jan, vbMonday) + 2), dtResult)
    End If

    GetDateOfStartWeek = dtResult
End Function
</pre>
<p>2. Функция, которая вернет дату окончания недели по номеру недели и году.</p>
<pre name="code" class="vb">Public Function GetDateOfEndWeek(ByVal nWeek As Byte, ByVal nYear As Integer) As Date
    GetDateOfEndWeek = DateAdd("d", 7 - 1, GetDateOfStartWeek(nWeek, nYear))
End Function
</pre>
<p>3. Фнункция, которая вернет условие за период по датам:</p>
<pre name="code" class="vb">public frunction GetWherePeriod(ByVal imFld as string, ByVal dtFrom as Date, ByVal dtTo as Date) as String
   GetWherePeriod = BuildCriteria(imFld, dbDate, "Between " &amp; dtFrom &amp; " And " &amp; dtTo &amp; "")
End Public

'-- Проверка
Debug.Print GetWherePeriod(GetDateOfStartWeek(1, 2010), GetDateOfEndWeek(1, 2010))
</pre>
<p>Как-то уж очень просто получилось&#8230; Функцию GetDateOfStartWeek() я активно не тестировал, проверял только для января за 2010 и 2007 года. Если будут ошибки, пишите.</p>
<p>До встречи!</p>
<p>(с) Скоков Сергей</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>.</pre>
</pre>
</pre>
</pre>
</pre>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kvartal-v-datu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как получить значение поля таблицы</title>
		<link>http://5codelines.net/kak-poluchit-znachenie-polya-tablicy/</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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-poluchit-znachenie-polya-tablicy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Как создать меню в MS Access</title>
		<link>http://5codelines.net/kak-sozdat-menyu-v-ms-access/</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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-sozdat-menyu-v-ms-access/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Недостатки DoCmd.GoToRecord и достоинства CodeContextObject</title>
		<link>http://5codelines.net/gotolastrecord/</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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/gotolastrecord/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Как получить доступ к свойствам диаграммы и других ActiveX объектов</title>
		<link>http://5codelines.net/activex1/</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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/activex1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Как получить значение ключевого поля для добавленной записи</title>
		<link>http://5codelines.net/kak-poluchit-znachenie-klyuchevogo-polya-dlya-dobavlennoj-zapisi/</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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-poluchit-znachenie-klyuchevogo-polya-dlya-dobavlennoj-zapisi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как показать первое значение в поле со списком</title>
		<link>http://5codelines.net/kak-pokazat-pervoe-znachenie-v-pole-so-spiskom/</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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/kak-pokazat-pervoe-znachenie-v-pole-so-spiskom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Хитрость печати отчетов</title>
		<link>http://5codelines.net/xitrost-pechati-otchetov/</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; (&#8220;Формат &#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>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/xitrost-pechati-otchetov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Округления</title>
		<link>http://5codelines.net/okrugleniya/</link>
		<comments>http://5codelines.net/okrugleniya/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 22:41:00 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=77</guid>
		<description><![CDATA[Как округлить число]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p><img src="http://5codelines.net/wp-content/uploads/okrugleniya/logo.gif" alt="" /></p>
<p>До Access 2002 (или 2000) встроенной функции округления не было. Поэтому все пользовались самописными. Потом появилась функция <code>Round()</code>. Тут можно было вдохнуть с облегчением и избавится от собственной.</p>
<p>Как-то заказчик прислал мне скриншот с неправильными расчетами. Анализ кода показал, что функция <code>Round()</code> дала сбой и округляла следующим образом (проверял в окне отладки):<br />
<code>9.5 =10<br />
8.5 = 8<br />
7.5 = 8<br />
6.5 = 6<br />
5.5 = 6<br />
4.5 = 4<br />
3.5 = 4<br />
2.5 = 2<br />
1.5 = 2<br />
0.5 = 0</code></p>
<p>Разбираться было лень. В результате заменил на собственное творение, т.к. это деньги:</p>
<pre name="code" class="vb">
Public Function CM_Okrugl(ByVal dbl As Double) As Long
' округляет число dbl до целого
    Dim lng As Long

    lng = Fix(dbl)

    If (dbl - lng) < 0.5 Then
        CM_Okrugl = lng
    Else
        CM_Okrugl = lng + 1
    End If
End Function
</pre>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/okrugleniya/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
