<?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>Data Control, LLC</title>
	<atom:link href="http://datacontrolllc.com/blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://datacontrolllc.com/blog</link>
	<description>A Blog for Developers</description>
	<lastBuildDate>Thu, 02 Feb 2012 21:39:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Specific Port in Connection String to SQL</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/12/14/specific-port-in-connection-string-to-sql/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/12/14/specific-port-in-connection-string-to-sql/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 20:09:02 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[SQL Server Ports; VBA Connection string to SQL Server]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/?p=44</guid>
		<description><![CDATA[When creating a project that will use SQL Server as the back end, the default port used is 1433. You need to have your firewall and router forwarding incoming requests on that port. However, if you need to use a different port, you need to specify it in your string. The way you do that [...]]]></description>
			<content:encoded><![CDATA[<p>When creating a project that will use SQL Server as the back end, the default port used is 1433. You need to have your firewall and router forwarding incoming requests on that port. However, if you need to use a different port, you need to specify it in your string. The way you do that is in the IP setting. Where you would type IP=99.999.999.99 for a specific port you type IP=99.999.999.99,5000. The comma after the IP address separates the IP from the Port assignment. The port can be assigned after the comma.</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/12/14/specific-port-in-connection-string-to-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access linked to SQL</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/07/23/access-linked-to-sql/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/07/23/access-linked-to-sql/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 20:19:00 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Access Locked Records]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/?p=40</guid>
		<description><![CDATA[Be sure to set a default value for bit fields in SQL. Access does not like it when you do not. Access will place a default value into the fields if they do not have one and as a result, all the records will be locked. The value that Access loads is not posted back [...]]]></description>
			<content:encoded><![CDATA[<p>Be sure to set a default value for bit fields in SQL. Access does not like it when you do not. Access will place a default value into the fields if they do not have one and as a result, all the records will be locked. The value that Access loads is not posted back to the SQL Server so Access has changed all the records but the records are still dirty. So all records will be locked. No updates can take place. The only solution if you do get to this point is to delete the problem field from SQL Server entirely. Later, after you see that Access has unlocked the records, you can return to SQL Server and add the field along with a default value.</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/07/23/access-linked-to-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>64 Bit</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/07/09/64-bit/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/07/09/64-bit/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 10:24:08 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[64 bit]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/?p=38</guid>
		<description><![CDATA[Be aware that 64 bit operating systems along with 64 bit MS Access could spell trouble for your code. It will spell trouble for any libraries that you may hav e obtained along the way. There is a nearly total absence in the market of 64 bit versions of libraries. I would warn clients ahead [...]]]></description>
			<content:encoded><![CDATA[<p>Be aware that 64 bit operating systems along with 64 bit MS Access could spell trouble for your code. It will spell trouble for any libraries that you may hav e obtained along the way. There is a nearly total absence in the market of 64 bit versions of libraries. I would warn clients ahead of time if you can. Look through your client list and those that you know have unique libraries for whatever reason, contact them and let them know they will lose that function if they make the upgrade. The idea of 64 bit is wonderful. The reality of it is harsh.</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/07/09/64-bit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improve Db Performance in a Network Environ</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/04/28/improve-db-performance-in-a-network-environ/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/04/28/improve-db-performance-in-a-network-environ/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 17:50:17 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Speed]]></category>
		<category><![CDATA[Window 7]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/?p=36</guid>
		<description><![CDATA[Installing the following code into the first form that opens in a database will increase the database performance in a network environment, especially with Windows 7. Option Compare Database Â Public Function PrintISAMStats() Â Â Â  &#8216; Print the values returned by the ISAMStats function Â Â Â  &#8216; to the Debug window. Â Â Â Â Â Â  Debug.Print &#8220;Number of disk [...]]]></description>
			<content:encoded><![CDATA[<p>Installing the following code into the first form that opens in a database will increase the database performance in a network environment, especially with Windows 7.</p>
<p>Option Compare Database<br />
Â<br />
Public Function PrintISAMStats()<br />
Â Â Â  &#8216; Print the values returned by the ISAMStats function<br />
Â Â Â  &#8216; to the Debug window.<br />
Â Â Â<br />
Â Â Â  Debug.Print &#8220;Number of disk reads: &#8220;, DBEngine.ISAMStats(0)<br />
Â Â Â  Debug.Print &#8220;Number of disk writes: &#8220;, DBEngine.ISAMStats(1)<br />
Â Â Â  Debug.Print &#8220;Number of reads from cache: &#8220;, DBEngine.ISAMStats(2)<br />
Â Â Â  Debug.Print &#8220;Number of reads from read-ahead cache: &#8220;, DBEngine.ISAMStats(3)<br />
Â Â Â  Debug.Print &#8220;Number of locks placed: &#8220;, DBEngine.ISAMStats(4)<br />
Â Â Â  Debug.Print &#8220;Number of release lock calls: &#8220;, DBEngine.ISAMStats(5)<br />
Â Â Â  Debug.Print<br />
End Function<br />
Â<br />
Public Function ResetISAMStats()<br />
Â Â Â  &#8216; This procedure resets the values returned by the<br />
Â Â Â  &#8216; ISAMStats function to zero.<br />
Â Â Â<br />
Â Â Â  Dim intI As Integer<br />
Â Â Â  &#8216; Reset each value.<br />
Â Â Â  For intI = 0 To 5<br />
Â Â Â Â Â Â Â  DBEngine.ISAMStats intI, True<br />
Â Â Â  Next<br />
End Function<br />
Â<br />
Public Function UpdateISAM()<br />
Â Â Â  DBEngine.SetOption dbMaxBufferSize, 50000<br />
Â Â Â  DBEngine.SetOption dbMaxLocksPerFile, 500000<br />
Â  Â Â &#8216;DBEngine.SetOption dbFlushTransactionTimeout, 5000<br />
Â Â Â<br />
End Function<br />
Â<br />
Public Function runtest()<br />
&#8216;UpdateISAM<br />
ResetISAMStats<br />
Dim curtime As Date<br />
curtime = Now<br />
Â<br />
DoCmd.OpenForm &#8220;frmprc10claims&#8221;<br />
PrintISAMStats<br />
Â<br />
Debug.Print &#8220;Number of seconds:&#8221; &amp; DateDiff(&#8220;s&#8221;, curtime, Now())<br />
Â<br />
Â<br />
End Function</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/04/28/improve-db-performance-in-a-network-environ/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Likesearches in large SQL tables</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/02/28/likesearches-in-large-sql-tables/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/02/28/likesearches-in-large-sql-tables/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 12:19:49 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[SQL Search Like]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/index.php/2011/02/28/likesearches-in-large-sql-tables/</guid>
		<description><![CDATA[I&#8217;ve had several clients now that have requested a stored procedure that will return records based on key words entered by a user. There can be one or many key words and all have to match in order to match the item or product. I used to do this using a LIKE &#8216;%keyword1%&#8217; AND LIKE [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had several clients now that have requested a stored procedure that will return records based on key words entered by a user. There can be one or many key words and all have to match in order to match the item or product. I used to do this using a LIKE &#8216;%keyword1%&#8217; AND LIKE &#8216;%keyword2%&#8217; type of query using Dynamic SQL.</p>
<p>Using the LIKE operator like this on a large table can make for a long running query since no indexes can be used. A search query on an auto parts table with 1.2 million items took over 30 seconds to run for one of my clients. I developed a technique that would index each word in the item description in another table and use that for a search procedure. The average run time on that procedure is now 1.5 seconds.</p>
<p>In this article I&#8217;m going to use the AdventureWorks database to build such a table and show how to use it. Keep in mind that there isn&#8217;t much performance gain in this example since AdventureWorks had just over 500 products in it. ( I would never bother with this technique on a table that small.)</p>
<p>There are 2 tables that you have to create: KeyWordItems and KeyWordsToExclude. The first table has the primary key of the product or item table &#8211; in this case ProductID from Production.Product. The second table contains words that you want to ignore. This could be &#8216;a&#8217;, &#8216;an&#8217;, &#8216;the&#8217; and so forth. Another type of word to ignore in most cases would be any single character word, which would exclude such things as &#8216;&amp;&#8217; or &#8220;#&#8221; if there are spaces on either side.</p>
<p>Here is the code to create and populate the KeyWordsToExclude table:</p>
<p>CREATE TABLE KeyWordsToExclude<br />
( KeyWord VARCHAR(50) NOT NULL )<br />
GO<br />
ALTER TABLE KeyWordsToExclude<br />
ADD CONSTRAINT PK_KeyWordsToExclude<br />
PRIMARY KEY CLUSTERED (KeyWord)<br />
GO</p>
<p>&#8211; Populate the KeyWordsToExclude table with whatever you don&#8217;t want to<br />
&#8211; use.<br />
INSERT INTO KeyWordsToExclude<br />
( KeyWord )<br />
SELECT &#8216;A&#8217; UNION ALL<br />
SELECT &#8216;AN&#8217; UNION ALL<br />
SELECT &#8216;THE&#8217;<br />
GO<br />
Here is the KeyWordItems table:</p>
<p>CREATE TABLE KeyWordItems<br />
( KeyWord VARCHAR(50) NOT NULL<br />
, ProductID INT NOT NULL )<br />
GO</p>
<p>ALTER TABLE KeyWordItems<br />
ADD CONSTRAINT PK_KeyWordItems<br />
PRIMARY KEY CLUSTERED (KeyWord, ProductID)<br />
GO<br />
In order to populate the KeyWordItems table, you should have Jeff Moden&#8217;s table valued function &#8211; DelimitedSplit8KNEW. It is lightning fast and I&#8217;m including it here for simplicity (I hope Jeff doesn&#8217;t mind).</p>
<p> CREATE FUNCTION dbo.DelimitedSplit8KNEW<br />
&#8211;===== Created by Jeff Moden (Prototype: Testing Still in Progress)<br />
&#8211;===== Define I/O parameters<br />
        (<br />
        @pString    VARCHAR(8000),<br />
        @pDelimiter CHAR(1)<br />
        )<br />
RETURNS TABLE<br />
   WITH SCHEMABINDING<br />
     AS<br />
 RETURN<br />
WITH<br />
      E1(N) AS (<br />
                SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL<br />
                SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL<br />
                SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1<br />
               ),                          &#8211;10<br />
      E2(N) AS (SELECT 1 FROM E1 a, E1 b), &#8211;100<br />
      E4(N) AS (SELECT 1 FROM E2 a, E2 b), &#8211;10,000<br />
cteTally(N) AS (<br />
                SELECT 0 UNION ALL<br />
                SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E4<br />
               )<br />
 SELECT ItemNumber = ROW_NUMBER() OVER(ORDER BY t.N),<br />
        ItemValue  = SUBSTRING(@pString,t.N+1,ISNULL(NULLIF(CHARINDEX(@pDelimiter,@pString,t.N+1),0),DATALENGTH(@pString)+1)-t.N-1)<br />
   FROM cteTally t<br />
  WHERE t.N BETWEEN 0 AND DATALENGTH(@pString)<br />
    AND (SUBSTRING(@pString,t.N,1) = @pDelimiter OR t.N = 0)<br />
;<br />
GO<br />
Now we come to actually populating the KeyWordItems table. There are a few quirks in the AdventureWorks product names. Slashes are used to separate some words &#8211; e.g. &#8216;LL Mountain Seat/Saddle&#8217;. Also some product names have commas after a word &#8211; e.g. &#8216;Mountain Bike Socks, M&#8217;. This type of punctuation is not likely to be entered by a user searching by product name and so needs to be ignored. In the code below there are 2 REPLACE functions that will replace a &#8216;/&#8217; with a space (which makes it a separate word) and strip out commas.</p>
<p>SELECT<br />
  RecID = IDENTITY (INT, 1, 1)<br />
, CAST(P.ProductID AS INT) AS ProductID, Split.ItemValue AS KeyWord<br />
INTO #PW    &#8212; ProductWords<br />
FROM Production.Product P<br />
CROSS APPLY (SELECT ItemValue FROM dbo.DelimitedSplit8KNEW(REPLACE(REPLACE(P.Name, &#8216;/&#8217;, &#8216; &#8216;), &#8216;,&#8217;, &#8221;), &#8216; &#8216;)) AS Split<br />
WHERE LEN(ItemValue) &gt; 1</p>
<p>&#8211; Delete the words that are in KeyWordsToExclude (This could have been<br />
&#8211; included<br />
&#8211; above but done as a separate step to keep the SQL simple. In<br />
&#8211; AdventureWorks there aren&#8217;t any product names that will be excluded.<br />
DELETE PW<br />
FROM #PW PW<br />
INNER JOIN KeyWordsToExclude KWE ON<br />
        PW.KeyWord = KWE.KeyWord</p>
<p>&#8211; Delete any product key words with the same word twice. Again<br />
&#8211; AdventureWorks product names don&#8217;t have the same word twice in them.<br />
&#8211; Your data may differ.<br />
DELETE PW<br />
FROM #PW PW<br />
INNER JOIN<br />
  (SELECT MIN(RecID) AS MinRecID, ProductID, KeyWord<br />
   FROM #PW<br />
   GROUP BY ProductID, KeyWord<br />
   HAVING COUNT(*) &gt; 1<br />
  ) AS X ON<br />
        PW.ProductID = X.ProductID<br />
        AND PW.KeyWord = X.KeyWord<br />
        AND PW.RecID  X.MinRecID</p>
<p>&#8211; Populate the KeyWordItems table.<br />
INSERT INTO KeyWordItems<br />
( ProductID, KeyWord )<br />
SELECT<br />
  ProductID, KeyWord<br />
FROM #PW<br />
It is VERY important to note that the SAME logic that is used to populate the KeyWordItems table must be used when handling the user input &#8211; i.e. the same punctuation handling, the same ignored words, the same restriction on no single letter words, etc. Otherwise you may end up where something that should match that won&#8217;t match.</p>
<p>Once the key words table has been created it will have to be maintined either in a procedure or trigger when an update occurs to the column you are using for the words (item description, product name, etc.). If any change is made to that column the procedure or trigger should delete and re-add the key words using the same logic that was used to initially populate it.</p>
<p>Now for some actual queries.</p>
<p>Here is a typical query for 2 key words &#8211; usually created in Dynamic SQL &#8211; that would search the Products table.</p>
<p>SELECT<br />
  ProductID, Name, Color, Size, ListPrice<br />
FROM Production.Product<br />
WHERE<br />
    Name LIKE &#8216;%nut%&#8217;<br />
AND     Name LIKE &#8216;%hex%&#8217;This would return something like:</p>
<p>Here are the actual stats from SET STATISTICS TIME ON and SET STATISTICS TIME ON which was set before running the query above:</p>
<p>Table &#8216;Product&#8217;. Scan count 1, logical reads 23, physical reads 3<br />
, read-ahead reads 0, lob logical reads 0, lob physical reads 0<br />
, lob read-ahead reads 0.</p>
<p>SQL Server parse and compile time:<br />
CPU time = 15 ms, elapsed time = 270 ms.</p>
<p>The important point above is the table scan on the Product table. This is what the query plan for the above query looks like:</p>
<p>Here is the procedure that will do the search using the new key word tables:</p>
<p>CREATE PROCEDURE ItemSearch<br />
  @KeyWords VARCHAR(256)<br />
AS</p>
<p>SET NOCOUNT ON;</p>
<p>&#8211; We need to know how many words the user entered for the search.<br />
DECLARE<br />
  @KWCount  INT</p>
<p>&#8211; Temp table of passed in key words<br />
CREATE TABLE #KW<br />
( RecID         INT IDENTITY(1, 1)<br />
, KeyWord       VARCHAR(50))</p>
<p>&#8211; Same function and same logic used to populate KeyWordItems table.<br />
INSERT INTO #KW<br />
( KeyWord )<br />
SELECT ItemValue<br />
FROM dbo.DelimitedSplit8KNEW(REPLACE(REPLACE(@KeyWords,&#8217;/',&#8217; &#8216;),&#8217;,',&#8221;),&#8217; &#8216;) AS Split<br />
WHERE NOT EXISTS<br />
  (SELECT 1 FROM KeyWordsToExclude KWE<br />
   WHERE KWE.KeyWord = Split.ItemValue)</p>
<p>&#8211; Delete any duplicate words.  Same as was done for the KeyWordItems<br />
&#8211; table.<br />
DELETE KW<br />
FROM #KW KW<br />
INNER JOIN<br />
  (SELECT MIN(RecID) AS MinRecID, KeyWord<br />
   FROM #KW<br />
   GROUP BY KeyWord<br />
   HAVING COUNT(*) &gt; 1<br />
  ) AS X ON<br />
        KW.KeyWord = X.KeyWord<br />
        AND KW.RecID  X.MinRecID</p>
<p>&#8211; Number of words in the temp table.<br />
SELECT @KWCount = X.RecCount<br />
FROM<br />
  (SELECT COUNT(*) AS RecCount FROM #KW<br />
  ) AS X</p>
<p>&#8211; Create a little stub table from the temp table joined to the<br />
&#8211; KeyWordItems table. Using this stub table avoids<br />
&#8211; joining to the larger Product table multiple times and then<br />
&#8211; aggregating the results.  The GROUP BY also does a sort on ProductID<br />
&#8211; so that this stub table and the main Product table are eligible<br />
&#8211; for a MERGE JOIN.  You may have to index it in order to get a<br />
&#8211; MERGE in the query plan.</p>
<p>&#8211; The HAVING part means that the product name must match the #KW table<br />
&#8211; the same number of times as the count of words.  This produces the<br />
&#8211; same effect as the AND operator in the original LIKE query.</p>
<p>SELECT<br />
  KWI.ProductID<br />
INTO #KWP  &#8212; Stub table of Products with the matching key words.<br />
FROM #KW<br />
INNER JOIN KeyWordItems KWI ON<br />
        #KW.KeyWord = KWI.KeyWord<br />
GROUP BY KWI.ProductID<br />
HAVING COUNT(*) = @KWCount</p>
<p>&#8211; Return the requested Products<br />
SELECT<br />
  P.ProductID, P.Name, P.Color, P.Size, P.ListPrice<br />
FROM #KWP KWP<br />
INNER JOIN Production.Product P ON<br />
        KWP.ProductID = P.ProductID<br />
GO<br />
Now we run the stored procedure for the same key words:</p>
<p>EXEC ItemSearch<br />
  @KeyWords = &#8216;nut hex&#8217;<br />
This produces the same results as the original LIKE query. Here are the stats for the procedure:</p>
<p>Table &#8216;Product&#8217;. Scan count 0, logical reads 78, physical reads 2<br />
, read-ahead reads 0, lob logical reads 0, lob physical reads 0<br />
, lob read-ahead reads 0.</p>
<p>SQL Server Execution Times:<br />
CPU time = 0 ms, elapsed time = 175 ms.</p>
<p>The important part of this is that there is no Scan count on the Product table. Here is what the actual query plan looks like:</p>
<p>Note that we get a Clustered Index Seek on the Product table instead of a scan.</p>
<p>As I mentioned before, since AdventureWorks only has just over 500 products, this technique doesn&#8217;t do much. When I used it against an item table of auto parts of over 1.2 million the performance differences was astounding.</p>
<p>This technique is most useful for searches where all criteria (and AND condition) must be met in order to qualify for a match. I hope someone finds this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/02/28/likesearches-in-large-sql-tables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server and Visual Basic</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/02/22/sql-server-and-visual-basic/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/02/22/sql-server-and-visual-basic/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 22:42:09 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Null SQL VB]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/index.php/2011/02/22/sql-server-and-visual-basic/</guid>
		<description><![CDATA[Remember when casting values that there are some cases where a null value will result in an error and no conversion. Check your properties for your variables in VB and you fields in SQL.]]></description>
			<content:encoded><![CDATA[<p>Remember when casting values that there are some cases where a null value will result in an error and no conversion. Check your properties for your variables in VB and you fields in SQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/02/22/sql-server-and-visual-basic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL or Access Adding Records</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/02/08/sql-or-access-adding-records/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/02/08/sql-or-access-adding-records/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 19:40:46 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Adding Records]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/index.php/2011/02/08/sql-or-access-adding-records/</guid>
		<description><![CDATA[Suggestions on how to let users enter new data into SQL or even Access. 1) Build them a real data-entry app (could be web-based, but doesn&#8217;t have to be) that will check all the inputs before submitting the data to the tables OR 2) Have them input whatever they want (Excel &#8211; that could be [...]]]></description>
			<content:encoded><![CDATA[<p>Suggestions on how to let users enter new data into SQL or even Access.</p>
<p>1) Build them a real data-entry app (could be web-based, but doesn&#8217;t have to<br />
be) that will check all the inputs before submitting the data to the tables<br />
OR<br />
2) Have them input whatever they want (Excel &#8211; that could be<br />
an option).<br />
Import into a staging table with the same field names, but all data types<br />
set to varchar(), so that there is no validation. This way you gather<br />
everything the users send you.<br />
Then write an app that goes through the staging table and does all the<br />
validations that you want, imports the good records and spits out a report<br />
of rejected records that can be dealt with manually </p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/02/08/sql-or-access-adding-records/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Referencing values on subforms</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/02/08/referencing-values-on-subforms/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/02/08/referencing-values-on-subforms/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 19:36:24 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Subforms]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/index.php/2011/02/08/referencing-values-on-subforms/</guid>
		<description><![CDATA[Remember the syntax for the way to recall information from a subform to a form is [subFormName].[Form]![FieldName]]]></description>
			<content:encoded><![CDATA[<p>Remember the syntax for the way to recall information from a subform to a form is [subFormName].[Form]![FieldName]</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/02/08/referencing-values-on-subforms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VPN</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/01/21/vpn/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/01/21/vpn/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 14:11:47 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/index.php/2011/01/21/vpn/</guid>
		<description><![CDATA[Take advantage of free resources to create a VPN for remote access. LogMeIn is one such resource. Use it to create a VPN between your base location and any remote users you might have. That way you can remote into a database anytime with Internet access.]]></description>
			<content:encoded><![CDATA[<p>Take advantage of free resources to create a VPN for remote access. LogMeIn is one such resource. Use it to create a VPN between your base location and any remote users you might have. That way you can remote into a database anytime with Internet access.</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/01/21/vpn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security</title>
		<link>http://datacontrolllc.com/blog/index.php/2011/01/21/security/</link>
		<comments>http://datacontrolllc.com/blog/index.php/2011/01/21/security/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 14:07:01 +0000</pubDate>
		<dc:creator>rawilken</dc:creator>
				<category><![CDATA[Access 2007 problems/solutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Backup SQL Access Security]]></category>

		<guid isPermaLink="false">http://datacontrolllc.com/blog/index.php/2011/01/21/security/</guid>
		<description><![CDATA[The first and most important step in creating a security process is to establish and maintain a solid backup process for ALL files! Whether they are only in Access or in Access and SQL Server.]]></description>
			<content:encoded><![CDATA[<p>The first and most important step in creating a security process is to establish and maintain a solid backup process for ALL files! Whether they are only in Access or in Access and SQL Server.</p>
]]></content:encoded>
			<wfw:commentRss>http://datacontrolllc.com/blog/index.php/2011/01/21/security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

