<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-121856092844548695</id><updated>2011-12-01T06:01:26.932-07:00</updated><category term='patindex'/><category term='pretty SQL beautifier'/><category term='VBA'/><category term='pattern matching'/><category term='table'/><category term='MS Access 2003'/><category term='SOAP SIZE'/><category term='cursor'/><category term='sql'/><category term='Page Break'/><category term='unhide'/><category term='SQLServer Toad'/><category term='languages'/><category term='SQL Server'/><category term='XP WFDE Local Admin'/><category term='statistics'/><category term='query'/><category term='wildcard'/><category term='filter'/><category term='Excel'/><title type='text'>Wofda, LLC</title><subtitle type='html'>We are a consulting company in Denver, Colorado doing a lot of databasing and custom application development. This blog is a gift back to the internet because the internet helps us out so much.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default?start-index=101&amp;max-results=100'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>115</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8431593054485072366</id><published>2011-03-01T14:14:00.002-07:00</published><updated>2011-03-01T14:14:55.565-07:00</updated><title type='text'>sql lost</title><content type='html'>TO THE FACE!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-5QldAtxqHPc/TW1hvztvPbI/AAAAAAAAAVA/aUZTyJKLj9A/s1600/Capture.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://2.bp.blogspot.com/-5QldAtxqHPc/TW1hvztvPbI/AAAAAAAAAVA/aUZTyJKLj9A/s400/Capture.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5579222987345706418" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8431593054485072366?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8431593054485072366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8431593054485072366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8431593054485072366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8431593054485072366'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2011/03/sql-lost.html' title='sql lost'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-5QldAtxqHPc/TW1hvztvPbI/AAAAAAAAAVA/aUZTyJKLj9A/s72-c/Capture.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2937490159745541324</id><published>2010-09-20T10:13:00.005-06:00</published><updated>2010-09-20T10:39:16.255-06:00</updated><title type='text'>Lat/Long datum conversion</title><content type='html'>Latitude and longitude coordinates are not quite as universal as we tend to think.  A given coordinate pair gives a position on a virtual grid that has been draped over the globe.  As surveying techniques have advanced the US has been re-surveyed a number of times.  Because a new survey will never perfectly match the old one the virtual grid distorts and shifts slightly.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The two datums that are frequently used as references for coordinates are &lt;a href="http://en.wikipedia.org/wiki/North_American_Datum"&gt;North American Datum&lt;/a&gt; 1927 and 1983 (NAD27 and NAD83 respectively).  The distance between identical coordinates in the two datums varies from 10 to 100 meters in the contiguous US (see map in Wikipedia article linked above).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &lt;a href="http://www.ngs.noaa.gov/"&gt;National Geodetic Survey&lt;/a&gt; has a very handy tool &lt;a href="http://www.ngs.noaa.gov/cgi-bin/nadcon.prl"&gt;here&lt;/a&gt; that will convert between NAD27 and NAD83.  The website accepts individual coordinate entries or a text file of points to convert.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2937490159745541324?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2937490159745541324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2937490159745541324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2937490159745541324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2937490159745541324'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/09/latlong-datum-conversion.html' title='Lat/Long datum conversion'/><author><name>Will Hickey</name><uri>http://www.blogger.com/profile/01685627431111768454</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp0.blogger.com/_ug4R56vaXDo/RpKYU5O9E6I/AAAAAAAAAAM/fjLwRF5quFI/s320/IMG_2796_2small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-464138083259298573</id><published>2010-06-25T07:48:00.003-06:00</published><updated>2010-06-25T07:50:30.824-06:00</updated><title type='text'>Data Visualization</title><content type='html'>A very nice summary of some basic data presentations.  And a few less common ones too.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://queue.acm.org/detail.cfm?id=1805128"&gt;A Tour through the Visualization Zoo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-464138083259298573?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/464138083259298573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=464138083259298573' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/464138083259298573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/464138083259298573'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/06/data-visualization.html' title='Data Visualization'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6030904833270531941</id><published>2010-05-19T14:39:00.003-06:00</published><updated>2010-05-19T14:57:15.627-06:00</updated><title type='text'>Directional Drilling 101</title><content type='html'>Drilling directionally is a good deal more complex that a traditional vertical well drilling and includes alot more math and fancy tools to determine where in 3-D space the borehole(s) are. For a quick tutorial check this out! &lt;a href="http://www.ogs.ou.edu/highlightsfiles/HDRILLChap4DirDrill.ppt"&gt;&lt;span class="f"&gt;&lt;cite&gt;&lt;b&gt;www&lt;/b&gt;.ogs.ou.edu/highlightsfiles/H&lt;b&gt;DRILL&lt;/b&gt;Chap4Dir&lt;b&gt;Drill&lt;/b&gt;.ppt&lt;/cite&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6030904833270531941?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6030904833270531941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6030904833270531941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6030904833270531941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6030904833270531941'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/05/directional-drilling-101.html' title='Directional Drilling 101'/><author><name>Jon</name><uri>http://www.blogger.com/profile/15084330834474409231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4962742731334259787</id><published>2010-05-14T10:33:00.001-06:00</published><updated>2010-05-14T10:33:20.072-06:00</updated><title type='text'>msdb cannot be opened. it has been marked suspect by recovery</title><content type='html'>SQL SERVER 2005/2008&lt;br /&gt;&lt;br /&gt;So you go to use SQL Server one day and open up a query window and suddenly get this message: &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;msdb cannot be opened. it has been marked suspect by recovery&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Lovely.&lt;br /&gt;&lt;br /&gt;Assuming you have backups of your system databases (like we all do *of course*) you could just restore a new database over the mdsb one.&lt;br /&gt;&lt;br /&gt;Well - in my case that wouldn't work. Still the same error kept popping up.&lt;br /&gt;&lt;br /&gt;Then I tried to rename the msdb files and create a new msdb...here's how\&lt;br /&gt;0. Shut down your database.&lt;br /&gt;1. Since you cant detach the broken dmsb you have to start sql server with flag 3608. So for 2005 statedown SQL Server and run this command: &lt;br /&gt;&lt;b&gt;C:\Program Files\Microsoft SQL Server\[Instance Name]\MSSQL\Binn&gt; start sqlservr.exe -c t3608&lt;/b&gt; &lt;br /&gt;For 2008 run &lt;b&gt;C:\Program Files\Microsoft SQL Server\[Instance Name]\MSSQL\Binn&gt; start sqlservr.exe -c t3608 -s [Instance Name]&lt;/b&gt; &lt;br /&gt;2. Now rename the damaged msdb files (msdbdata.mdf and msdblog.ldf in the C:\Program Files\Microsoft SQL Server\[Instance Name]\MSSQL\Data directory&lt;br /&gt;3. Run the instmsdb.sql script in the 'C:\Program Files\Microsoft SQL Server\[Instance Name]\MSSQL\Install directory&lt;br /&gt;And in theory...4. Shutdown and restart the server without the 3608 trace flag&lt;br /&gt;&lt;br /&gt;Well for me I got errors when I ran then instmsdb.sql file.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Database 'msdb' cannot be opened due to inaccessible files or insufficient memory or disk space.  See the SQL Server errorlog for details.&lt;br /&gt;&lt;br /&gt;User does not have permission to alter database 'msdb', the database does not exist, or the database is not in a state that allows access checks.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Lovely.&lt;br /&gt;&lt;br /&gt;Ok so after spending way too long on this, I decided that maybe my a thread of luck I could patch SQL Server and it'd come back to live...but nope. So don't try that.&lt;br /&gt;&lt;br /&gt;Then I got the idea to repair my SQL installation (an option with SQL 2008 in the SQL Server Installation Server) - but then soon realized I had to have the install disk which I didn't have. So that I idea was wrong.&lt;br /&gt;&lt;br /&gt;SOOO! (Yes there is an end to all of this) - &lt;br /&gt;&lt;br /&gt;On a site linking to msdn &lt;a href = "http://msdn.microsoft.com/en-us/library/dd207003.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd207003.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WAS THE ANSWER!!!!!!!!!!!!!&lt;br /&gt;&lt;br /&gt;Hurray!&lt;br /&gt;&lt;br /&gt;Running this:&lt;br /&gt;&lt;br /&gt;C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Release&gt; Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]&lt;br /&gt;&lt;br /&gt;(the password is optional as I didn't have one - but rather my domain user account which has admin privilidges).&lt;br /&gt;&lt;br /&gt;The output was just the MS copyright information - no errors.&lt;br /&gt;&lt;br /&gt;Then I started my database back up and eureka! master, model, msdb, and tempdb were there! Now all of the other databases had been detached but that's no worry considering I couldn't log in a few hours ago.&lt;br /&gt;&lt;br /&gt;So that's that...and let's hope you &lt;b&gt;never&lt;/b&gt; have this happen to you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4962742731334259787?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4962742731334259787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4962742731334259787' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4962742731334259787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4962742731334259787'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/05/msdb-cannot-be-opened-it-has-been.html' title='msdb cannot be opened. it has been marked suspect by recovery'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8049743167291851094</id><published>2010-04-09T11:49:00.002-06:00</published><updated>2010-04-09T11:58:01.657-06:00</updated><title type='text'>Handy tool for MS Access developers</title><content type='html'>&lt;div&gt;Anyone who's spent much time writing queries in MS Access knows how frustrating the query editor is.  Its poor feature set, unreadable font and strange, undocumented bugs render it nearly unusable for anything but the most basic query writing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://download.cnet.com/SQL-Query-Tool-Using-ODBC/3000-10254_4-10057486.html"&gt;http://download.cnet.com/SQL-Query-Tool-Using-ODBC/3000-10254_4-10057486.html&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I started using this tool earlier this week and have been very pleased with the results.  However, a word of caution... when using this tool against MS Access databases, normal Access SQL syntax will not work... strings must be single quoted (not double quoted) and the wildcard characters are _ and % (not *).  There may well be other SQL differences I haven't uncovered yet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't know exactly why this is the case but it's not specific to this tool... any 3rd party access to MS Access databases encounters the same problem.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8049743167291851094?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8049743167291851094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8049743167291851094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8049743167291851094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8049743167291851094'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/04/handy-tool-for-ms-access-developers.html' title='Handy tool for MS Access developers'/><author><name>Will Hickey</name><uri>http://www.blogger.com/profile/01685627431111768454</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp0.blogger.com/_ug4R56vaXDo/RpKYU5O9E6I/AAAAAAAAAAM/fjLwRF5quFI/s320/IMG_2796_2small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4813587339226099701</id><published>2010-03-30T15:34:00.002-06:00</published><updated>2010-03-30T15:37:25.692-06:00</updated><title type='text'>WPF Toolkit install issues on Windows 7</title><content type='html'>When trying to install the latest wpf toolkit release for windows 7, there is an issue apparently with the naming of .net 3.5 sp1 that causes the toolkit msi to think .net 3.5 sp1 is not installed (when it is). To fix it, I came across this post http://peterblomqvist.blogspot.com/2009/12/installing-wpf-toolkit-june-2009-on.html, which outlines a way to remove the launch condition thus enabling the toolkit to install!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4813587339226099701?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4813587339226099701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4813587339226099701' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4813587339226099701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4813587339226099701'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/03/wpf-toolkit-install-issues-on-windows-7.html' title='WPF Toolkit install issues on Windows 7'/><author><name>Jon</name><uri>http://www.blogger.com/profile/15084330834474409231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3791464294083375253</id><published>2010-03-11T10:23:00.013-07:00</published><updated>2010-03-11T12:52:53.252-07:00</updated><title type='text'>C# (.NET actually) for C++ programmers: static variables</title><content type='html'>&lt;span style="font-weight:bold;"&gt;The Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Surely I'm not the only programmer that has just started C# without formal training or a book or something. Perhaps there's other out there that also come from a C++ world. Static variables can be used for all types of design patterns other than a singleton which seems to be the only thing msdn can imagine a static variable to be used for.&lt;br /&gt;&lt;br /&gt;Maybe we want a global thread-safe index generator:&lt;br /&gt;&lt;pre&gt;volatile long MyClass::s_current_idx = 0;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Or perhaps there's something more complex we wish to accomplish&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class MyListener&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    MyListener(unsigned short port);&lt;br /&gt;    ~MyListener();&lt;br /&gt;&lt;br /&gt;    unsigned short port() const;&lt;br /&gt;private:&lt;br /&gt;    int m_sockfd;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let's pretend this is a class that just accepts tcp connections at the specified port. Then we have:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class MainProgramThingy&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    MainProgramThingy();&lt;br /&gt;    ~MainProgramThingy();&lt;br /&gt;&lt;br /&gt;    bool pingListener() const;&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;    void makeSocketConnection(const char *server, unsigned short port);&lt;br /&gt;    void closeSocketConnection();&lt;br /&gt;&lt;br /&gt;    static MyListener s_Listen;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And of course, the definition:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;MyListener MainProgramThingy::s_Listen(8080);&lt;br /&gt;&lt;br /&gt;MainProgramThingy::MainProgramThingy()&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MainProgramThingy::~MainProgramThingy()&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;bool MainProgramThingy::pingListener() const&lt;br /&gt;{&lt;br /&gt;    bool rt = !makeSocketConnection("localhost", s_Listen.port());&lt;br /&gt;    if (rt)&lt;br /&gt;        closeSocketConnection();&lt;br /&gt;    return rt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void MainProgramThingy::makeSocketConnection(const char *host, unsigned short port)&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void MainProgramThingy::closeSocketConnection(const char *host, unsigned short port)&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Great! Now in theory, right when the application starts up, a tcp port is opened to 8080 and there's a MyListener ready to accept connections. You don't even have to touch MainProgramThingy. You can just connect with telnet or something and it'll partially work (provided the '...'s are actually implemented properly. If you expand on the example more and kick off a thread that actually accept()s connections and handles them, you're golden.&lt;br /&gt;&lt;br /&gt;.NET can make a lot of this concept easier (we'll just assume you MUST open this port and do some custom stuff with it) with System.Net stuff. However, go ahead and implement the above and see if it works as intended... Specifically, try to start up an application that doesn't reference MainProgramThingy outside of the above. No socket will be opened. No MyListener will even be constructed. But you designed it such that the lack of a reference wouldn't matter, the tcp listener should still be there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Explanation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So it turns out the .NET CLR has this cool "smart" feature when it comes to static variables. The .NET CLR figures out when to initialize static variables and does it on demand. There's some tweaks that you can apply that will influence this. For example, you can set it up so that when it enters a function, it checks and initializes all static references that *might* be accessed in that function. Or you can set it up so that it only checks and initializes upon access (This might only actually work in the .NET runtime version 4.0). In either case, the above wouldn't work without an explicit reference to MainProgramThingy at runtime.&lt;br /&gt;&lt;br /&gt;Of course, there's a reason for this. And most C++ programmers already know what it is. C++ provides nothing in any specs about the order to initialize static variables in. Of course, logically, in the same code file, they would be initialized in the order they are defined. But what if you have 2 code files that are joined at link time? Which one is initialized first? gcc at least used to do it just based on the order the .o files are passed into the linker at link time. But that's just gcc. There's no guarantee that another compiler or a more current version of gcc won't do it entirely differently.&lt;br /&gt;&lt;br /&gt;This can be a major problem when you have a static initializer in filea.cc that accesses a static member in fileb.cc. You could just end up with corruption all over the place on account of fileb.cc's static variable not being initialized before it's accessed by filea.cc. This can be even harder to track because the memory is already allocated on startup for fileb.cc's static var. It's just not set yet. This means no access violation or valgind memory error (except potentially a read of uninitialized memory, which are sort of littered throughout anyway from more basic static access) - just some problems cascading down the line to pop up later during a run. This concept is demonstrated in the static initialization fiasco scenario.&lt;br /&gt;&lt;br /&gt;With the .NET way, the spec is that static variables are initialized on an as-needed basis. This is great because the programmer doesn't even need to worry about static initialization problems other than the blatantly obvious scenario of circular dependency, which would be a logic error on the programmer's part. But in solving this problem, .NET introduced another one; namely, the one stated above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the case of .NET architecture, static methods are not built into a static library with a fixed address based on the library load - none of your code gets executed merely by loading an assembly. Static members are actually attached to the Type itself. As soon as the type is initialized, static methods are. Types are initialized on demand per the dynamics above. So now they are pseudo-statics in my mind. Initially, a static meant static - a single instance fixed in place in this global universe... this implemented on the mechanics of a library being loaded. But in .NET, they are explicitly a part of the Type metadata which is a .NET CLR-specific thing. So while they operate on a similar paradigm, a .NET CLR static is &lt;b&gt;not&lt;/b&gt; the same thing as a C++ static member.&lt;br /&gt;&lt;br /&gt;There is no great way around the gotcha that makes it all work like C++. But if you want to initialize the type without accessing an object of it's type, there is a static method in the .NET libraries that will get that done for you:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;RuntimeHelpers.RunClassConstructor(typeof(MainProgramThingy).TypeHandle);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will initialize the type thereby initializing the static members. I was hoping to find something to trigger some code on an Assembly load. I guess such is not possible. So the only workaround I've found is to call the above in your entry point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3791464294083375253?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3791464294083375253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3791464294083375253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3791464294083375253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3791464294083375253'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/03/c-net-actually-for-c-programmers-static.html' title='C# (.NET actually) for C++ programmers: static variables'/><author><name>Keef</name><uri>http://www.blogger.com/profile/03444449386280127627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4420006858591958887</id><published>2010-02-15T11:19:00.002-07:00</published><updated>2010-02-15T11:27:53.917-07:00</updated><title type='text'>Good, Free Anti-Spyware Software</title><content type='html'>Every few years, my Windows machine comes down with something nasty, resulting in a frustrating couple of days involving lots of safe mode and picking around in my registry, etc.&lt;br /&gt;&lt;br /&gt;A few years ago, I started researching and using commercial anti-spyware programs as part of my dis-infection repertoire. For a while, my favorite has been LavaSoft's Ad-Aware.&lt;br /&gt;&lt;br /&gt;In my most recent bout with the mal-ware armies, however, Ad-Aware (the free version) wasn't really up to the task. Neither, as it turns out, was the Symantec software that came with my computer.&lt;br /&gt;&lt;br /&gt;What did the trick? &lt;a href="http://superantispyware.com/"&gt;SuperantiSpyware&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nice interface, lots of scanning options, and most importantly, it cleaned up my system... good as new!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4420006858591958887?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4420006858591958887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4420006858591958887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4420006858591958887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4420006858591958887'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/02/good-free-anti-spyware-software.html' title='Good, Free Anti-Spyware Software'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-497424861925045075</id><published>2010-01-14T10:25:00.000-07:00</published><updated>2010-01-14T10:26:02.569-07:00</updated><title type='text'>10 things to remember when using SSIS</title><content type='html'>1) Variables are case sensitive&lt;br /&gt;2) (when using 2005) Whenever you are making a script from the script component and typing in your variables, don't put a space between them&lt;br /&gt;3) Make sure you assert correctly at the end of a script (Success of Failure)&lt;br /&gt;4) Save often. VS crashes at the strangest times&lt;br /&gt;5) Make sure your variables are at the right scope. You can spend hours trying to figure out why "TotalRowCount" isn't at the parent scope....&lt;br /&gt;6) BIDS Helper does wonders for moving variables around created in the wrong scope (admit...we all do it) www.codeplex.com/bidshelper&lt;br /&gt;7) Even though it may take more time at the beginning - try to put as much error handling in the packages that you think you're going to need. It's tedious and ..well it sucks to go back through your packages adding in extra stuff (although - you will eventually do it someday - development lifestyle).&lt;br /&gt;8) If you try to edit the XML of the package directly, make sure you make a backup of the package first. The smallest mistake could corrupt the package and you don't want to be left with the task of writing a new package&lt;br /&gt;9) Make sure visual studio and SQL Server are patched. The patches generally fix some of the annoying errors that occur&lt;br /&gt;10) Make the transformations in your package as few as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-497424861925045075?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/497424861925045075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=497424861925045075' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/497424861925045075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/497424861925045075'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/01/10-things-to-remember-when-using-ssis.html' title='10 things to remember when using SSIS'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5357661519572698673</id><published>2010-01-04T14:12:00.002-07:00</published><updated>2010-01-04T14:17:21.758-07:00</updated><title type='text'>Access  Float -&gt; Int Bug/Feature</title><content type='html'>This one's a doozy.  Not so much because it's there... but rather because it's actually DOCUMENTED.  Look up the help in Access 2003 for either the Cint() or the CLng() Type-conversion functions and scroll down to the 4th paragraph under 'remarks'.&lt;br /&gt;&lt;br /&gt;When the fractional part of the argument passed to CInt or CLng is exactly .5, those functions round to the nearest EVEN integer.  So 0.5 gets rounded DOWN to 0, but 1.5 gets rounded UP to 2.  I have tested this and witnesses the behavior myself, but I won't blame you if you test it yourself before believing me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5357661519572698673?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5357661519572698673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5357661519572698673' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5357661519572698673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5357661519572698673'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2010/01/access-float-int-bugfeature.html' title='Access  Float -&gt; Int Bug/Feature'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5289093129926661441</id><published>2009-11-30T21:03:00.000-07:00</published><updated>2009-11-30T21:04:28.921-07:00</updated><title type='text'>Invictus</title><content type='html'>OUT of the night that covers me,&lt;br /&gt;Black as the Pit from pole to pole,&lt;br /&gt;I thank whatever gods may be&lt;br /&gt;For my unconquerable soul.&lt;br /&gt;&lt;br /&gt;In the fell clutch of circumstance&lt;br /&gt;I have not winced nor cried aloud.&lt;br /&gt;Under the bludgeonings of chance&lt;br /&gt;My head is bloody, but unbowed.&lt;br /&gt;&lt;br /&gt;Beyond this place of wrath and tears&lt;br /&gt;Looms but the Horror of the shade,&lt;br /&gt;And yet the menace of the years&lt;br /&gt;Finds and shall find me unafraid.&lt;br /&gt;&lt;br /&gt;It matters not how strait the gate,&lt;br /&gt;How charged with punishments the scroll&lt;br /&gt;I am the master of my fate:&lt;br /&gt;I am the captain of my soul.&lt;br /&gt;&lt;br /&gt;--William Ernest Henley&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5289093129926661441?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5289093129926661441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5289093129926661441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5289093129926661441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5289093129926661441'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/11/invictus.html' title='Invictus'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8182332291964267795</id><published>2009-09-17T15:08:00.006-06:00</published><updated>2009-09-17T15:17:53.888-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Nice code site</title><content type='html'>&lt;pre&gt;Who wouldn't love a site that codes the lyrics to "99 Bottles" &lt;br /&gt;in 1290 different coding languages!&lt;br /&gt;&lt;br /&gt;http://99-bottles-of-beer.net/&lt;br /&gt;&lt;br /&gt;The MS SQL 2000 sample below was provided by David Teviotdale:&lt;br /&gt;&lt;br /&gt;select&lt;br /&gt;   CASE (a.aa * 10 + b.bb)&lt;br /&gt;       WHEN 0 THEN 'No more bottle of beer on the wall, no more bottles of beer. ' +&lt;br /&gt;                  'Go to the store and buy some more, 99 bottles of beer on the wall.'&lt;br /&gt;       WHEN 1 THEN '1 bottle of beer on the wall, 1 bottle of beer. ' +&lt;br /&gt;                   'Take one down and pass it around, no more bottles of beer on the wall.'&lt;br /&gt;       WHEN 2 THEN '2 bottles of beer on the wall, 2 bottles of beer. ' +&lt;br /&gt;                   'Take one down and pass it around, 1 bottle of beer on the wall.'&lt;br /&gt;       ELSE&lt;br /&gt;           cast((a.aa * 10 + b.bb) as varchar(2)) + ' bottles of beer on the wall, ' +&lt;br /&gt;           cast((a.aa * 10 + b.bb) as varchar(2)) + ' bottles of beer. ' +&lt;br /&gt;           'Take one down and pass it around, ' +&lt;br /&gt;           cast((a.aa * 10 + b.bb)-1 as varchar(2)) + ' bottles of beer on the wall.'&lt;br /&gt;   END&lt;br /&gt;from&lt;br /&gt;   (select 0 as aa union select 1 union select 2 union select 3 union select 4&lt;br /&gt;   union select 5 union select 6 union select 7 union select 8 union select 9) a&lt;br /&gt;cross join&lt;br /&gt;   (select 0 as bb union select 1 union select 2 union select 3 union select 4&lt;br /&gt;   union select 5 union select 6 union select 7 union select 8 union select 9) b&lt;br /&gt;order by a.aa desc, b.bb desc&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8182332291964267795?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8182332291964267795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8182332291964267795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8182332291964267795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8182332291964267795'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/09/nice-code-site.html' title='Nice code site'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6451689626838295044</id><published>2009-09-16T15:28:00.002-06:00</published><updated>2009-09-16T15:31:49.625-06:00</updated><title type='text'>Hacking Excel</title><content type='html'>So I know there's a way to do this better...but here's a hack for Excel.&lt;br /&gt;&lt;br /&gt;If you're looking to get the first sheet (regardless of name) into your little program...check this out&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sourceFile &lt;br /&gt;                + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";&lt;br /&gt;            &lt;br /&gt;conn = new OleDbConnection(strConn);&lt;br /&gt;conn.Open();&lt;br /&gt;&lt;br /&gt;//get data in first worksheet&lt;br /&gt;cmd = new OleDbCommand("SELECT * FROM A1:IV65536", conn);&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The A1:IV65536 can be replaced with any range that you know your data is in. If you're wanting just to look for data on a worksheet (gotta know the name of the sheet), you'd do soemthing like :&lt;br /&gt;&lt;br /&gt;"SELECT * FROM [HulkSMASH$]A1:C65"&lt;br /&gt;&lt;br /&gt;Happy Excelling!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6451689626838295044?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6451689626838295044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6451689626838295044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6451689626838295044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6451689626838295044'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/09/hacking-excel.html' title='Hacking Excel'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3149231661442467068</id><published>2009-08-24T10:59:00.003-06:00</published><updated>2009-08-24T11:09:31.965-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='wildcard'/><category scheme='http://www.blogger.com/atom/ns#' term='patindex'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern matching'/><title type='text'>pattern matching with PATINDEX() and wildcards in T-SQL</title><content type='html'>The SQL Server patindex() function is useful for doing limited pattern matching in SQL selects. Here are some useful links concerning patindex() and wildcard usage in T-SQL:&lt;br /&gt;&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms188395.aspx - patindex() ref page with examples&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms187489.aspx - nice wildcard usage examples&lt;br /&gt;http://www.devguru.com/technologies/t-sql/7116.asp - more wildcard examples&lt;br /&gt;&lt;br /&gt;While you don't get full regular expressions, the wildcards combined with patindex() do provide some amount of useful pattern matching in SQL select statements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3149231661442467068?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3149231661442467068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3149231661442467068' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3149231661442467068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3149231661442467068'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/08/pattern-matching-with-patindex-and.html' title='pattern matching with PATINDEX() and wildcards in T-SQL'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1133155212198591386</id><published>2009-07-24T14:36:00.002-06:00</published><updated>2009-07-24T14:41:28.286-06:00</updated><title type='text'>Iphone Protection</title><content type='html'>So by accident I found a great way to keep your iphone protected from the elements. I was out for a ride on the Motorcycle and was worried that it might rain and mess up the Iphone if I got it wet.&lt;div&gt;I grab a standard ziplock baggie from the cabinet and tossed my iphone in that. To my surprise all the touch features work perfectly through the bag without haveing to take it out of the baggie to check messages and emails.  This could also work for being out on a boat, near a pool or around kids playing with water guns Etc.  along with being completely water proof it doesn't take up much space.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I now keep a ziploc bag in each of my motorcycle jackets just in case it looks like it will rain on me while I am out and about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1133155212198591386?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1133155212198591386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1133155212198591386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1133155212198591386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1133155212198591386'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/07/iphone-protection.html' title='Iphone Protection'/><author><name>pthunder1971</name><uri>http://www.blogger.com/profile/08032970079057567880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6938663836842932200</id><published>2009-07-06T13:09:00.002-06:00</published><updated>2009-07-06T13:17:03.321-06:00</updated><title type='text'>iPhone Tethering</title><content type='html'>Well, it's summer time!  Time to sit by the pool while you code away getting a tan.  What!?  Your pool doesn't have WAP!?  No problem, grab your sunscreen and read this article sent to me by Dan, you'll be online in no time!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.iphonehacks.com/2009/06/simple-hack-to-enable-tethering-on-iphone-os-30.html"&gt;Simple Hack to Enable Tethering on iPhone OS 3.0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6938663836842932200?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6938663836842932200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6938663836842932200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6938663836842932200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6938663836842932200'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/07/iphone-tethering.html' title='iPhone Tethering'/><author><name>Michael Crandall</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1012908522832207892</id><published>2009-07-03T14:41:00.002-06:00</published><updated>2009-07-03T14:42:16.446-06:00</updated><title type='text'>Bach's Little Fugue in G Minor</title><content type='html'>Because I like math, and so do you:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=pVadl4ocX0M"&gt;http://www.youtube.com/watch?v=pVadl4ocX0M&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1012908522832207892?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1012908522832207892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1012908522832207892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1012908522832207892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1012908522832207892'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/07/bachs-little-fugue-in-g-minor.html' title='Bach&apos;s Little Fugue in G Minor'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7713606272360136336</id><published>2009-07-02T12:09:00.004-06:00</published><updated>2009-07-02T12:29:23.792-06:00</updated><title type='text'>REVISITED: SSIS 0x8000FFFF Catastrophic failure</title><content type='html'>A while back I posted about &lt;a href="http://wofda.blogspot.com/2009/06/ssis-0x8000ffff-catastrophic-failure.html"&gt;SSIS 0x8000ffff Catastrophic Failure&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well after doing everything on the list I posted about (which fixed my problem once mind you)...the issue came back. When I ran the package individually, it ran just fine. But when I ran it from the master package - it crashed with the 0x8000FFFFF error.&lt;br /&gt;&lt;br /&gt;There's not a lot of data inside the error message that SSIS gives you so I started messing with stuff that could potentially cause something that SSIS would call "catastrophic".&lt;br /&gt;&lt;br /&gt;I looked at the isolation and transaction levels of each component, retained connections of my connection managers. Master package variables, etc. Nothing I changed made the problem worse or better (ok I did make it worse but that's not important).&lt;br /&gt;&lt;br /&gt;Finally - it occured to me to check the script that I have in one of my components. My package looks as follows:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_RL5DIi9WST8/Skz4_LpiG9I/AAAAAAAAAHc/ofiQgEgclS0/s1600-h/workflow.bmp"&gt;&lt;img style="cursor: pointer; width: 204px; height: 388px;" src="http://1.bp.blogspot.com/_RL5DIi9WST8/Skz4_LpiG9I/AAAAAAAAAHc/ofiQgEgclS0/s400/workflow.bmp" alt="" id="BLOGGER_PHOTO_ID_5353927821379115986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First I get some data - then insert it using an OLEDB Destination (This is used over the SQL Server destination so I could have row by row error handling whereas the SS Destination doesn't allow for that). Then I have a script that puts my error rows into a string. I then grab some extra package data and insert the rows into my error database.&lt;br /&gt;&lt;br /&gt;Pretty common practice ... except on my Get Error Data step...&lt;br /&gt;&lt;br /&gt;Here's what it looked like before whenever the catastrophic error was happening:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_RL5DIi9WST8/Skz7pUxYbII/AAAAAAAAAHw/xj6VfeOVQYA/s1600-h/before.bmp"&gt;&lt;img style="cursor: pointer; width: 319px; height: 237px;" src="http://4.bp.blogspot.com/_RL5DIi9WST8/Skz7pUxYbII/AAAAAAAAAHw/xj6VfeOVQYA/s400/before.bmp" alt="" id="BLOGGER_PHOTO_ID_5353930744405716098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And then after I fixed it:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_RL5DIi9WST8/Skz7pOfRzqI/AAAAAAAAAHo/fb0M-kYJSHg/s1600-h/after.bmp"&gt;&lt;img style="cursor: pointer; width: 376px; height: 233px;" src="http://4.bp.blogspot.com/_RL5DIi9WST8/Skz7pOfRzqI/AAAAAAAAAHo/fb0M-kYJSHg/s400/after.bmp" alt="" id="BLOGGER_PHOTO_ID_5353930742719172258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So pretty much what was happening is the variables, for whatever reason the code seems to be stepping over itself and erroring - whereas if you stick it in the try/catch block, nothing chokes and it's nicely handled in the catch block.&lt;br /&gt;&lt;br /&gt;So if you get this error - make sure you have your script component nicely coded and error handled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7713606272360136336?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7713606272360136336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7713606272360136336' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7713606272360136336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7713606272360136336'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/07/revisited-ssis-0x8000ffff-catastrophic.html' title='REVISITED: SSIS 0x8000FFFF Catastrophic failure'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_RL5DIi9WST8/Skz4_LpiG9I/AAAAAAAAAHc/ofiQgEgclS0/s72-c/workflow.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-9199524754663797084</id><published>2009-06-29T09:22:00.002-06:00</published><updated>2009-06-29T09:33:01.981-06:00</updated><title type='text'>Symantec LiveUpdate Failure</title><content type='html'>Ever get a REALLY unhelpful error message from Symantec's LiveUpdate?   Something along the lines of "LiveUpdate Failed.  You should run LiveUpdate again later.  If it still fails then, it's broken."&lt;br /&gt;&lt;br /&gt;Well, if it gives you an error code, and if that error code is LU1803, then you might be tempted to google that error code.&lt;br /&gt;&lt;br /&gt;And if you're a paranoid conspiracy theorist like me, you might be suspicious of some of the recommended 'fixes' in the first few google results.&lt;br /&gt;&lt;br /&gt;But the paranoia is unfounded... You really SHOULD delete the files... all the liveupdate settings files and the contents of the liveupdates downloads folder... Then re-run LiveUpdate and all will hopefully be well.&lt;br /&gt;&lt;br /&gt;Or maybe I'm just in cahoots with the authors of all those 'helpful' links google gives you...&lt;br /&gt;&lt;br /&gt;muAHAHHAHAHHA!&lt;br /&gt;&lt;br /&gt;No, just kidding... It really worked for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-9199524754663797084?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/9199524754663797084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=9199524754663797084' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/9199524754663797084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/9199524754663797084'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/symantec-liveupdate-failure.html' title='Symantec LiveUpdate Failure'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1191536619157296978</id><published>2009-06-29T09:12:00.002-06:00</published><updated>2009-06-29T09:21:39.221-06:00</updated><title type='text'>Hidden Cells in Excel</title><content type='html'>Ever have a pesky cell in an Excel sheet that you can't seem to select, even when the rest of its row and column are visible and behave normally?  It's most likely "merged" with an adjacent cell.   To un-merge it, highlight a block of cells around the one you can't get to, right click and choose format cells (ctrl 1), go to the alignment tab (a) and un-click the 'Merge Cells' (alt m).  You may have to click the 'Merge Cells' box twice to get it un-checked.  This will un-merge all cells in the selected region.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1191536619157296978?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1191536619157296978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1191536619157296978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1191536619157296978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1191536619157296978'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/hidden-cells-in-excel.html' title='Hidden Cells in Excel'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1261629832496778270</id><published>2009-06-24T06:44:00.022-06:00</published><updated>2009-06-24T08:08:13.263-06:00</updated><title type='text'>Livin' in a Multi-Core World - Memory Models</title><content type='html'>I had a conversation with Will and Phil recently that inspired this whole "Series."  It was focused on Memory models in multi CPU environments more than anything, but I figured atomic operations would be a better starting point.  This post ignores SPARC entirely, unlike my last one.  This is really just looking at Intel-based architectures.&lt;br /&gt;&lt;br /&gt;Memory access models have been on the minds of a small subset of programmers for a long time.  It has always been something to consider in developing architectures on multi-CPU real-time systems.  But now, with the advent of multi-core systems that don't use a common memory access model, it ought to at least be on the minds of all programmers.&lt;br /&gt;&lt;br /&gt;Intel Itanium and Nahalem (new Xeon-based Mac Pro systems + Core i7) processors as well as AMD Opteron and AMD Athlon 64 post FX-70 (Quad FX) processors use a NUMA model for accessing memory.  Presumably, the new Intel Sandy Bridge (To be released in 2010 some time) processors will too but that's just an assumption on my part.  NUMA stands for Non-Uniform-Memory-Access.  In a NUMA architecture, memory is physically "mapped" to specific CPUs.  So in a quad-CPU NUMA setup with maxed out memory, each CPU has 1/4 of the memory mapped directly to it basically.  In traditional UMA/SMP based models, the CPUs are separate from the memory controller and they all have equal access to the entirety of system memory.&lt;br /&gt;&lt;br /&gt;In the SMP model, things are a lot easier to code, but there is a performance hit when several CPUs are operating on the same regions of memory.  Each CPU has to keep its Cache in sync with what's actually in memory.  So if CPU A has a segment of memory cached and CPU B goes and modifies it, CPU B has to tell CPU A, "Hey, I modified your cached memory" and CPU A has to go and update its cache or in real life, mark it as invalid.  That means that if CPU A wants to access some part of the memory segment, even if it isn't the part that CPU B modified, it will have a cache miss and will need to read from physical memory again to update the cache.&lt;br /&gt;&lt;br /&gt;In a NUMA architecture, CPU A would "own" that segment.  CPU B would have to go to CPU A and say, "Hey, I want to do such and such to your memory, can you take care of that for me."  And CPU A would oblige.  There is an inherent disadvantage to this model too though.  No implicit cache misses will be occurring, but now CPU B is consuming some of CPU A to do it's own thing.  If CPU A is busy working on that segment of memory, CPU B could be starved for access to that memory.  But even without starvation, why would CPU B be accessing CPU A's memory if CPU A isn't even USING that memory?  This can and surely does happen ALL the time.  Here's a more common case:&lt;br /&gt;&lt;br /&gt;Process A is running on CPU A for a while, it allocates a bunch of memory from CPU A's memory bank.  A context switch happens.  Another process gets some of CPU A to do what it needs to do.  Meanwhile Process A is sitting there waiting to continue on with its execution.  Ah! good thing CPU D is idle now, so the OS hands CPU D over to Process A.  Well, now Process A, running on CPU D needs to access memory that is on CPU A's banks.  Every memory access needs to be put through CPU A and is way slower than the SMP model above.  That stinks!&lt;br /&gt;&lt;br /&gt;To avoid that scenario, we use Thread/Process Affinity to ensure that Process A stays on CPU A.  That way, it's only accessing its own memory.  But a programmer starts caring when we are working in a multi-threaded environment and different threads are working on different CPUs.  Besides just binding specific threads to specific CPUs, shared data needs to be "allocated" on the CPU of the thread that is accessing it the most (well, it doesn't need to, but it should).  Additionally, the whole thing should have an architecture such that as little cross-CPU memory access happens as possible.  That way, you can have faster average access time of physical memory as SMP (because of the local memory controller, access to local memory is faster than SMP is to any memory), without the cache misses.&lt;br /&gt;&lt;br /&gt;That's all pretty simple when you control the allocation of memory.  On newer Linux kernels, when NUMA support is compiled in, a request coming from userspace into the kernel for some allocated memory will result in memory taken from the bank of the cpu from which the request originated (will be the same CPU that is executing the request of course), unless there is none available in that bank.  I don't actually know if this is the case on Windows, but given the ability to set Thread affinity (thanks Mike for pointing that out) in Vista, I would presume it to work the same way.  So in these scenarios, where ever your data is malloc'ed or new'ed is where your memory is allocated.  Even if I'm wrong on Windows, Vista and Windows 7 introduce a number of new NUMA specific calls.  For example:&lt;br /&gt;&lt;br /&gt;VirtualAllocExNuma, CreateFileMappingExNuma, MapViewOfFileExNuma, GetNumaProcessorNode, and AllocateUserPhysicalPagesNuma&lt;br /&gt;&lt;br /&gt;which can be used in place of malloc and an overridden static operator new()&lt;br /&gt;&lt;br /&gt;Things get a bit more difficult in Managed .NET code.  In .NET, all memory is managed by the garbage collector in a managed heap.  Presumably, the Managed Heap is a single pool or collection of pools under the hood.  This means that the .NET programmer has no way of controlling where in physical memory something gets allocated.  Since something on CPU B could be using a pool in the managed heap that was allocated in CPU A.  Even more of a concern is the fact that objects can and often are moved around in physical memory to optimize memory usage of the .NET runtime.  The garbage collector also does it's thing on a dedicated thread, so cleanup may be occurring on an entirely separate CPU.  Therefore, memory allocated in CPU A by the .NET runtime may not always remain in CPU A's banks.  So I end this one with a question: How do you force the Runtime / Garbage collector to allocate and keep an object on a specific NUMA bank? (We'll just have to live with collection occurring on a separate thread and most likely, a separate CPU).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1261629832496778270?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1261629832496778270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1261629832496778270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1261629832496778270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1261629832496778270'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/livin-in-multi-core-world-memory-models.html' title='Livin&apos; in a Multi-Core World - Memory Models'/><author><name>Keef</name><uri>http://www.blogger.com/profile/03444449386280127627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5821453516475739904</id><published>2009-06-24T05:30:00.013-06:00</published><updated>2009-06-24T06:40:12.707-06:00</updated><title type='text'>Livin' in a Multi-Core World - Atomic Operations</title><content type='html'>The CPU market is now such that you can't even buy a single core x86 based processor any longer.  While multi-CPU systems have been around for a really long time, consumer targeted apps were generally ok just pretending that wasn't the case.  But now, doing so isn't so bright.  A common pitfall of many programmers is to assume that 1 line of code = 1 operation.  For example (in C++)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class RefCounter&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    RefCounted()&lt;br /&gt;    {&lt;br /&gt;        addReference();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    void addReference()&lt;br /&gt;    {&lt;br /&gt;        refs++; // &lt;------- here   &lt;br /&gt;    }    &lt;br /&gt;&lt;br /&gt;    void removeReference()&lt;br /&gt;    {&lt;br /&gt;        if (!--refs) delete this; // &lt;----- or here&lt;br /&gt;    }  &lt;br /&gt;private:&lt;br /&gt;    ~RefCounter()&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;    int refs;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ignore the pitfall of this example that makes for a glaring crash when a stack allocated RefCounter is created.  That's not part of the demonstration.  Instead, let's look at refs++; .  Dissecting that call, we find that a processor (pretty much ANY processor) will do the following:&lt;br /&gt;&lt;br /&gt;1. load refs into a CPU register&lt;br /&gt;2. add 1 to the CPU register that refs was loaded into&lt;br /&gt;3. write refs back to the memory location from which it was loaded&lt;br /&gt;&lt;br /&gt;So that's all fine and well.  But what if you had a single shared object accross several threads that were all reference counting the same reference counted object.  Let's say they are both modifying the count at almost the same time.  Perhaps:&lt;br /&gt;&lt;br /&gt;Thread 1: Load refs into CPU register&lt;br /&gt;Thread 1: add 1 t0 register&lt;br /&gt;Thread 2: load refs into CPU register&lt;br /&gt;Thread 1: write refs back to memory&lt;br /&gt;Thread 2: add 1 to register&lt;br /&gt;Thread 2: write refs back to memory&lt;br /&gt;&lt;br /&gt;We just wrote the same value twice and refs has incremented by 1 despite having addReference called twice.&lt;br /&gt;&lt;br /&gt;In a single core environment, on most OSes this was almost never a concern.  In a single core environment, multi-threaded isn't really multi-threaded.  The CPU munches on thread A for a bit, switches contexts, and munches on thread B, switching from one to the other.  The OS controls when those switches occur.  But in those cases, Thread 1 and 2 aren't actually running at the same time.  In multi-core environments, threads actually do run in parallel.  And just because your using something higher level like .NET doesn't mean you're safe either.  This exists across the board.&lt;br /&gt;&lt;br /&gt;So to deal with this, we need to look at lower level Atomic Operations.  First, for demonstration purposes, we'll examine a RISC CPU to show how this is done.&lt;br /&gt;&lt;br /&gt;the newer (not that new) SPARC CPU instruction set defines the instruction 'cas' (Compare and Swap).  cas takes 3 operators.  The first one is the memory address to read from/write to, the second operator is what to compare to, and the third is the register that has the value to swap in (upon positive comparison).&lt;br /&gt;&lt;br /&gt;for example (oh, this is assembly by the way):&lt;br /&gt;mov 12, %o0&lt;br /&gt;cas 0x12345, %o0, %l0&lt;br /&gt;&lt;br /&gt;This will basically read the value from memory address 0x12345 and then, in a single operation, compare it to the value in register %o0.  If the two match, %l0 and the memory address are swapped.  This means that in the above example, if %o0 has a value equal to what is stored in 0x12345, %o0 won't change, and the value at 0x12345 and %l0 will be swapped.  So using this, an atomic add might look like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   ld (%o0), %l0&lt;br /&gt;1:&lt;br /&gt;   add %l0, %o1, %l1&lt;br /&gt;   cas (%o0), %l0, %l1&lt;br /&gt;   cmp %l0, %l1&lt;br /&gt;   bne,a 1b&lt;br /&gt;   ld (%o0), %l0&lt;br /&gt;&lt;br /&gt;   add %l0, %o2, %o0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So to walk through what that does:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Load the first argument into local register l0&lt;/li&gt;&lt;li&gt;Add the second argument to l0 and store the result in l1&lt;/li&gt;&lt;li&gt;Compare and swap what's in memory to what I loaded before and store the added value. &lt;br /&gt;&lt;br /&gt;This means that if the value hasn't changed since I loaded it, %l1 will have the same value as %l0 which was read from the memory address specified in the first argument.&lt;/li&gt;&lt;li&gt;compare %l0 and %l1&lt;/li&gt;&lt;li&gt;if they don't match, (execute the ld again) and start the add over&lt;/li&gt;&lt;li&gt;otherwise, return the added result (via the first output register)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Probably more than most people will ever need to know because who writes Assembly on SPARC really :-D?&lt;br /&gt;&lt;br /&gt;Ok, so that was just to demonstrate the point of an atomic operation.  Intel makes things way easier (btw, as a UNIX coder by nature, I'm proned to using AT&amp;T asm syntax rather than the MS syntax, convert accordingly)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;lock xaddl %ebx, [%eax]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You could go the RISC way on Intel too, but that is unnecessarily expensive.  This basically does a read-add-write in a single bus operation, locking down [%eax] for the duration of the r-a-w.  This is still way more expensive than a plain old add, which is why your compiler doesn't make ALL of your additions atomic.  &lt;br /&gt;&lt;br /&gt;The x*[blq] set of operations on intel are called "interlocked operations" or something like that.  I only mention that because Microsoft software is based entirely on Intel (having been founded on the ability to handle over 640K of memory on the otherwise limited intel architecture), even if they have expanded themselves into the realm of ARM and other architectures (which is why they incorrectly call x86 with 64 bit instructions x64 rather than x86_64 or x86w64 or some such thing and not have to worry about the possibility of actually having to support an architecture called x64).  The results of this relationship still show themselves today.&lt;br /&gt;&lt;br /&gt;System.Threading.Interlocked is the class with all of the static functions you need to perform the above in .NET.  System.Threading.Interlocked.Increment(ref v) will take care of the atomic assembly needed to perform the above.  Take a look around the class and make sure to use those when you are doing simple operations on data that need to be thread safe.  The alternative would be to mutex lock everything but that is more expensive by a factor of at least 50, usually more.  For quick numeric operations that need to be thread safe, System.Threading.Interlocked is the way to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5821453516475739904?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5821453516475739904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5821453516475739904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5821453516475739904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5821453516475739904'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/livin-in-multi-core-world-atomic.html' title='Livin&apos; in a Multi-Core World - Atomic Operations'/><author><name>Keef</name><uri>http://www.blogger.com/profile/03444449386280127627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4075661182178999879</id><published>2009-06-22T14:00:00.001-06:00</published><updated>2009-06-22T14:02:07.566-06:00</updated><title type='text'>Refrac.net - David Craig</title><content type='html'>A great resource for understanding how to identify (and treat) refrac candidates, as well as regarding the "old oil" segment of the industry in general:&lt;br /&gt;&lt;br /&gt;http://www.refrac.net/&lt;br /&gt;&lt;br /&gt;Highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4075661182178999879?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4075661182178999879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4075661182178999879' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4075661182178999879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4075661182178999879'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/refracnet-david-craig.html' title='Refrac.net - David Craig'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2243230378147311307</id><published>2009-06-16T11:46:00.007-06:00</published><updated>2009-06-16T12:07:04.492-06:00</updated><title type='text'>SSIS Update, Insert</title><content type='html'>There are a few schools of thought about updating in SSIS seen &lt;a href="http://www.blogger.com/%20http://blogs.conchango.com/jamiethomson/archive/2006/09/12/SSIS_3A00_-Checking-if-a-row-exists-and-if-it-does_2C00_-has-it-changed.aspx"&gt;here&lt;/a&gt;,  &lt;a href="http://developers.de/blogs/nadine_storandt/archive/2006/12/07/How-to-Insert-or-Update-records-in-SSIS-DataFlow.aspx%22"&gt;here&lt;/a&gt;, and &lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;here.&lt;br /&gt;&lt;br /&gt;All three approaches are innovative given the problem that was presented, updating a row in a database. Given there are millions of rows in a database though, even thinking about using the Lookup transformation to see which rows match is absurd. And yes I crashed BIDS a few times before I realized this. So thinking for a bit, I came up with a new way to update rows in a database that has millions of rows in each table.&lt;br /&gt;&lt;br /&gt;The idea behind it is only touching the rows that you REALLY need to touch. Wash a used cup of coffee in the morning you don't touch your ENTIRE connection of china and silverware to do so nor do you go look through all of your clean and dirty cups to find which are dirty. You know that!. You just go grab what you need. Maybe in the first go around you are trying to wash cups and spoons. You try to grab a cup and a spoon. You get the cup but grab a spork instead. What to do with that?! It looked like a spoon but really wasn't. So you put it in the sink to take care of it later.  Sometimes though you do wash what you need in one shot. The cup and the spoon. You succeeded! Congratulations!&lt;br /&gt;&lt;br /&gt;What's the point of that in SSIS? Well first we try to bulk update the rows. If that doesn’t work grab the rows that you are trying to update (generally a select statement from a variety of tables) into a temp table &lt;/http:&gt; (&lt;span style="font-style: italic;"&gt;SELECT cup, spoon INTO ##KitchenTemp FROM Kitchen&lt;/span&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;), Then go through each row and send them through the update row OLEDB Command transformation. If this fails then the error rows are pumped to an error database (this is something to later be discussed). Then, although SQL will take care of cleaning up your temp table, dropping it yourself just to be clean. After this is done, then any new rows can be inserted to the table.&lt;br /&gt;&lt;br /&gt;So how to do this...&lt;br /&gt;&lt;br /&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;Create the following data flow transformations on your project. “Update Existing Info”, “Put rows to be Updated”, and “Drop temp table” are Execute SQL Tasks. “Update” is a Data Flow Transformation (DFT).&lt;/http:&gt;&lt;/li&gt;&lt;/ul&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_RL5DIi9WST8/SjfbhNV40vI/AAAAAAAAAG8/6QuF8fbjBRI/s1600-h/dataflow1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 279px; height: 400px;" src="http://2.bp.blogspot.com/_RL5DIi9WST8/SjfbhNV40vI/AAAAAAAAAG8/6QuF8fbjBRI/s400/dataflow1.jpg" alt="" id="BLOGGER_PHOTO_ID_5347984446089384690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The purpose of the Update Existing Info is to do a bulk insert of all of the data. Row by row updating is a spendy operation and should only be done to catch bad rows that don’t update.&lt;br /&gt;In the “Put rows to be updated” transformation, here goes your sql statement to put the data that needs to be updated into a global temp table.&lt;br /&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt; The connection manager of this item must match the connection manager on both the Update DFT and the Drop Temp Table SQL Task. It’s property must be set to RetainSameConnection = True so that the temp table doesn’t go away when the package moves steps. (Temp tables are only visible during that session)&lt;/http:&gt;&lt;/li&gt;&lt;/ul&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;blockquote style="font-style: italic;"&gt;"select &lt;&lt;&lt;&lt;stuff&gt;&gt;&gt;&gt;&gt;&lt;br /&gt;INTO ##MyTempTable&lt;br /&gt;FROM&lt;br /&gt;MyDatabase.dbo.MyTable x&lt;br /&gt;LEFT JOIN &lt;&lt;&lt;&lt;more stuff=""&gt;&gt;&gt;&gt;&lt;br /&gt;JOIN MyDatabase.dbo.MyTable w on w.Field1 = '09' AND w.Key1 = x.Key1"&lt;/more&gt;&lt;/stuff&gt;&lt;/blockquote&gt;&lt;stuff&gt;&lt;more stuff=""&gt;&lt;br /&gt;&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Modify the “Drop temp table” transformation and change the temp table name for it’s SQLStatement to be &lt;span style="font-style: italic;"&gt;DROP TABLE ##MyTempTable&lt;/span&gt;. &lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Again, the connection must be the same as the connection with RetainSameConnection=True.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Create a “SSIS Update String” for the package for the Update DFT. Example is as follows:&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;/ul&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;UPDATE MyTable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Set Name = ?, Address = ?, County = ?, Phone = ?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;WHERE Key1 = ?&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Paste it in the OLE DB Command part of the Update DFT It is on the component properties tab and the “SQL Command” at the very bottom. Nothing else needs to be done with it.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Go back to the control flow and put a breakpoint at the Update step. &lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Make sure that the DelayValidations are set to TRUE on the Update sequence container)&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Hit play&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Make sure that the Bulk update works&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;/ul&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_RL5DIi9WST8/SjfbyZN6NnI/AAAAAAAAAHE/tUt40zE_I4k/s1600-h/dataflow2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 269px; height: 400px;" src="http://1.bp.blogspot.com/_RL5DIi9WST8/SjfbyZN6NnI/AAAAAAAAAHE/tUt40zE_I4k/s400/dataflow2.jpg" alt="" id="BLOGGER_PHOTO_ID_5347984741334922866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Hit Stop&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Disable the UpdateExistingInfo bulk updater task.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Change the red line to a blue “On Completion” line&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Hit Play&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;The package will run until it hits the “Pre Execute” of the “Update” Data Flow.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;After it hits the breakpoint go into the data flow.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Double click on GetNewData in the Update DFT&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Change then input method to be SQL Command&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Make the command be SELECT * FROM ##MyTempTable&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Click OK&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Hit stop.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Double click on the OLE DB Command &lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Click on column mappings&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Map each column as you defined it in your query. Param_0 is the first field in your query, Param_1 is the second and so on. It is important everything lines up just right.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;/ul&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_RL5DIi9WST8/Sjfcgmtw6OI/AAAAAAAAAHM/yBjW05QqGmU/s1600-h/dataflow3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 399px;" src="http://4.bp.blogspot.com/_RL5DIi9WST8/Sjfcgmtw6OI/AAAAAAAAAHM/yBjW05QqGmU/s400/dataflow3.jpg" alt="" id="BLOGGER_PHOTO_ID_5347985535232174306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Click OK&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Only check the components that you use in the mapping above. DO NOT INCLUDE ANYTHING ELSE.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Remove the breakpoint&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;/ul&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RL5DIi9WST8/Sjfc1Ud89mI/AAAAAAAAAHU/w5XGtJd-llk/s1600-h/dataflow34jpg.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 212px; height: 400px;" src="http://3.bp.blogspot.com/_RL5DIi9WST8/Sjfc1Ud89mI/AAAAAAAAAHU/w5XGtJd-llk/s400/dataflow34jpg.jpg" alt="" id="BLOGGER_PHOTO_ID_5347985891111269986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;http: com="" cs21="" blogs="" applied_business_intelligence="" archive="" 2007="" 05="" 21="" aspx=""&gt;&lt;stuff&gt;&lt;more stuff=""&gt;Enable the Bulk update task and change the blue line back to red so your package will then operate as intended.&lt;/more&gt;&lt;/stuff&gt;&lt;/http:&gt;&lt;/li&gt;&lt;/ul&gt;Green boxes are your friend...and keep those cups clean - coffee is a necessity!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2243230378147311307?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2243230378147311307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2243230378147311307' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2243230378147311307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2243230378147311307'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/ssis-update-insert.html' title='SSIS Update, Insert'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_RL5DIi9WST8/SjfbhNV40vI/AAAAAAAAAG8/6QuF8fbjBRI/s72-c/dataflow1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1373943394864621553</id><published>2009-06-12T16:26:00.001-06:00</published><updated>2009-06-12T16:31:00.184-06:00</updated><title type='text'>gmail - use it wisely</title><content type='html'>Search operators for searching your gmail are really really useful.  To me much of the point of gmail is being able to use google to search your own personal mail.  Here's some basics about available operators:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mail.google.com/support/bin/answer.py?hl=en&amp;answer=7190"&gt;Using Advanced Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In particular, I use has:attachment all the time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1373943394864621553?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1373943394864621553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1373943394864621553' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1373943394864621553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1373943394864621553'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/gmail-use-it-wisely.html' title='gmail - use it wisely'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5382984315958979683</id><published>2009-06-06T14:24:00.004-06:00</published><updated>2009-06-12T16:31:44.820-06:00</updated><title type='text'>Another interesting SQL Site</title><content type='html'>Our friend Eric has put up something pretty interesting about sql metrics, which is a recurring topic around the office.  Worth clicking around a bit.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sqlmetrics.net/home"&gt;http://www.sqlmetrics.net/home&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check it out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5382984315958979683?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5382984315958979683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5382984315958979683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5382984315958979683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5382984315958979683'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/another-interesting-sql-site.html' title='Another interesting SQL Site'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3023512177260363447</id><published>2009-06-03T11:21:00.003-06:00</published><updated>2009-06-03T11:25:43.205-06:00</updated><title type='text'>SSIS 0x8000FFFF Catastrophic failure</title><content type='html'>Ever get this error using SSIS. Let's hope not because it's not very helpful and makes you wonder WHAT was catastrophic about it.&lt;br /&gt;&lt;br /&gt;More is described &lt;a href="http://support.microsoft.com/kb/243349"&gt;below (and in this article).&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This problem occurs with the 3.70.0690 build of the Microsoft SQL Server ODBC driver (Sqlsrv32.dll) but does not occur with earlier builds. Also, the problem does not occur when you use the native Microsoft SQL Server OLE DB Provider (Sqloledb.dll). &lt;br /&gt;&lt;br /&gt;The Microsoft SQL Server ODBC driver is loading the Winmm.dll file for timing functions. While Winmm.dll is primarily a multimedia DLL, it contains some timing functions that resolve down to the millisecond level, and the Microsoft SQL Server ODBC driver is using these functions for internal timing issues.&lt;br /&gt;&lt;br /&gt;In the 3.70.0690 build of the Microsoft SQL Server ODBC driver, Winmm.dll is being unloaded prematurely, and the function pointers are not being zeroed out. Therefore, the function pointer appears to refer to a valid address but the location it points to in memory is no longer valid.&lt;br /&gt;&lt;br /&gt;This access violation (AV) is being caught by the exception handling in the OLE DB Service Components, and an 0x08000FFFF "Catastrophic failure" message is then returned to the client.&lt;br /&gt;&lt;br /&gt;A supported &lt;a href="http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS"&gt;fix&lt;/a&gt; is now available from Microsoft, but it is only intended to correct the problem that is described in this article. Apply it only to computers that are experiencing this specific problem. This fix may receive additional testing. Therefore, if you are not severely affected by this problem, Microsoft recommends that you wait for the next Microsoft Data Access Components service pack that contains this hotfix.&lt;br /&gt;&lt;br /&gt;If you don't want to change your drivers, generally I just rerun the package and the error goes away.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3023512177260363447?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3023512177260363447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3023512177260363447' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3023512177260363447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3023512177260363447'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/06/ssis-0x8000ffff-catastrophic-failure.html' title='SSIS 0x8000FFFF Catastrophic failure'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2538179669266683841</id><published>2009-05-22T13:47:00.003-06:00</published><updated>2009-05-22T13:49:33.071-06:00</updated><title type='text'>Case Statement inside a Sum</title><content type='html'>OK maybe you already knew this, but this is the most adorable SQL I've written lately:&lt;br /&gt;&lt;br /&gt;select apistate,&lt;br /&gt;sum(case when currentoperatorid is null then 0.0 else 1.0 end) / count(wellid) as opdensity&lt;br /&gt;from well&lt;br /&gt;group by apistate&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gives you percent filled in for current operator.  Cute, yes?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2538179669266683841?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2538179669266683841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2538179669266683841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2538179669266683841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2538179669266683841'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/05/case-statement-inside-sum.html' title='Case Statement inside a Sum'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2411304508596577035</id><published>2009-05-21T09:51:00.001-06:00</published><updated>2009-05-21T09:54:52.251-06:00</updated><title type='text'>Microsoft.Windows.CommonLanguageRuntime</title><content type='html'>Ever get this error in MS Vis Studio 2005 when compiling a solution that has multiple projects??&lt;br /&gt;(lets hope not but if you do...)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;error MSB3113: Could not find file 'Microsoft.Windows.CommonLanguageRuntime, Version=2.0.50727.0'&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I freeked out becauses I thought somehow my CLR got uninstalled ... but how! My computer had been hibernating all night. &lt;br /&gt;&lt;br /&gt;Well apparently it's a known bug ... MS describes the work around here &lt;a href="http://support.microsoft.com/kb/907757"&gt; here &lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pretty much if you're referencing a dll file in one of your projects - change it to reference the exe file instead and you'll get a successful build.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2411304508596577035?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2411304508596577035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2411304508596577035' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2411304508596577035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2411304508596577035'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/05/microsoftwindowscommonlanguageruntime.html' title='Microsoft.Windows.CommonLanguageRuntime'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1554144768275253681</id><published>2009-05-17T20:47:00.010-06:00</published><updated>2009-05-17T21:22:01.721-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='query'/><category scheme='http://www.blogger.com/atom/ns#' term='cursor'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='table'/><title type='text'>How to Get Row Counts From Your Database</title><content type='html'>&lt;div&gt;&lt;p&gt;Currently, our team is working on an ongoing data loading project.  After each iteration of data loading is complete, we like to take time to evaluate how well the data load went.  One of the techniques we employ is getting row counts for each table in the database we are loading.&lt;/p&gt;&lt;p&gt;Sounds like a relatively simple task.  Just create a sql query with a “SELECT COUNT(ID) FROM &amp;lt;&lt;i&gt;table name&lt;/i&gt;&amp;gt;” query?  In essence it is that easy.  However, there are scenarios that make this simple task burdensome and difficult to maintain. For instance, what if your project not only is loading data but is also developing the schema in parallel?  Another scenario might be if you have hundreds perhaps thousands of tables.  Finally, if you have both of the aforementioned scenarios and you are promoting your database from development to QA, then from QA to staging and then staging to production, suddenly it is full time job just trying to keep up with the most mundane of tasks!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The following code is a query that will automatically iterate over all of your tables in your database and provide you with row counts.  The query consists of a cursor that queries the &amp;lt;&lt;i&gt;Database&lt;/i&gt;&amp;gt;.&lt;span style="color:green;"&gt;sys.tables&lt;/span&gt; table.  The result set of that query is then used to generate “SELECT COUNT(1) FROM &amp;lt;&lt;i&gt;table name&lt;/i&gt;&amp;gt;” for each row in the result set as a common table expression (CTE).  In addition, the query is generated to union all of the table row count queries so that the table row count result set is returned as a single result set.  Finally the query that is generated is executed and the results displayed.  The following code example is programmed against the infamous Northwind database.&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;Code&lt;/h4&gt;&lt;br /&gt;&lt;div style="background-color:#CC99CC;color:#000;"&gt;DECLARE @query varchar(MAX),&lt;br /&gt;        @tempQuery varchar(MAX),&lt;br /&gt;        @DatabaseName varchar(255)&lt;br /&gt;&lt;br /&gt;SET @DatabaseName = 'Northwind'&lt;br /&gt;SET @query = 'WITH TableRowCount([Database], [TableName], [RowCount]) AS&lt;br /&gt;(&lt;br /&gt;'&lt;br /&gt;&lt;br /&gt;DECLARE TableQuery_Cursor CURSOR&lt;br /&gt;FOR&lt;br /&gt;SELECT 'SELECT ''' + @DatabaseName + ''' AS [Database], ' + ''''  + [name] + ''' AS [TableName], COUNT(1) AS [RowCount]&lt;br /&gt;FROM [' + @DatabaseName + '].[dbo].[' + [name] + ']&lt;br /&gt;UNION&lt;br /&gt;'&lt;br /&gt;FROM [Northwind].sys.tables&lt;br /&gt;ORDER BY NAME&lt;br /&gt;&lt;br /&gt;OPEN TableQuery_Cursor&lt;br /&gt;FETCH NEXT FROM TableQuery_Cursor&lt;br /&gt;INTO @tempQuery&lt;br /&gt;&lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt;    SELECT @query = @query + @tempQuery&lt;br /&gt;&lt;br /&gt;    FETCH NEXT FROM TableQuery_Cursor&lt;br /&gt;    INTO @tempQuery&lt;br /&gt;END&lt;br /&gt;CLOSE TableQuery_Cursor&lt;br /&gt;DEALLOCATE TableQuery_Cursor&lt;br /&gt;&lt;br /&gt;SET @query = SUBSTRING ( @query ,0 , LEN(@query)-7)&lt;br /&gt;SET @query = @query + ')&lt;br /&gt;SELECT [Database], [TableName], [RowCount]&lt;br /&gt;FROM TableRowCount&lt;br /&gt;ORDER BY [Database], [TableName];'&lt;br /&gt;&lt;br /&gt;EXEC (@query)&lt;/div&gt;&lt;br /&gt;&lt;p&gt; I hope you find this code as useful as I have when analyzing your information systems.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1554144768275253681?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1554144768275253681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1554144768275253681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1554144768275253681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1554144768275253681'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/05/how-to-get-row-counts-from-your.html' title='How to Get Row Counts From Your Database'/><author><name>Michael Crandall</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8427476538387660953</id><published>2009-05-05T14:28:00.003-06:00</published><updated>2009-05-05T14:29:14.960-06:00</updated><title type='text'>SSIS "HELPFUL" Errors</title><content type='html'>Ever run into the very useless helpless error codes that SSIS likes to give you ... well MS tried to help out a little: &lt;br /&gt;&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms345164.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8427476538387660953?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8427476538387660953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8427476538387660953' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8427476538387660953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8427476538387660953'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/05/ssis-helpful-errors.html' title='SSIS &quot;HELPFUL&quot; Errors'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7599453845678841136</id><published>2009-05-01T18:07:00.002-06:00</published><updated>2009-05-01T18:11:00.063-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='unhide'/><title type='text'>Unhiding uncooperative rows in Excel</title><content type='html'>If you ever try to unhide rows in Excel in the usual way (select before and after rows and choose Format-&gt;Rows-&gt;Unhide) and your rows remain hidden, check to make sure that the sheet is not filtered (ie choose Data -&gt; Filter -&gt; ShowAll).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7599453845678841136?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7599453845678841136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7599453845678841136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7599453845678841136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7599453845678841136'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/05/unhiding-uncooperative-rows-in-excel.html' title='Unhiding uncooperative rows in Excel'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4358500092464371026</id><published>2009-04-17T10:03:00.003-06:00</published><updated>2009-04-17T10:17:39.004-06:00</updated><title type='text'>Setting up a "new" computer</title><content type='html'>Ever reformatted your computer and had issue after issue ... well if you haven't then you are my hero. Every time i reformat I run into something new. Paul pointed me to downloading the drivers from the website FIRST before you reformat so you can have a working copy of things incase bad things happen. This saved me this time. I downloaded the video driver and low and behold i didn't have to scramble to get my computer to display in the right mode. Another recommendation he made was to install virus scanner LAST as it could block some updates (I forgot to do this and yes indeed it blocked some of the updates I was trying to make on MS Sql Server 2005). So listen to Paul people and DON'T INSTALL VIRUS SCANNER FIRST!!!&lt;br /&gt;&lt;br /&gt;Before installing anything - when you put the install CD in (for vista) it likes to just install a fresh copy of vista over your existing copy and not reformat the disk. Let's say you DO want to reformat. Well .. put the CD in .. and reboot your computer. By default most computers are set to boot the harddrive first (makes sense)- but you don't want to do that. Most computers (not all) are set where if you push F12 it brings up the boot menu. After you get to the boot menu - select CD and then you'll be able to boot from the CD. When you're going through the steps - make sure you reformat the drives. The Vista installs don't automatically do that and I found that it's a little kloogy to find where to format them. Format = nuke everything on the harddrive and erase the indexes and do other things that get rid of your info.&lt;br /&gt;&lt;br /&gt;Another issue i ran into was installing visual studio 2005. I have Window Vista x32 Ultimate and for the life of me it wouldn't install the SP1 for Vista that you need to install for it to run. I kept getting this error:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RL5DIi9WST8/SeipElVSIhI/AAAAAAAAAG0/FUy5vvS1Ql4/s1600-h/error.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 364px; height: 205px;" src="http://3.bp.blogspot.com/_RL5DIi9WST8/SeipElVSIhI/AAAAAAAAAG0/FUy5vvS1Ql4/s400/error.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5325692455571563026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WELL! Low and behold after much tears (rather frustration and using up my entire dictionary of 4 letter words) ... the solution found me. You MUST install SP1 (normal) before applying the VS 2005 SP1 for Vista patch. The Vista patch patches the patch (makes no sense) but that's how it works.&lt;br /&gt;&lt;br /&gt;Also one more thing - &lt;br /&gt;&lt;br /&gt;Since Vista likes to lock you out of things - I would recommend running everything as an administrator. You can set this by right clicking on the application shortcut (I chose VS2005) Go to Properties. Then there is an advanced button on the Shortcut tab. Click that. And then check the "Run as Administrator" box. This way you can get around the blockage that vista puts on "normal" user accounts.&lt;br /&gt;&lt;br /&gt;Finally ... UPDATE YOUR COMPUTER. It took me about 4 rounds to get it to finally stop updating and restarting but it finally stopped.&lt;br /&gt;&lt;br /&gt;Right now Mr Computer is running like a champ!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4358500092464371026?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4358500092464371026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4358500092464371026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4358500092464371026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4358500092464371026'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/04/setting-up-new-computer.html' title='Setting up a &quot;new&quot; computer'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RL5DIi9WST8/SeipElVSIhI/AAAAAAAAAG0/FUy5vvS1Ql4/s72-c/error.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1272640703426881190</id><published>2009-04-16T22:08:00.002-06:00</published><updated>2009-04-16T22:15:13.634-06:00</updated><title type='text'>eq ne ==</title><content type='html'>Here's a little Perl gotcha that'll make you experienced Perlers laugh at me.  The good news is it took me less than a day to figure it out!&lt;br /&gt;&lt;br /&gt;The Perl comparison operators "==" and "eq" are NOT the same.  "==" is for use with numeric values, while "eq" is used for strings.  Confusing them in a strongly-typed language would be a minor (and quickly caught) bug, but in Perl's fast-and-loose typing paradigm, confusing them can result in code that runs but does something very different than what you intended.&lt;br /&gt;&lt;br /&gt;Play around with comparisons of explicity type-cast numeric and string values using both operators and you'll see what I mean - or just play it safe and stick to "==" and "!=" when you're comparing numerics and "eq" and "ne" when working with strings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1272640703426881190?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1272640703426881190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1272640703426881190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1272640703426881190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1272640703426881190'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/04/eq-ne.html' title='eq ne =='/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4936321045144436815</id><published>2009-04-16T18:04:00.002-06:00</published><updated>2009-04-16T18:05:51.616-06:00</updated><title type='text'>Uninstalling something that wont uninstall</title><content type='html'>Ever been installing programs and then run into one that just hangs ... and you're stuck with a half installed program that you can neither install nor uninstall...&lt;br /&gt;&lt;br /&gt;WELL!&lt;br /&gt;&lt;br /&gt;Microsoft apparently ran into this too because they created this nifty little uninstaller tool here: http://support.microsoft.com/kb/290301&lt;br /&gt;&lt;br /&gt;You just install it - click on the program that you need to get rid of and wellah!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4936321045144436815?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4936321045144436815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4936321045144436815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4936321045144436815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4936321045144436815'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/04/uninstalling-something-that-wont.html' title='Uninstalling something that wont uninstall'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3422410482426988504</id><published>2009-04-10T15:29:00.002-06:00</published><updated>2009-04-10T15:32:40.972-06:00</updated><title type='text'>Aggregating Booleans in SQL</title><content type='html'>I've bumped into this now and again, but never bothered to figure it out.  Today Trent and I really did need an answer.  Or we could have simply decided to think clearly.  &lt;br /&gt;&lt;br /&gt;To do an aggregate or do this:&lt;br /&gt;MAX(CASE WHEN boolean expr THEN 1 ELSE 0 END)&lt;br /&gt;&lt;br /&gt;aggregate and:&lt;br /&gt;MIN(CASE WHEN boolean expr THEN 1 ELSE 0 END) &lt;br /&gt;&lt;br /&gt;Here's the link that got us started:&lt;br /&gt;http://weblogs.sqlteam.com/jeffs/archive/2004/07/11/1744.aspx&lt;br /&gt;&lt;br /&gt;Thanks Jeff whoever you are!  Clever.&lt;br /&gt;&lt;br /&gt;-k&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3422410482426988504?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3422410482426988504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3422410482426988504' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3422410482426988504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3422410482426988504'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/04/aggregating-booleans-in-sql.html' title='Aggregating Booleans in SQL'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7662796908687246938</id><published>2009-04-07T18:22:00.000-06:00</published><updated>2009-04-07T18:23:14.361-06:00</updated><title type='text'>SQL Cheats!!</title><content type='html'>One of the most useful links I've found this week:&lt;br /&gt;&lt;br /&gt;http://www.scribd.com/doc/399147/TSQL-Cheat-Sheet&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7662796908687246938?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7662796908687246938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7662796908687246938' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7662796908687246938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7662796908687246938'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/04/sql-cheats.html' title='SQL Cheats!!'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3583767112172557933</id><published>2009-03-30T10:48:00.002-06:00</published><updated>2009-03-30T10:57:13.302-06:00</updated><title type='text'>Source and Target Worksheets in Excel/VBA</title><content type='html'>Writing VBA code to move data around in excel sheets?  Don't read and write from the same sheet concurrently.  Reading from an existing sheet and writing to a new temp sheet (and then writing back from the temp sheet to the existing sheet later if desired) is much, MUCH faster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3583767112172557933?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3583767112172557933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3583767112172557933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3583767112172557933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3583767112172557933'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2009/03/source-and-target-worksheets-in.html' title='Source and Target Worksheets in Excel/VBA'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-82470574951161732</id><published>2008-12-28T16:38:00.002-07:00</published><updated>2008-12-28T16:43:05.772-07:00</updated><title type='text'>Unicode primer</title><content type='html'>I little dusty but perhaps useful if you've been fighting unicode (and I know some of you have):&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/articles/Unicode.html"&gt;Joel on Software&lt;/a&gt;: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-82470574951161732?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/82470574951161732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=82470574951161732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/82470574951161732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/82470574951161732'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/12/unicode-primer.html' title='Unicode primer'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-997995636866635570</id><published>2008-12-10T09:14:00.001-07:00</published><updated>2008-12-10T09:16:12.252-07:00</updated><title type='text'>Formatting Excel Charts in VBA</title><content type='html'>If your Excel Chart lives in its own tab (i.e. it's a stand-alone chart instead of being embedded in a worksheet), you won't be able to manipulate the .chartArea property from code.  Use the .plotArea property instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-997995636866635570?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/997995636866635570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=997995636866635570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/997995636866635570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/997995636866635570'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/12/formatting-excel-charts-in-vba.html' title='Formatting Excel Charts in VBA'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-390755717147928499</id><published>2008-12-03T12:36:00.001-07:00</published><updated>2008-12-03T12:36:54.077-07:00</updated><title type='text'>you know it's a good day when...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_RL5DIi9WST8/STbf0IYIoFI/AAAAAAAAAE0/cXV8Lqksmi4/s1600-h/greenboxes.bmp"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 203px; height: 391px;" src="http://1.bp.blogspot.com/_RL5DIi9WST8/STbf0IYIoFI/AAAAAAAAAE0/cXV8Lqksmi4/s400/greenboxes.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5275650100206018642" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-390755717147928499?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/390755717147928499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=390755717147928499' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/390755717147928499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/390755717147928499'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/12/you-know-its-good-day-when.html' title='you know it&apos;s a good day when...'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_RL5DIi9WST8/STbf0IYIoFI/AAAAAAAAAE0/cXV8Lqksmi4/s72-c/greenboxes.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8340370958834585459</id><published>2008-12-02T13:23:00.002-07:00</published><updated>2008-12-02T13:32:10.709-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Cool SQL Server cheatsheet</title><content type='html'>I found a couple nice cheat sheets for SQL Server queries.&lt;br /&gt;&lt;br /&gt;You can find them &lt;a href="http://www.addedbytes.com/cheat-sheets/sql-server-cheat-sheet/"&gt;here&lt;/a&gt; and &lt;a href="http://www.3gwt.net/demo/SQL_redux.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first is more advanced with data types, conversion, creation, etc.&lt;br /&gt;The second is more usage based.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8340370958834585459?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8340370958834585459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8340370958834585459' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8340370958834585459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8340370958834585459'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/12/cool-sql-server-cheatsheet.html' title='Cool SQL Server cheatsheet'/><author><name>Greenvesper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_fIKl4QXZ40M/SHOyfHSoS-I/AAAAAAAAAAM/gT-z1XxQ51k/S220/grnves_tn.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8756537263818866663</id><published>2008-11-26T01:37:00.004-07:00</published><updated>2008-11-26T01:46:11.966-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pretty SQL beautifier'/><title type='text'>SQLinForm - free SQL formatter</title><content type='html'>Nice little free &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SQL&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;formatter&lt;/span&gt;. I use the desktop version (java app), you can also use the web version. It's great - copy your code, switch over to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;SQLInform&lt;/span&gt; window, hit &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ctrl&lt;/span&gt;-k to format the code, then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ctrl&lt;/span&gt;-a, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;ctrl&lt;/span&gt;-c to copy it back to your edit buffer and then paste back into your app. Lots of control over the formatting, fast, what more could you ask. Great for code that's generated by a gui. Did I mention it's free?&lt;br /&gt;&lt;br /&gt;http://www.sqlinform.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8756537263818866663?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8756537263818866663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8756537263818866663' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8756537263818866663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8756537263818866663'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/11/sqlinform-free-sql-formatter.html' title='SQLinForm - free SQL formatter'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4483600862152310327</id><published>2008-11-25T19:39:00.003-07:00</published><updated>2008-11-25T19:45:44.015-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLServer Toad'/><title type='text'>Toad for SQLServer</title><content type='html'>Toad for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SQLServer&lt;/span&gt; is a really nice alternative to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;SQL&lt;/span&gt; Server Management Studio for managing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;SQLServer&lt;/span&gt; databases. The table viewer has a load of nice features not available in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;SSMS&lt;/span&gt;, including sorting by clicking on column headers, and is much quicker for perusing the data and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;schemas&lt;/span&gt;  in multiple tables / databases. The commercial version has even more useful features, but the free version is very useful. Check it out - http://www.toadsoft.com/toadsqlserver/toad_sqlserver.htm  And if you're rich get the commercial version and let me know how you like it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4483600862152310327?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4483600862152310327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4483600862152310327' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4483600862152310327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4483600862152310327'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/11/toad-for-sqlserver.html' title='Toad for SQLServer'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6370338417519858945</id><published>2008-11-22T08:01:00.002-07:00</published><updated>2008-11-22T08:02:56.952-07:00</updated><title type='text'>New Technology</title><content type='html'>So for those of you who have been introduced to LINQ (and those not) here's a cool blog link that i read a lot that deals with the querying of excel tables (spreadsheets) using LINQ.&lt;br /&gt;&lt;br /&gt;http://blogs.msdn.com/ericwhite/archive/2008/11/20/inner-join-of-two-excel-tables.aspx&lt;br /&gt;&lt;br /&gt;Code on!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6370338417519858945?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6370338417519858945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6370338417519858945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6370338417519858945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6370338417519858945'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/11/new-technology.html' title='New Technology'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3189423795575579326</id><published>2008-11-19T15:46:00.002-07:00</published><updated>2008-11-19T15:49:39.542-07:00</updated><title type='text'>iWBD</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_l2ylydwIqqE/SSSXzevzgsI/AAAAAAAAACE/PCZ3jylauvw/s1600-h/iWBD.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270504374613017282" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 214px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://3.bp.blogspot.com/_l2ylydwIqqE/SSSXzevzgsI/AAAAAAAAACE/PCZ3jylauvw/s320/iWBD.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Why yes, this is a screen shot of a WBD on my phone. &lt;/div&gt;&lt;div&gt;Thanks for asking.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3189423795575579326?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3189423795575579326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3189423795575579326' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3189423795575579326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3189423795575579326'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/11/iwbd.html' title='iWBD'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_l2ylydwIqqE/SSSXzevzgsI/AAAAAAAAACE/PCZ3jylauvw/s72-c/iWBD.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5991285264861051815</id><published>2008-11-19T14:46:00.002-07:00</published><updated>2008-11-19T14:50:21.655-07:00</updated><title type='text'>Automated Copy and Paste across instances of Excel</title><content type='html'>If you're stumped about why your automated (from within a macro, etc.) copy and paste operations aren't working in Excel, make sure you are opening both the source and destination workbooks/worksheets from within the SAME instance of the Excel Application.  For some reason, despite the fact that it works fine manually (i.e. NOT in a macro), transferring from one Excel Application object to another in a macro, you seem to lose the contents of the clipboard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5991285264861051815?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5991285264861051815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5991285264861051815' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5991285264861051815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5991285264861051815'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/11/automated-copy-and-paste-across.html' title='Automated Copy and Paste across instances of Excel'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5436138479829418621</id><published>2008-10-29T14:27:00.001-06:00</published><updated>2008-10-29T14:27:43.480-06:00</updated><title type='text'>office life</title><content type='html'>How many Hickeys does it take to get water?&lt;br /&gt;&lt;br /&gt;More than you would think.&lt;br /&gt;&lt;br /&gt;-k&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5436138479829418621?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5436138479829418621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5436138479829418621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5436138479829418621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5436138479829418621'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/10/office-life.html' title='office life'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2774317881045794124</id><published>2008-10-13T11:43:00.002-06:00</published><updated>2008-10-13T11:46:57.974-06:00</updated><title type='text'>Finding duplicates</title><content type='html'>Ever need to find duplicates in a table?&lt;br /&gt;&lt;br /&gt;Use table variables to do it is one of the easiest ways...&lt;br /&gt;Table variables are deallocated after the transaction is done and are only visible for the duration of the transaction. They take the place of temp tables (popular in sql 2000)&lt;br /&gt;&lt;br /&gt;DECLARE @tv Table(&lt;br /&gt; Field1 VARCHAR(50)&lt;br /&gt; Field2 VARCHAR(50) )&lt;br /&gt;&lt;br /&gt;INSERT INTO @TV&lt;br /&gt;SELECT FirstName, LastName&lt;br /&gt;FROM Customers&lt;br /&gt;&lt;br /&gt;SELECT Field1, Field2&lt;br /&gt;FROM @tv&lt;br /&gt;GROUP BY Field1, Field2&lt;br /&gt;HAVING COUNT(*) &gt; 1&lt;br /&gt;&lt;br /&gt;Now you can do with whatever you want. &lt;br /&gt;&lt;br /&gt;Cheers :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2774317881045794124?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2774317881045794124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2774317881045794124' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2774317881045794124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2774317881045794124'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/10/finding-duplicates.html' title='Finding duplicates'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1111177788660717888</id><published>2008-10-13T08:29:00.000-06:00</published><updated>2008-10-13T08:30:06.359-06:00</updated><title type='text'>Sweet plugin!</title><content type='html'>http://www.oil-price.net/dashboard.php?lang=en&lt;br /&gt;&lt;br /&gt;Check out this pretty cool site with a fantastic plugin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1111177788660717888?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1111177788660717888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1111177788660717888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1111177788660717888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1111177788660717888'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/10/sweet-plugin.html' title='Sweet plugin!'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5575889652949612684</id><published>2008-10-03T11:43:00.004-06:00</published><updated>2008-10-03T11:56:42.445-06:00</updated><title type='text'>USB Hard Drive on an old Laptop?</title><content type='html'>I recently got a WD Passport 250Gig external USB drive (Thanks, Boss!) for my laptop (an old Dell Inspiron 600m).&lt;br /&gt;&lt;br /&gt;First thing I did was re-format it to NTFS (comes formatted FAT32 which limits filesizes to ~4GB)&lt;br /&gt;&lt;br /&gt;Second thing I did was copy a bunch of data to the drive from my girlfriend's much newer, fancier laptop.&lt;br /&gt;&lt;br /&gt;But when I tried to read any of those files with the Passport connected to my laptop, I got some very disturbing error balloons, some of which indicated that the drive had 'exceeded the power supply available from my USB port' and some of which suggested that data had been lost during failed operations on the drive.  The drive showed up as a device and I could access files (very briefly), but after at most a few seconds of activity, the error balloons would appear and the drive would stop responding, re-set, and then I'd get the pop-up for 'new device - what action would you like to take?'&lt;br /&gt;&lt;br /&gt;After some exploring and experimentation, I discovered that the data on the drive was not being lost or altered, but I could not successfully read much of anything from it (much less write to it).&lt;br /&gt;&lt;br /&gt;Tried a few different solutions with no success, and eventually fixed the problem by buying an externally-powered Belkin 4-port USB hub for $30 at circuit city.&lt;br /&gt;&lt;br /&gt;So in short, if you're running an old laptop and a heavy-current-drawing USB device, get a USB hub that plugs in to an AC power supply!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5575889652949612684?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5575889652949612684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5575889652949612684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5575889652949612684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5575889652949612684'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/10/usb-hard-drive-on-old-laptop.html' title='USB Hard Drive on an old Laptop?'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7460417543573413810</id><published>2008-09-29T17:28:00.003-06:00</published><updated>2008-09-29T17:57:47.490-06:00</updated><title type='text'>VERY HANDY TOOL! SQL2005 Service Manager</title><content type='html'>SQL Server 2000 had a handy app that lived in the tray near the clock of your windows desktop. With this app you could see all SQL Server related services, and easily start and stop them at will. SQL Server 2005 did not come with this handy tool.&lt;br /&gt;&lt;br /&gt;However at the following link a third party softare company that makes SQL Server tools has made a free one that works with SQL Server 2005.&lt;br /&gt;&lt;a href="http://www.sqldbatips.com/showarticle.asp?ID=46"&gt;http://www.sqldbatips.com/showarticle.asp?ID=46&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This can be vary handy when trouble shooting SQL Server Standard and SQL Server Express problems because it will tell you if a server instance exists, what its name is(useful when building connection strings), and if the service is actually running.&lt;br /&gt;&lt;br /&gt;This is a must to have when troubleshooting WFDE installs but is also just a handy tool to have in general for anyone that does SQL Server work or codes to SQL Server.&lt;br /&gt;&lt;br /&gt;Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7460417543573413810?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7460417543573413810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7460417543573413810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7460417543573413810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7460417543573413810'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/09/very-handy-tool-sql2005-service-manager.html' title='VERY HANDY TOOL! SQL2005 Service Manager'/><author><name>Scott Daniel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4396439631755739864</id><published>2008-09-22T19:30:00.002-06:00</published><updated>2008-09-22T19:31:56.621-06:00</updated><title type='text'>SPE 2008</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_l2ylydwIqqE/SNhG7DJPAxI/AAAAAAAAABk/tsfx0mFRUuM/s1600-h/booth.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5249023345970578194" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_l2ylydwIqqE/SNhG7DJPAxI/AAAAAAAAABk/tsfx0mFRUuM/s320/booth.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;A happy booth is an effective booth!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;(thanks guys you rock)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4396439631755739864?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4396439631755739864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4396439631755739864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4396439631755739864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4396439631755739864'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/09/spe-2008.html' title='SPE 2008'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_l2ylydwIqqE/SNhG7DJPAxI/AAAAAAAAABk/tsfx0mFRUuM/s72-c/booth.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2919673450148132141</id><published>2008-09-19T12:48:00.004-06:00</published><updated>2008-09-19T13:00:42.402-06:00</updated><title type='text'>MS Access bug - new columns in linked table not visible from code</title><content type='html'>This proved to be a very frustrating bug in MS Access:&lt;br /&gt;&lt;br /&gt;If you have an Access application with a form bound to a linked table and you add a column to the linked table the new column will not be visible through code even though it is visible everywhere else.  You can, for example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;See the new column in the table&lt;/li&gt;&lt;li&gt;See the new column if you query the table&lt;/li&gt;&lt;li&gt;Use the new column as the control source for a bound control on the bound form.&lt;/li&gt;&lt;/ul&gt;But if you reference "Me.myNewColumn" in VBA you get an error:&lt;br /&gt;Method or data member not found&lt;br /&gt;&lt;br /&gt;You can use columns without the Me. prefix so it's interesting to do this:&lt;br /&gt;MsgBox TypeName(myNewColumn)&lt;br /&gt;&lt;br /&gt;Prior to fixing the problem this msgbox will say "Empty"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Fix:&lt;/span&gt;&lt;br /&gt;Add a control to the form with the same name as myNewColumn.  It doesn't have to be bound or have any relation to the new column except for sharing the name.  Then delete the new control.&lt;br /&gt;&lt;br /&gt;Me.myNewColumn will no longer yield an error and&lt;br /&gt;MsgBox TypeName(myNewColumn)&lt;br /&gt;will yield "AccessField"&lt;br /&gt;&lt;br /&gt;I'm running MS Access 2003 (11.5614.5606) on Vista Ultimate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2919673450148132141?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2919673450148132141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2919673450148132141' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2919673450148132141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2919673450148132141'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/09/ms-access-bug-new-columns-in-linked.html' title='MS Access bug - new columns in linked table not visible from code'/><author><name>Will Hickey</name><uri>http://www.blogger.com/profile/01685627431111768454</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp0.blogger.com/_ug4R56vaXDo/RpKYU5O9E6I/AAAAAAAAAAM/fjLwRF5quFI/s320/IMG_2796_2small.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5761156098549059382</id><published>2008-09-17T12:28:00.004-06:00</published><updated>2008-09-17T12:54:49.143-06:00</updated><title type='text'>Troubleshooting applications with windows event viewer</title><content type='html'>Sometimes the best way to troubleshoot application errors that occur during install or other application operations is by looking at the logged entries in the windows event viewer.&lt;br /&gt;&lt;br /&gt;You may right click on the My Computer icon and select manage to open the computer management console. Event Viewer appears in the tree on the left.&lt;br /&gt;&lt;br /&gt;Alternatively you may go to Start&gt;Run and type in Eventvwr.msc to get just the event viewer to appear.&lt;br /&gt;&lt;br /&gt;There are several sections you may look in for these event log entries. For instance you can look at the applications node in the tree to view event log entries that pertain to application events. The source column is a good indication of what app created the event log entry. You can double click on the rows of interest and a dialog will popup with details of the error. These details are often the only bit of information you may have to go on to help your troubleshooting.&lt;br /&gt;&lt;br /&gt;Hope this helps and happy trails.&lt;br /&gt;&lt;br /&gt;Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5761156098549059382?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5761156098549059382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5761156098549059382' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5761156098549059382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5761156098549059382'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/09/troubleshooting-applications-with.html' title='Troubleshooting applications with windows event viewer'/><author><name>Scott Daniel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8177695438670837399</id><published>2008-09-15T21:30:00.002-06:00</published><updated>2008-09-15T21:37:51.603-06:00</updated><title type='text'>VBA IDE is like a Skinner box</title><content type='html'>I haven't posted anything useful in quite some time... I did discover something cool last month but I haven't had a chance to write it up properly.  I'll get to that soon.&lt;br /&gt;&lt;br /&gt;But this post is more food for thought than technical details.  In VBA if you write a line of code that isn't syntactically correct (like if w/o else or assignment w/o a RHS) and then move your cursor elsewhere you get a popup error accompanied by the critical stop sound.  As you can image this can be a powerful conditioner.&lt;br /&gt;&lt;br /&gt;Having spent altogether too much time programming in MS Access I have become extremely reluctant to move the cursor off a line I know to be incomplete...&lt;br /&gt;&lt;br /&gt;So i'll be working on typing this line:&lt;br /&gt;dongle.version9 = m_ldpVersion9;&lt;br /&gt;&lt;br /&gt;And I will realize I don't remember the RHS variable name and rather than leave the line like this:&lt;br /&gt;dongle.version9 =&lt;br /&gt;&lt;br /&gt;I will throw in a fake RHS:&lt;br /&gt;dongle.version9 = foo;&lt;br /&gt;&lt;br /&gt;just to keep from getting the popup.  But, I'm programming in C++ now (which doesn't do the horrible popup thing) and yet I still put in place holders.  I have been conditioned into doing something that is definitely NOT best practice by a stupid Microsoft construct.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8177695438670837399?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8177695438670837399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8177695438670837399' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8177695438670837399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8177695438670837399'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/09/vba-ide-is-like-skinner-box.html' title='VBA IDE is like a Skinner box'/><author><name>Will Hickey</name><uri>http://www.blogger.com/profile/01685627431111768454</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp0.blogger.com/_ug4R56vaXDo/RpKYU5O9E6I/AAAAAAAAAAM/fjLwRF5quFI/s320/IMG_2796_2small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1960373078861206164</id><published>2008-09-04T10:48:00.000-06:00</published><updated>2008-09-04T10:49:09.198-06:00</updated><title type='text'>drop all tables</title><content type='html'>ever needed to drop EVERYTHING in a database?&lt;br /&gt;&lt;br /&gt;now you can :)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;ALTER procedure [dbo].[Usp_DropAllTables]&lt;br /&gt;as&lt;br /&gt;&lt;br /&gt;declare @name  varchar(100)&lt;br /&gt;declare @xtype char(1)&lt;br /&gt;declare @sqlstring nvarchar(1000)&lt;br /&gt;&lt;br /&gt;declare AllSPViews_cursor cursor for&lt;br /&gt;SELECT sysobjects.name, sysobjects.xtype&lt;br /&gt;FROM sysobjects&lt;br /&gt;  join sysusers on sysobjects.uid = sysusers.uid&lt;br /&gt;--WHERE sysusers.name = 'USERNAME'&lt;br /&gt;--where OBJECTPROPERTY(sysobjects.id, N'IsView') = 1 and sysusers.name ='USERNAME'&lt;br /&gt;&lt;br /&gt;open AllSPViews_cursor&lt;br /&gt;&lt;br /&gt;fetch next from AllSPViews_cursor into @name, @xtype&lt;br /&gt;print '|' + @name + '|'&lt;br /&gt;while @@fetch_status = 0&lt;br /&gt;  begin&lt;br /&gt;-- obtain object type if it is a stored procedure or view&lt;br /&gt; print @name + ' ' +@xtype&lt;br /&gt;&lt;br /&gt;   if @xtype in ('T', 'U')&lt;br /&gt;      begin&lt;br /&gt;        set @sqlstring = 'drop table [' + @name + ']'&lt;br /&gt;        exec sp_executesql @sqlstring&lt;br /&gt;        set @sqlstring = ' '&lt;br /&gt;      end&lt;br /&gt;-- obtain object type if it is a view or stored procedure&lt;br /&gt;--   if @xtype = 'V'&lt;br /&gt;--      begin&lt;br /&gt;--         set @sqlstring = 'drop view ' + @name&lt;br /&gt;--         exec sp_executesql @sqlstring&lt;br /&gt;--         set @sqlstring = ' '&lt;br /&gt;--      end&lt;br /&gt;&lt;br /&gt;    fetch next from AllSPViews_cursor into @name, @xtype&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;close AllSPViews_cursor&lt;br /&gt;deallocate AllSPViews_cursor&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1960373078861206164?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1960373078861206164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1960373078861206164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1960373078861206164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1960373078861206164'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/09/drop-all-tables.html' title='drop all tables'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-419240428108806021</id><published>2008-08-27T08:23:00.001-06:00</published><updated>2008-08-27T08:25:15.796-06:00</updated><title type='text'>DataTable.Compute</title><content type='html'>Have a datatable and want to actually do some REAL SQL on it ... like SUM, AVG, MAX, MIN .. aggregrate things?&lt;br /&gt;&lt;br /&gt;Well - there's a DataTable.Compute function that takes in 2 parameters and works like this...&lt;br /&gt;&lt;br /&gt;DataTable.Compute("MAX(PERF)", "WELLID=7") ... and that'll find your max perf where your wellID is 7.&lt;br /&gt;&lt;br /&gt;enjoy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-419240428108806021?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/419240428108806021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=419240428108806021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/419240428108806021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/419240428108806021'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/08/datatablecompute.html' title='DataTable.Compute'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7218872055057694045</id><published>2008-08-27T08:09:00.002-06:00</published><updated>2008-08-27T08:21:08.758-06:00</updated><title type='text'>C# Design Guidelines</title><content type='html'>This group of documents from Microsoft is titled "Design Guidelines for Class Library Developers" but is useful for any C# developent as a "best practices" type reference.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/czefa0ke(vs.71).aspx"&gt;http://msdn.microsoft.com/en-us/library/czefa0ke(vs.71).aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7218872055057694045?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7218872055057694045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7218872055057694045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7218872055057694045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7218872055057694045'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/08/c-design-guidelines.html' title='C# Design Guidelines'/><author><name>Scott Daniel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8788344438426958504</id><published>2008-08-26T11:00:00.002-06:00</published><updated>2008-08-26T11:11:39.677-06:00</updated><title type='text'>VBA Constants</title><content type='html'>Is anybody still using VBA for Access???  Well, if you are, and you're wondering how to declare constants and whether those declarations involve implicit typecasting or not, let me enlighten you:&lt;br /&gt;&lt;br /&gt;Const myVarname [as type] = expression&lt;br /&gt;&lt;br /&gt;And yes, typecasting is done for you, based on the type of 'expression' (as evaluated by the compiler).  You may also supply a type explicitly if you like.&lt;br /&gt;&lt;br /&gt;Examples:&lt;br /&gt;&lt;br /&gt;    Const pi = 3  (type = Integer)&lt;br /&gt;    Const pi2 = 3.14 (type = Double)&lt;br /&gt;    Const pistring = "phil" (type = String)&lt;br /&gt;    Const pi3 As Integer = 3 (type = Integer)&lt;br /&gt;    Const pi4 As Double = 3.14159 (type = Double)&lt;br /&gt;&lt;br /&gt;Explicity types over-ride automatically generated ones, of course, so:&lt;br /&gt;&lt;br /&gt;    Const pi as Integer = 3.14&lt;br /&gt;&lt;br /&gt;will result in an Integer pi whose value is 3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8788344438426958504?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/8788344438426958504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=8788344438426958504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8788344438426958504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8788344438426958504'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/08/vba-constants.html' title='VBA Constants'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6567834145961432764</id><published>2008-08-19T15:26:00.003-06:00</published><updated>2008-08-19T15:28:51.603-06:00</updated><title type='text'>Data crunching books</title><content type='html'>This is highly recommended by Roland:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://islandia.law.yale.edu/ayers/"&gt;http://islandia.law.yale.edu/ayers/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll probably get a copy and have it hanging around the office if you would like to page through it.  We also have all the books by Tufte:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.edwardtufte.com/tufte/"&gt;http://www.edwardtufte.com/tufte/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;available for loan.  Lemme know if you want to check them out...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6567834145961432764?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6567834145961432764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6567834145961432764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6567834145961432764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6567834145961432764'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/08/data-crunching-books.html' title='Data crunching books'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4812820084967481235</id><published>2008-08-13T15:55:00.002-06:00</published><updated>2008-08-13T16:00:43.729-06:00</updated><title type='text'>File-scraping from secure servers</title><content type='html'>If you're scraping files from a secure Web server (URL begins with "https://..." instead of "http://..."), this might save you some hassle:&lt;br /&gt;&lt;br /&gt;http://www.christopherlewis.com/WGet/WGetFiles.htm&lt;br /&gt;&lt;br /&gt;Grab one of the versions that is SSL-Enabled (version 1.11.1 or later).  I've used 1.11.1 on my XP box and it works right out of the zip file (no need to register or configure anything).  You may have to use the  --no-check-certificate switch when accessing secure servers if your connection isn't able to verify the site's certificates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4812820084967481235?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4812820084967481235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4812820084967481235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4812820084967481235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4812820084967481235'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/08/file-scraping-from-secure-servers.html' title='File-scraping from secure servers'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1010659147979935743</id><published>2008-08-13T08:16:00.002-06:00</published><updated>2008-08-13T08:17:51.844-06:00</updated><title type='text'>A new google test</title><content type='html'>The following is from Rob, and I found it wonderful on a number of levels.  So I'm sharing with you:&lt;br /&gt;&lt;br /&gt;"&lt;br /&gt;Sharepoint?hmm...&lt;br /&gt;I have a new approach to evaluating platforms like sharepoint, inspired by &lt;a href="http://xkcd.com/458/"&gt;http://xkcd.com/458/&lt;/a&gt;&lt;br /&gt;Go ahead, read it.&lt;br /&gt;I'll wait..&lt;br /&gt;&lt;br /&gt;ok:&lt;br /&gt;Results 1 - 10 of about 131 for "I hate sharepoint". (0.17 seconds) vs&lt;br /&gt;Results 1 - 10 of about 1,970 for "I love sharepoint". (0.33 seconds)&lt;br /&gt;Apparently, it's an order of magnitude more lovable than hate-able, so you should do just fine.  :)&lt;br /&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1010659147979935743?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1010659147979935743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1010659147979935743' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1010659147979935743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1010659147979935743'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/08/new-google-test.html' title='A new google test'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7847322510371971780</id><published>2008-07-20T23:42:00.003-06:00</published><updated>2008-07-21T00:01:52.699-06:00</updated><title type='text'>Importing DBF files into SQL Server with SSIS</title><content type='html'>I was wondering why sometimes I have no trouble importing .dbf files with SSIS and other times it's a no-go. Rebekah has a nice Word doc that explains the specifics of doing this, but there is one more thing you have to know, or you'll go insane like I did. Anyway, many thanks to Timothy Chen Allen for pointing out that the .dfb files must be named in 8.3 notation! MS either doesn't know this or doesn't feel like sharing that particular piece of info.  Here's an excerpt from Timothy's blog (http://timothychenallen.blogspot.com/2007/07/how-to-import-dbase-tables-into-sql.html):&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;&lt;p&gt;Ah, SQL Server Integration Services (SSIS). Just when I'd learned to love Data Transformation Services (DTS) in SQL 2000, they completely changed how Extraction, Transformation, and Loading (ETL) is done in SQL Server 2005.&lt;br /&gt;&lt;br /&gt;That's okay. Something else to throw on the resume.&lt;br /&gt;&lt;br /&gt;At my current position I have to read in dBase files (DBF) a lot. We use ESRI ArcMap and everyone here uses ESRI shape files, which put data in DBFs. So I had to learn how to read in DBFs in SSIS.&lt;br /&gt;&lt;br /&gt;I was going to go into all the troubles I had doing this, but the fact is there is just &lt;strong&gt;so much&lt;/strong&gt; that can go wrong here. Here is one way to make things go right:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the name of the DBF file you want to read in to be 8.3 format. That is, 8 characters before the dot and 3 after. e.g. If the data file is named "2007 Data Load for Finance.DBF", change it to FIN2007.DBF or some such. SSIS will reckognize the DBF if the file name is not in 8.3 format, but will not be able to read data from it. This caused me much heartache before I figured it out.&lt;/li&gt;&lt;li&gt;In SSIS, set up an OLE DB Source. Hit the "New..." button for the OLE DB connection manager". Choose "Native OLD DB\Microsoft Jet 4.0 OLE DB Provider" as the provider.&lt;/li&gt;&lt;li&gt;For the Database File Name, put in the path to the DBF, but not the DBF file name itself. You will not be able to browse for this, because SSIS is looking for an MDB file at this point, which is not what you want. e.g. if your DBF is in c:\databases\FIN2007.DBF, put in "C:\databases\".&lt;/li&gt;&lt;li&gt;Click the "All" button, scroll up to Extended Properties, and put in "&lt;strong&gt;dbase 5.0&lt;/strong&gt;". If you don't do this, SSIS will try to read your dBase file as an Access file, which will fail. While you're here, you can hit "Test Connection" and it should work.&lt;/li&gt;&lt;li&gt;Hit OK until you are back at the OLE DB Source Editor screen. Choose the name of the database file from "Name of the table or the view".&lt;/li&gt;&lt;li&gt;At this point you should be able to hit "Preview..." and see your data. You can now use this DBF connection as a data source.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7847322510371971780?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7847322510371971780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7847322510371971780' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7847322510371971780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7847322510371971780'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/07/importing-dbf-files-into-sql-server.html' title='Importing DBF files into SQL Server with SSIS'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1485453786530619567</id><published>2008-07-14T10:14:00.004-06:00</published><updated>2008-07-14T10:29:10.133-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XP WFDE Local Admin'/><title type='text'>Windows: Easy check to see if logged in local user is Local Admin</title><content type='html'>Some software installs(WFDE) require user to be local admin on box because C# windows apps run with the rights of the logged on user. Here are 2 quick ways to check for that. This stuff comes straight off Google. Google is your friend.&lt;br /&gt;&lt;br /&gt;1) A quick check to see if the user is a local admin is to go Start&gt;Run and type CMD to get the dos command promt window. Once this DOS window is open it will show which user is logged in the path of the commad promt. You may enter "net localgroup administrators" without the double quotes, this will display if the current logged in user is a member of the local administartors group on the local machine.&lt;br /&gt;&lt;br /&gt;2) If you need to quickly tell if the person currently logged onto a PC is a local administrator of the Windows box, right click on the START button. If you see "Open All Users" rather than just "Open," the account is in the local Administrators group.&lt;br /&gt;&lt;br /&gt;Concerning WFDE, if either of these 2 methods reveal that the currently logged in windows user is NOT a member of the local administrators group on the local machine, you will need to log out, log back in as an administartor, then add the user in question to the local administrators group through the Control Panel, then log back in as the user in question with the newly added local admin rights and the install should go fine. Feel free to google how to add a windows user to the local administartors group or just click this link for more info:&lt;br /&gt;&lt;br /&gt;http://www.lockergnome.com/windows/2006/09/01/add-a-user-account-to-the-administrators-group-in-xp/&lt;br /&gt;&lt;br /&gt;Similar info may be Googled for Vista.&lt;br /&gt;&lt;br /&gt;-Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1485453786530619567?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1485453786530619567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1485453786530619567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1485453786530619567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1485453786530619567'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/07/windows-easy-check-to-see-if-logged-in.html' title='Windows: Easy check to see if logged in local user is Local Admin'/><author><name>Scott Daniel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4496888151369586690</id><published>2008-06-30T22:58:00.012-06:00</published><updated>2008-06-30T23:38:07.863-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP SIZE'/><title type='text'>INCREASING IIS SOAP MESSAGE SIZE LIMITS</title><content type='html'>You can have SOAP message size up to 2GB, but it requires some modifications in your application configuration file.&lt;br /&gt;&lt;br /&gt;Web.config settings:&lt;br /&gt;The following attributes can be assigned to the &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;httpRuntime&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt; tag in the &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;system.&lt;/span&gt;&lt;span style="color:maroon;"&gt;web&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt; section of the Web.config file.&lt;br /&gt;&lt;br /&gt;1) maxRequestLength&lt;br /&gt;Specifies the limit for the stream buffering threshold, in KB. The default value is 4096 (4 MB).&lt;br /&gt;&lt;br /&gt;2) executionTimeout&lt;br /&gt;Specifies the maximum number of seconds that a request is allowed to execute before being automatically shut down by ASP.NET. The value of this setting is ignored in debug mode. The default in .NET Framework 2.0 is 110 seconds. In the .NET Framework 1.0 and 1.1, the default is 90 seconds.&lt;br /&gt;To enable large message size, which can take large periods of time, increase the value of this property.&lt;br /&gt;&lt;br /&gt;Modify web.config and make these modifications to your application for large message size.&lt;br /&gt;&lt;httpruntime executiontimeout="3600" maxrequestlength="102400"&gt;&lt;br /&gt;The configuration, allowing message size of up to 100MB and upload periods up to 1 hour, should look like the following:&lt;br /&gt;Web.config settings for 100MB and 1 hour&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;system.&lt;/span&gt;&lt;span style="color:maroon;"&gt;web&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;httpRuntime&lt;/span&gt; &lt;span style="color:red;"&gt;maxRequestLength&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"102400"&lt;/span&gt; &lt;span style="color:red;"&gt;executionTimeout&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;"3600"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;system&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;web&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4496888151369586690?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4496888151369586690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4496888151369586690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4496888151369586690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4496888151369586690'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/increasing-iis-soap-message-size-limits.html' title='INCREASING IIS SOAP MESSAGE SIZE LIMITS'/><author><name>Scott Daniel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3956472978989163686</id><published>2008-06-30T18:55:00.002-06:00</published><updated>2008-06-30T18:57:35.051-06:00</updated><title type='text'>clip</title><content type='html'>Windows Vista has a new utility called clip that takes piped input and stores it in window's clipboard.  This is very handy for getting a list of files.  For example...&lt;br /&gt;&lt;br /&gt;dir/b *.xls |clip&lt;br /&gt;&lt;br /&gt;Nothing is written to stdout but a quick ^v drops the results wherever you want them&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3956472978989163686?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3956472978989163686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3956472978989163686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3956472978989163686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3956472978989163686'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/clip.html' title='clip'/><author><name>Will Hickey</name><uri>http://www.blogger.com/profile/01685627431111768454</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp0.blogger.com/_ug4R56vaXDo/RpKYU5O9E6I/AAAAAAAAAAM/fjLwRF5quFI/s320/IMG_2796_2small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5122685111758051072</id><published>2008-06-18T13:33:00.003-06:00</published><updated>2008-06-18T13:41:19.482-06:00</updated><title type='text'>Huge Access 2007 bug</title><content type='html'>I just spotted this on ZDNET / Tech Republic:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Warning: Access 2007 may delete instead of compact a database&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="contentData"&gt;           &lt;ul class="postData"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Date&lt;/strong&gt;: June 18th, 2008&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Author&lt;/strong&gt;: Susan Harkins &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Category&lt;/strong&gt;: &lt;a href="http://blogs.techrepublic.com.com/msoffice/?cat=1" title="View all posts in General" rel="category tag"&gt;General&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://search.techrepublic.com.com/search/Microsoft+Access.html"&gt;Microsoft Access&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Access+2007.html"&gt;Access 2007&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Databases.html"&gt;Databases&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Microsoft+Office.html"&gt;Microsoft Office&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Storage.html"&gt;Storage&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Enterprise+Software.html"&gt;Enterprise Software&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Software.html"&gt;Software&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Data+Management.html"&gt;Data Management&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Office+Suites.html"&gt;Office Suites&lt;/a&gt;, &lt;a href="http://search.techrepublic.com.com/search/Hardware.html"&gt;Hardware&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;!-- /interact --&gt;                &lt;/div&gt;&lt;!-- /contentData --&gt;                        &lt;div class="entry"&gt;      &lt;p&gt;When you compact a database, using the same name, Access is supposed to create a new compacted database and delete the original. Access 2007 has a huge bug though. Instead of the above, Access deletes the old database without creating the new one — nice.If you try to compact and Access 2007 displays a warning that it can’t delete &lt;em&gt;name&lt;/em&gt;.accdb after compacting it and suggests that you remove the read-only status and try again, do not click OK or Access will most likely destroy your database. I put off writing about this for a while because I couldn’t recreate the compact/delete problem myself.&lt;/p&gt; &lt;p&gt;An &lt;a href="http://support.microsoft.com/?kbid=950812"&gt;April hotfix&lt;/a&gt; supposedly fixes the problem, but since I couldn’t recreate the bug, I couldn’t test the hotfix with any certainty. The good news is I’ve not heard any horror stories about the hotfix. In addition, the word is that it does indeed fix the compact bug.&lt;/p&gt; &lt;p&gt;I’m wondering just how big a problem this bug was — did anyone run into it before the hotfix was available?&lt;/p&gt;           &lt;/div&gt;-- Excerpted from: http://blogs.techrepublic.com.com/msoffice/?p=577&amp;amp;tag=nl.e550&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5122685111758051072?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5122685111758051072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5122685111758051072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5122685111758051072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5122685111758051072'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/huge-access-2007-bug.html' title='Huge Access 2007 bug'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6437531843232162614</id><published>2008-06-16T21:06:00.002-06:00</published><updated>2008-06-16T21:10:08.987-06:00</updated><title type='text'>SQL &amp; NuLL</title><content type='html'>So just a short blurb .. but there's a few things about sql's NULL that you should know.&lt;br /&gt;&lt;br /&gt;if you have a query&lt;br /&gt;&lt;br /&gt;SELECT a.id, b.id, b.firstName&lt;br /&gt;from tableA a&lt;br /&gt;join tableB b on a.id = b.id&lt;br /&gt;&lt;br /&gt;and if you have a.id, or b.id equal to NULL this query won't join properly. &lt;br /&gt;&lt;br /&gt;NULL &lt;&gt; NULL.&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MAX(girl_age) + max(boy_age)&lt;br /&gt;&lt;br /&gt;if boy_age is ever null and girl_age is not .. the result will be null&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;in short - it's kind of like a 0 in math. 0 * NUMBER = 0. &lt;br /&gt;&lt;br /&gt;but if you run into errors or unexpected datasets in sql and are doing things that have potentials to have nulls in their columns, then that is probably why.&lt;br /&gt;&lt;br /&gt;happy querying!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6437531843232162614?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6437531843232162614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6437531843232162614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6437531843232162614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6437531843232162614'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/sql-null.html' title='SQL &amp; NuLL'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5347492160146193869</id><published>2008-06-15T17:30:00.003-06:00</published><updated>2008-06-15T17:33:46.643-06:00</updated><title type='text'>Trouble staying connected with web-based Halco VPN?</title><content type='html'>Recently, I started having problems staying connected to the Halco VPN with the new web-based VPN client (I had been used the old stand-alone VPN client until fairly recently).  With the web-based client, I was getting kicked off my connection after just a few minutes of idle time.&lt;br /&gt;&lt;br /&gt;Easiest solution:  Fire up MS Outlook.  Its mail-checking queries are sufficient to keep the connection alive.  As a bonus, you can check Karen's Halco mail for her and forward anything that looks important to her gmail :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5347492160146193869?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5347492160146193869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5347492160146193869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5347492160146193869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5347492160146193869'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/trouble-staying-connected-with-web.html' title='Trouble staying connected with web-based Halco VPN?'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2430386489907060482</id><published>2008-06-13T16:45:00.003-06:00</published><updated>2008-06-13T16:48:08.934-06:00</updated><title type='text'>Go Rockies!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_l2ylydwIqqE/SFL4xJ6uQbI/AAAAAAAAABc/0TYHXvo1hPk/s1600-h/photo.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_l2ylydwIqqE/SFL4xJ6uQbI/AAAAAAAAABc/0TYHXvo1hPk/s320/photo.jpg" alt="" id="BLOGGER_PHOTO_ID_5211501242180583858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Despite John's no holds barred commitment to his rally cap, the Rockies failed to pull it out in the end.  But it was still a very purple day.&lt;br /&gt;&lt;br /&gt;-k&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2430386489907060482?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2430386489907060482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2430386489907060482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2430386489907060482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2430386489907060482'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/go-rockies.html' title='Go Rockies!'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_l2ylydwIqqE/SFL4xJ6uQbI/AAAAAAAAABc/0TYHXvo1hPk/s72-c/photo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2482848298556083437</id><published>2008-06-10T12:00:00.003-06:00</published><updated>2008-06-10T12:05:12.196-06:00</updated><title type='text'>fuzzy data mining...</title><content type='html'>If you're doing a lot of data mining from an internet source you might risk getting banned by the site you're hitting continuously so it's useful to write data miners that act human&lt;br /&gt;&lt;br /&gt;#sleep.pl&lt;br /&gt;$time = rand;&lt;br /&gt;$time = $ARGV[0] + $time * ($ARGV[1] - $ARGV[0]);&lt;br /&gt;sleep $ARGV[0];&lt;br /&gt;&lt;br /&gt;yeah I could have done all that on one line but Perl becomes unreadable pretty fast when you start doing that so I'll split it out for your sake&lt;br /&gt;&lt;br /&gt;Anyway this sleeps for a random number of seconds between the two arguments.  So I generate bat files that alternate between wgets and "perl c:\code\perl\sleep.pl 50 90"  I'm guessing this will get past most log file scanners that are looking for automated hits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2482848298556083437?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2482848298556083437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2482848298556083437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2482848298556083437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2482848298556083437'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/fuzzy-data-mining.html' title='fuzzy data mining...'/><author><name>Will Hickey</name><uri>http://www.blogger.com/profile/01685627431111768454</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp0.blogger.com/_ug4R56vaXDo/RpKYU5O9E6I/AAAAAAAAAAM/fjLwRF5quFI/s320/IMG_2796_2small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7356557749752076745</id><published>2008-06-08T10:23:00.004-06:00</published><updated>2008-06-08T10:40:17.783-06:00</updated><title type='text'>Primary keys on unknown datasets</title><content type='html'>Ever been given the task to import a large dataset with unfamiliar data in SQL and need to put some keys on the table?&lt;br /&gt;&lt;br /&gt;Well if you haven't - it's definitely something that you will have to do before you die. &lt;br /&gt;&lt;br /&gt;Since databases are starting to infiltrate everything from medical records, to oilfield, to the real-estate world - you never know what kind of data you will have to deal with. Each job you have comes with different datasets and there's no way you can know the PK for your data (generally speaking.)&lt;br /&gt;&lt;br /&gt;SQL has this handy too to help you out!&lt;br /&gt;&lt;br /&gt;"sp_help"&lt;br /&gt;&lt;br /&gt;To use this command - you would callit like this:&lt;br /&gt;&lt;blockquote&gt;sp_help mydatabase.dbo.table1&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Then it will give you all sorts of statistics of the table including the name, location of the table, columns in the table, identities of the table, suggested index of the table, row guid cols, etc.&lt;br /&gt;&lt;br /&gt;This is a very handy tool that has come to the rescue and has cut off hours of keying data.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7356557749752076745?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7356557749752076745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7356557749752076745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7356557749752076745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7356557749752076745'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/06/primary-keywayys-on-unknown-datasets.html' title='Primary keys on unknown datasets'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5134305085358985529</id><published>2008-05-30T09:03:00.002-06:00</published><updated>2008-05-30T09:06:13.196-06:00</updated><title type='text'>First and last day of the month in Access</title><content type='html'>Of course it is easy to figure out the first day of the month for a given date&lt;br /&gt;&lt;br /&gt;CDate(Month([PROD_DATE]) &amp;amp; "/1/" &amp;amp; Year([PROD_DATE]))&lt;br /&gt;&lt;br /&gt;The last day of the month is a little trickier, but not too bad.  Figure out the first day of the next month, and then subtract a day!&lt;br /&gt;&lt;br /&gt; DateAdd("d",-1,DateAdd("m",1,CDate(Month([PROD_DATE]) &amp;amp; "/1/" &amp;amp; Year([PROD_DATE]))))&lt;br /&gt;&lt;br /&gt;Yay date math.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5134305085358985529?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5134305085358985529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5134305085358985529' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5134305085358985529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5134305085358985529'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/first-and-last-day-of-month-in-access.html' title='First and last day of the month in Access'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4089340240078780741</id><published>2008-05-28T12:19:00.003-06:00</published><updated>2008-05-28T12:31:18.954-06:00</updated><title type='text'>Merging Assemblies</title><content type='html'>So if any of you find yourself with a .exe app (or .dll) that you want to deploy and there's a billion references you used, it looks really bad on a client's computer to copy a lot of assemblies over. Not only does it clutter up the directories with random files, but it could cause some issues if a reference was accidentally deleted.&lt;br /&gt;&lt;br /&gt;There are 2 ways I found to do this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Way #1&lt;/span&gt;&lt;br /&gt;It is called &lt;a href="http://research.microsoft.com/%7Embarnett/ILMerge.aspx"&gt;ILMerge&lt;/a&gt; by Microsoft. Simply put, its super easy to use. In the properties of a project go to the Build Events. In the post-build section is where you put your command:&lt;br /&gt;&lt;br /&gt;Syntax is basically: ILMerge.exe /ndebug /target:Dll (or exe) /out:OUTFILENAME ORIGINAL_FILE_TO_MERGE_ASSEMBLIES /log ASSEMBLY1 ASSEMBLY2 ASSEMBLYn&lt;br /&gt;&lt;br /&gt;Below is an example of one I used for a class library. I wanted my output file to be the same file as my build and wanted to merge in the acrobat control and office viewer control.&lt;br /&gt;&lt;br /&gt;"C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /ndebug /target:Dll /out:$(TargetPath) $(TargetPath) /log $(TargetDir)\Refs\AcroPDF.dll&lt;br /&gt;$(TargetDir)\Refs\officeviewer.ocx&lt;br /&gt;&lt;br /&gt;And bam! After build rather than needing 3 files to run the control, you only need 1, huzzah!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Way #2&lt;/span&gt;&lt;br /&gt;This is a little less elegant, but it works much better in some cases. Way #1 is awesome, but say the assembly needs to be in the GAC in order for it to work. Then how do you regsvr32 an embedded file? I'm not sure on that, but here's my workaround. In the Resources of your project import the assemblies needed. Then in the constructor of the main class, add these lines of code:&lt;br /&gt;&lt;br /&gt;File.WriteAllBytes(PATH, Properties.Resources.YOUR_RESOURCE_FILE);&lt;br /&gt;ystem.Diagnostics.Process.Start("regsvr32", "\"" + Path.Combine(PATH, YOUR_RESOURCE_FILE_NAME) + "\" /s");&lt;br /&gt;&lt;br /&gt;And bam! On run, it will save the resource to a file and regsvr32 it! Your golden!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4089340240078780741?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4089340240078780741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4089340240078780741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4089340240078780741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4089340240078780741'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/merging-assemblies.html' title='Merging Assemblies'/><author><name>Jeff</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://i4.photobucket.com/albums/y105/kiwieater/IMGP0154.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1237667580971913842</id><published>2008-05-27T21:21:00.002-06:00</published><updated>2008-05-27T21:31:08.339-06:00</updated><title type='text'>Variable-Dimensioning Gotcha in VB</title><content type='html'>This might be old news to you folks, but it surprised me...&lt;br /&gt;&lt;br /&gt;Consider the following (perfectly legal) VB code:&lt;br /&gt;&lt;br /&gt;Dim x, y As Integer&lt;br /&gt;&lt;br /&gt;I have always assumed this syntax is equivalent to:&lt;br /&gt;&lt;br /&gt;Dim x As Integer&lt;br /&gt;Dim y As Integer&lt;br /&gt;&lt;br /&gt;As it turns out, this is NOT TRUE.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dim x, y As Integer&lt;br /&gt;&lt;br /&gt; is actually equivalent to the far more sinister:&lt;br /&gt;&lt;br /&gt;Dim x&lt;br /&gt;Dim y As Integer&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;Dim x As Variant&lt;br /&gt;Dim y As Integer&lt;br /&gt;&lt;br /&gt;Variants, while useful, are generally to be avoided whenever possible, as they create a lot of behind-the-scenes overhead at run-time, so Dim statements like this can be quite costly:&lt;br /&gt;&lt;br /&gt;Dim x, y, z, p, q, r, sumtotal, runningsum2, foo, cat, bob As Integer&lt;br /&gt;&lt;br /&gt;Happy coding!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1237667580971913842?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1237667580971913842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1237667580971913842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1237667580971913842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1237667580971913842'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/variable-dimensioning-gotcha-in-vb.html' title='Variable-Dimensioning Gotcha in VB'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4406080966608087602</id><published>2008-05-27T15:13:00.003-06:00</published><updated>2008-05-27T15:22:50.316-06:00</updated><title type='text'>Error converting numeric to numeric.</title><content type='html'>This error baffled me. Actually I laughed when I first saw it.&lt;br /&gt;&lt;br /&gt;So here's the deal.&lt;br /&gt;&lt;br /&gt;SQL server 2005. Stored proc. I was trying to insert some information into a database via a little front end application that I had written in c# (2.0 platform).&lt;br /&gt;&lt;br /&gt;No biggie, right? I had done it a million times before.&lt;br /&gt;&lt;br /&gt;Then I got this error. I had been staring at my computer for hours though and thought I was halucinating or going bugeyed. So I rebooted. Same error.&lt;br /&gt;&lt;br /&gt;I called it quits for the evening.&lt;br /&gt;&lt;br /&gt;Next morning same deal.&lt;br /&gt;&lt;br /&gt;Then I went record by record inserting the things in the dataset that I was sending through my stored procedure. Around record 50 I finally noticed it.&lt;br /&gt;&lt;br /&gt;Whenever you get this error:&lt;br /&gt;MAKE SURE YOU DON'T HAVE A DATA-TYPE OVERFLOW. I was trying to insert "1030" into a NUMERIC(5,2) type field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4406080966608087602?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4406080966608087602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4406080966608087602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4406080966608087602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4406080966608087602'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/error-converting-numeric-to-numeric.html' title='Error converting numeric to numeric.'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7282454486877990761</id><published>2008-05-22T14:36:00.002-06:00</published><updated>2008-05-22T14:38:32.783-06:00</updated><title type='text'>full database search</title><content type='html'>let's say you have a nasty database and somewhere in there you KNOW there's a piece of information but you don't want to go through and look at every column in every table.&lt;br /&gt;&lt;br /&gt;WELL! &lt;a href="http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm"&gt;HERE! is a link&lt;/a&gt; that shows how to do such things. it goes through and hits system tables to query every table, every field in your database.&lt;br /&gt;&lt;br /&gt;for a small database it's super fast. for a moderate sized database (like 1-2 gig), be willing to wait 5-10 minutes - so know what you're after!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7282454486877990761?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7282454486877990761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7282454486877990761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7282454486877990761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7282454486877990761'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/full-database-search.html' title='full database search'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-7301332596055034595</id><published>2008-05-20T22:33:00.001-06:00</published><updated>2008-05-20T22:33:55.132-06:00</updated><title type='text'>Making .NET components work with COM</title><content type='html'>The following tricks will help you get your C# .NET assemblies to work with COM (from un-managed VBA code in Access, for example):&lt;br /&gt;&lt;br /&gt;1.) Check the 'Register for COM Interop' box on the Build tab of the Project Properties dialog before building&lt;br /&gt;&lt;br /&gt;2.) Sign (Strong-Name) the assembly using a key file. There are various ways to do this - the easiest is probably via the 'Signing' tab on the Project Properties dialog (will build a key-file for you if you like). (I'm not sure if this is strictly necessary for COM interop, but it does allow you to put your assembly in the GAC on the client machine)&lt;br /&gt;&lt;br /&gt;3.) Implement an explicit public interface to your assembly class (not absolutely necessary for interop, but Intellisense will not work without it - only the signatures in your interface will show up in intellisense on the COM side). It is important to note here that you also need to suppress the creation of a default class interface in order to make your own interface the default. The simplest way to do this is to set the classinterfacetype attribute to 'none' for the class(es) you want to expose to COM. The default interface will then be the first one in your inheritance list (after the colon in your class definition). Setting the classinterfacetype to 'autodual' also works, but this practice seems to have other drawbacks and is not usually recommended.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.) You will need a default constructor with no arguments for any class you wish to expose to COM. Additional constructors are fine, but you will only be able to instantiate from the COM side via the no-argument constructor.&lt;br /&gt;&lt;br /&gt;5.) Anything you would like to be COM visible needs to be declared public in your class. You can turn COM-visibilty on and off for any public item in your assembly using the COM Visible attribute (defaults to true, I believe).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6.) After building your assembly, register it and create a type-library (using Regasm.exe or similar) and place the assembly in the same directory as the COM project that will consume it (if this is not possible or desirable, you can also place the assembly in the Global Assembly Cache (avoiding DLL Hell because you strong-named the assembly when you built it). Some of these steps may or may not be performed for you by the development suite you're using (Vis. Studio will register your DLL and create a TLB for you, at the very least).&lt;br /&gt;&lt;br /&gt;7.) On the COM side, be sure to remove the old reference (to the TLB file), save your work, then re-add the reference whenever your TLB has changed (if you make changes to the .NET assembly and re-build it, for example). I like to also manually un-register the old DLL and register the new one before re-adding the reference in VBA (even though Vis Studio seems to take care of this itself)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-7301332596055034595?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/7301332596055034595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=7301332596055034595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7301332596055034595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/7301332596055034595'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/making-net-components-work-with-com.html' title='Making .NET components work with COM'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2381884503659517531</id><published>2008-05-19T11:40:00.003-06:00</published><updated>2008-05-19T12:18:50.862-06:00</updated><title type='text'>Thoughts on the DJ Basin Energy Expo</title><content type='html'>Admittedly, I'm a newcomer to the oil and gas industry. So, when I went to the &lt;a href="http://www.greeleytrib.com/article/20080514/BUSINESS/987304302"&gt;DJ Basin Energy Expo&lt;/a&gt;, I wasn't sure what to expect.  I figured I'd just see a bunch of booths with people peddling their products and chatting with colleges. The might be a few pens and pencils for swag. Secretly, I was hoping there was going to be a top secret demo of some new technology akin to "&lt;a href="http://images.wikia.com/bttf/images/5/56/Mrfusion.png"&gt;Mr. Fusion&lt;/a&gt;."&lt;br /&gt;While I didn't see any civilization-altering miracle energy source,  I was pleasantly surprised to find there was a &lt;span style="font-style: italic;"&gt;ton &lt;/span&gt;of cool stuff there.&lt;br /&gt;&lt;br /&gt;Some of the highlights:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A &lt;a href="http://grimg.sv.publicus.com/apps/pbcsi.dll/bilde?Site=GR&amp;amp;Date=20080514&amp;amp;Category=BUSINESS&amp;amp;ArtNo=987304302&amp;amp;Ref=AR&amp;amp;MaxW=550&amp;amp;title=1"&gt;scale model of a drill&lt;/a&gt; that was actually lit and operational&lt;/li&gt;&lt;li&gt;USGS core samples&lt;/li&gt;&lt;li&gt;Actual equipment including a command center, mixer, and rig&lt;/li&gt;&lt;li&gt;Cool swag including water bottles, collapsible flying disks, and live blue spruce saplings&lt;/li&gt;&lt;li&gt;Free food and ice cream! &lt;/li&gt;&lt;li&gt;Representatives from EnCana, Cudd and many others that patently answered all my dumb questions&lt;/li&gt;&lt;/ul&gt;I was really impressed by the fact that the expo's central purpose was to educate the public. I learned a ton of information about my new field, got some cool swag and met some nice people.&lt;br /&gt;&lt;br /&gt;What more could you really ask for?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2381884503659517531?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2381884503659517531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2381884503659517531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2381884503659517531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2381884503659517531'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/thoughts-on-dj-basin-energy-expo.html' title='Thoughts on the DJ Basin Energy Expo'/><author><name>Greenvesper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_fIKl4QXZ40M/SHOyfHSoS-I/AAAAAAAAAAM/gT-z1XxQ51k/S220/grnves_tn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3033052034964256811</id><published>2008-05-12T09:32:00.002-06:00</published><updated>2008-05-12T09:36:59.375-06:00</updated><title type='text'>cont of SSIS</title><content type='html'>So something I mentioned in my last post was how cool the scripting component that SSIS has.&lt;br /&gt;&lt;br /&gt;Well.&lt;br /&gt;&lt;br /&gt;Something that I should also say, is that if you want to include an outside reference to a DLL (say a 3rd party one for poops and laughs) you have to do something super dooper funky becuase of it's limitations.&lt;br /&gt;&lt;br /&gt;1. Copy the assembly from the location where you find it to %windir%\Microsoft.net\framework\v2.0.xxxxx &lt;br /&gt;2. Add a reference in the script task editor under the Project | Add References menu. &lt;br /&gt;3. In the script, add the Imports AssemblyName statement &lt;br /&gt;4. Make sure the assembly is in the GAC&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3033052034964256811?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3033052034964256811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3033052034964256811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3033052034964256811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3033052034964256811'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/cont-of-ssis.html' title='cont of SSIS'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-155005770499644316</id><published>2008-05-09T07:58:00.002-06:00</published><updated>2008-05-09T08:16:44.056-06:00</updated><title type='text'>what is this thing called SSIS</title><content type='html'>There's a few ways to deal with data. Lots of times, it's best to use an &lt;a href="http://en.wikipedia.org/wiki/Extract,_transform,_load"&gt;ETL&lt;/a&gt; tool. There's cheap OTC tools that you can use - Microsoft Excel and Access being some of the more common choices. Then there's spendy stuff.&lt;br /&gt;&lt;br /&gt;The spendier you get - the more user friendly they get too.&lt;br /&gt;&lt;br /&gt;But what happens when you are a budget (surprise!), you have a set structure, and you want a repetable process that you have god-like power over?&lt;br /&gt;&lt;br /&gt;Well - I would say use DTS. Which is now known as SSIS (Sql Server Integration Services).&lt;br /&gt;&lt;br /&gt;SSIS is a super powerful package that Microsoft gives with SQL Server 2005 to handle data import, transformations, and loading into SQL. Since it's the first release, there are a handful of bugs in it. That being said - it's super useful.&lt;br /&gt;&lt;br /&gt;Here's a few uses that I like out of it&lt;br /&gt;&lt;br /&gt;1) File preprocessing &lt;br /&gt;-say you have a file that's, to put it bluntly, a bitch, and has no formatting whatsoever, but you know the information you're looking for. SSIS provides you a tool to pre-process the file using .NET. in 2005, it's vb.net *only*, but like all .net things, you can write it in c# and then just import the library and call it in vb.net, if you're a c# guy.&lt;br /&gt;&lt;br /&gt;2) Error Handling&lt;br /&gt;-let's say you don't care about truncation errors. No worries! your code will STILL run! you can just tell SSIS to ignore that TYPE or error . . . .&lt;br /&gt;&lt;br /&gt;2a) let's say you do actually care about truncation errors - you can have SSIS output it to a "error file"&lt;br /&gt;&lt;br /&gt;And best of all - the most helpful site i've found with it . . . &lt;a href="http://ssisblog.replicationanswers.com/"&gt;HERE!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-155005770499644316?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/155005770499644316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=155005770499644316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/155005770499644316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/155005770499644316'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/05/what-is-this-thing-called-ssis.html' title='what is this thing called SSIS'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-8992243188942250700</id><published>2008-04-17T01:49:00.009-06:00</published><updated>2008-04-23T14:34:34.815-06:00</updated><title type='text'>Clear a ton of TextBox controls on a Windows form.</title><content type='html'>&lt;span style="font-family:courier new;font-size:85%;"&gt;If you ever need to clear a bunch of textbox controls on a Windows application form, here’s a quick and efficient way to do so. This especially comes in handy if you have a form with a ton of textboxes in multiple container type controls (Panel, TabControl, GroupBox, Form, etc) that are nested throughout your form. You can pass individual containers, or since a form is a type of container you can pass an entire form to the method.&lt;br /&gt;&lt;br /&gt;ClearAllTextBoxes(this); //clear every textbox on form&lt;br /&gt;&lt;br /&gt;public void ClearAllTextBoxes(Control Container)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;foreach (Control ctrl in Container.Controls)&lt;br /&gt;{&lt;br /&gt;  //if it's a textbox control, initialize it&lt;br /&gt;if (ctrl.GetType() == typeof(TextBox))&lt;br /&gt;((TextBox)ctrl).Text = "";&lt;br /&gt;&lt;br /&gt;//if it's another container type, do the recursion&lt;br /&gt;if (ctrl.Controls.Count &gt; 0)&lt;br /&gt;ClearAllTextBoxes(ctrl);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You could also apply this to a webform; however, as you are probably aware, there are other ways to do this without a trip to the server.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-8992243188942250700?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8992243188942250700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/8992243188942250700'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/04/clear-ton-of-textbox-controls-on.html' title='Clear a ton of TextBox controls on a Windows form.'/><author><name>John Morse</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-957162464822734787</id><published>2008-04-09T16:21:00.004-06:00</published><updated>2008-04-09T16:28:03.924-06:00</updated><title type='text'>Count (Distinct) query in Access</title><content type='html'>If you think you've lost your mind because Access won't let you write a Count(Distinct X) query, you may still be right but here's how you do it anyway (excerpted from &lt;a href="http://blogs.msdn.com/access/archive/2007/09/19/writing-a-count-distinct-query-in-access.aspx"&gt;http://blogs.msdn.com/access/archive/2007/09/19/writing-a-count-distinct-query-in-access.aspx&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;We received a question from a reader named Eric week before last about how to write a Count(Distinct) query in Access. In other database applications such as SQL Server, Oracle, and MySQL, the Count(Distinct) aggregate is used to count the number of unique items in a given rowset.&lt;br /&gt;&lt;br /&gt;To get a count of the number of unique colors in the table, you could write a query such as:&lt;br /&gt;SELECT Count(Distinct Color) AS N FROM tblColors&lt;br /&gt;&lt;br /&gt;This would return the value 4 as there are four unique colors in the Color field in the table. Unfortunately, the Access Database Engine does not support the Count(Distinct) aggregate. To return this value from an Access table, you would need to use a subquery such as:&lt;br /&gt;SELECT Count(*) AS N&lt;br /&gt;FROM (SELECT DISTINCT Color FROM tblColors) AS T;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-957162464822734787?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/957162464822734787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=957162464822734787' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/957162464822734787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/957162464822734787'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/04/count-distinct-query-in-access.html' title='Count (Distinct) query in Access'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4948553566252747706</id><published>2008-03-26T00:03:00.002-06:00</published><updated>2008-03-26T00:07:08.847-06:00</updated><title type='text'>How to create a delay (sleep) in VBA</title><content type='html'>For those rare occasions when you actually need to slow down VBA:&lt;br /&gt;&lt;br /&gt;Excerpted from &lt;a href="http://support.microsoft.com/kb/162150"&gt;http://support.microsoft.com/kb/162150&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Use an API call to suspend the execution of (an Office App) for a fixed amount of time.The Kernel32 contains a function that pauses a program's execution for a specified amount of time, specified in milliseconds. To use the function, it must first be declared in the General Declarations section of the module in which it will be used:&lt;br /&gt;&lt;br /&gt;Declare Sub Sleep Lib "kernel32" Alias "Sleep" _&lt;br /&gt;(ByVal dwMilliseconds As Long)&lt;br /&gt;&lt;br /&gt;Use the following syntax to call the Sleep function:&lt;br /&gt;Sub Sleep()&lt;br /&gt;Sleep 1000 'Implements a 1 second delay&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4948553566252747706?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4948553566252747706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4948553566252747706' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4948553566252747706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4948553566252747706'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/03/how-to-create-delay-sleep-in-vba.html' title='How to create a delay (sleep) in VBA'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2843108450760482762</id><published>2008-03-22T15:16:00.003-06:00</published><updated>2008-03-22T15:20:05.379-06:00</updated><title type='text'>Can't Connect to VSS2005 in VS2008?</title><content type='html'>So I currently ran into a little problem that turns out it's also a little problem for a lot of other people, but not a lot of fixes out there about it.&lt;br /&gt;&lt;br /&gt;So here's your problem .. you have VS2008 installed (all shiny looking even!) and want to connect to a VSS2005 database. Well initially, it's not recognized. You actually need to patch your client of VSS so that VS2k8 will read it.&lt;br /&gt;&lt;br /&gt;There's also a &lt;a href="http://blogs.msdn.com/richardb/archive/2007/11/19/vs-2008-users-remember-to-download-the-sourcesafe-ctp.aspx"&gt;little lecture &lt;/a&gt;here to read about it:&lt;br /&gt;&lt;br /&gt;But if you don't feel like reading all of that &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=FAF41EDD-924D-449F-AEFC-9C86DD499720&amp;amp;displaylang=en"&gt;here&lt;/a&gt; is the link for the fix. It takes about 5 minutes total to download and patch your version of VSS.&lt;br /&gt;&lt;br /&gt;Happy coding!&lt;br /&gt;&lt;br /&gt;-Rebekah&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2843108450760482762?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2843108450760482762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2843108450760482762' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2843108450760482762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2843108450760482762'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/03/cant-connect-to-vss2005-in-vs2008.html' title='Can&apos;t Connect to VSS2005 in VS2008?'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-278343942769233579</id><published>2008-03-11T09:06:00.001-06:00</published><updated>2008-03-11T09:07:52.355-06:00</updated><title type='text'>The Baby!</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_l2ylydwIqqE/R9agN8-7jVI/AAAAAAAAAAU/W5a7peNhehA/s1600-h/photo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5176500983277784402" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_l2ylydwIqqE/R9agN8-7jVI/AAAAAAAAAAU/W5a7peNhehA/s320/photo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Little Matthew Burkhart caught mid thought.  He's really real.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-278343942769233579?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/278343942769233579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=278343942769233579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/278343942769233579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/278343942769233579'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/03/baby.html' title='The Baby!'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_l2ylydwIqqE/R9agN8-7jVI/AAAAAAAAAAU/W5a7peNhehA/s72-c/photo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1077811415309473465</id><published>2008-03-11T09:02:00.001-06:00</published><updated>2008-03-11T09:04:33.242-06:00</updated><title type='text'>Scary Accurate</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_l2ylydwIqqE/R9afWs-7jUI/AAAAAAAAAAM/-YCR1riSVmM/s1600-h/09opart_large.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5176500034090011970" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_l2ylydwIqqE/R9afWs-7jUI/AAAAAAAAAAM/-YCR1riSVmM/s320/09opart_large.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;From Rob, From the NYTimes opinion section.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1077811415309473465?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1077811415309473465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1077811415309473465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1077811415309473465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1077811415309473465'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/03/scary-accurate.html' title='Scary Accurate'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_l2ylydwIqqE/R9afWs-7jUI/AAAAAAAAAAM/-YCR1riSVmM/s72-c/09opart_large.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-4039687708182458595</id><published>2008-03-05T19:51:00.004-07:00</published><updated>2008-03-05T20:02:31.720-07:00</updated><title type='text'>Time Zero Months query and other hints</title><content type='html'>To get a type curve you have to adjust to time zero, or sequential month.  Easy to do.  First make a table that has the min month for each well in your production table.  Perhaps something like this:&lt;br /&gt;&lt;br /&gt;SELECT HPDI_PROD.ENTITY_ID, Min(HPDI_PROD.PROD_DATE) AS MinOfPROD_DATE INTO MinMax&lt;br /&gt;FROM HPDI_PROD&lt;br /&gt;GROUP BY HPDI_PROD.ENTITY_ID;&lt;br /&gt;&lt;br /&gt;Then add a column to your production table to hold the new data you are about to create, and do a little date math:&lt;br /&gt;&lt;br /&gt;UPDATE HPDI_PROD&lt;br /&gt;INNER JOIN MinMax ON HPDI_PROD.ENTITY_ID = MinMax.ENTITY_ID&lt;br /&gt;SET HPDI_PROD.SeqDate = DateDiff("m",[MinOfprod_date],[Prod_Date])+1;&lt;br /&gt;&lt;br /&gt;Now you can do type curves as cross tab queries (grouping on whatever, in this case I did operator, you might do formation or township or ... )&lt;br /&gt;&lt;br /&gt;TRANSFORM Avg([Liq]+[GAS]/6) AS BOE&lt;br /&gt;SELECT Operator FROM HPDI_PROD&lt;br /&gt;INNER JOIN HPDI_DESC ON HPDI_PROD.ENTITY_ID = HPDI_DESC.ENTITY_ID&lt;br /&gt;GROUP BY Operator&lt;br /&gt;PIVOT HPDI_PROD.SeqDate;&lt;br /&gt;&lt;br /&gt;Or you can get the first year of production for each well:&lt;br /&gt;&lt;br /&gt;SELECT HPDI_PROD.ENTITY_ID, Sum(HPDI_PROD.LIQ) AS CumOil, Sum(HPDI_PROD.GAS) AS CumGas, Sum(HPDI_PROD.WTR) AS CumWtrFROM HPDI_PROD INNER JOIN MinMax ON HPDI_PROD.ENTITY_ID = MinMax.ENTITY_ID&lt;br /&gt;WHERE (((HPDI_PROD.SeqDate)&lt;=12) AND ((MinMax.MaxOfSeqDate)&gt;=12))&lt;br /&gt;GROUP BY HPDI_PROD.ENTITY_ID;&lt;br /&gt;&lt;br /&gt;And while I'm at it, here's how you add dashes to an API number:&lt;br /&gt;&lt;br /&gt;UPDATE [Table] SET [API Number] = &lt;br /&gt;Left([API Number],2) &amp; "-" &amp; &lt;br /&gt;Mid([API Number],3,3) &amp; "-" &amp; &lt;br /&gt;Mid([API Number],6,5) &amp; "-" &amp; &lt;br /&gt;Right([API Number],2);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;May your curves never decline,&lt;br /&gt;&lt;br /&gt;Karen&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-4039687708182458595?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/4039687708182458595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=4039687708182458595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4039687708182458595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/4039687708182458595'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/03/time-zero-months-query-and-other-hints.html' title='Time Zero Months query and other hints'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6752310554595788204</id><published>2008-03-03T07:28:00.001-07:00</published><updated>2008-03-03T07:31:04.995-07:00</updated><title type='text'>practical xml</title><content type='html'>here is the xml worksheet that we had at the lunch and learn. click and make it bigger.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_RL5DIi9WST8/R8wLYoxu_AI/AAAAAAAAABE/wGKvIFsiu48/s1600-h/practicalxml.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5173522589832641538" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_RL5DIi9WST8/R8wLYoxu_AI/AAAAAAAAABE/wGKvIFsiu48/s400/practicalxml.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6752310554595788204?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6752310554595788204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6752310554595788204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6752310554595788204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6752310554595788204'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/03/practical-xml.html' title='practical xml'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RL5DIi9WST8/R8wLYoxu_AI/AAAAAAAAABE/wGKvIFsiu48/s72-c/practicalxml.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2817081006105445811</id><published>2008-03-03T07:26:00.002-07:00</published><updated>2008-03-03T07:28:17.504-07:00</updated><title type='text'>this is what happens ...</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_RL5DIi9WST8/R8wK9oxu-_I/AAAAAAAAAA8/R-LfvUvhzMo/s1600-h/20080225047.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5173522125976173554" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_RL5DIi9WST8/R8wK9oxu-_I/AAAAAAAAAA8/R-LfvUvhzMo/s400/20080225047.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;when you have 4 developers and 4 cyclists in the same room. we all group together.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2817081006105445811?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2817081006105445811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2817081006105445811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2817081006105445811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2817081006105445811'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/03/this-is-what-happens.html' title='this is what happens ...'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RL5DIi9WST8/R8wK9oxu-_I/AAAAAAAAAA8/R-LfvUvhzMo/s72-c/20080225047.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-3983915558583202741</id><published>2008-02-29T20:16:00.003-07:00</published><updated>2008-02-29T20:27:12.995-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='MS Access 2003'/><category scheme='http://www.blogger.com/atom/ns#' term='Page Break'/><title type='text'>Conditional page break in Access 2003 / VBA report</title><content type='html'>Here's a link to MS's website that explains how to create a conditional page break in an Access report:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://office.microsoft.com/en-us/access/HP051873361033.aspx"&gt;http://office.microsoft.com/en-us/access/HP051873361033.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Basically, you insert the page break into your report (using the page break tool), create a VB OnFormat event handler for the Page Header section, and in the event handler set the page break control's Visible property to False to hide the page break. Then in the format event handler for the report section that contains the break, set the control's property to true if the condition is met. Intellisense will not find the Visible property on the page break control, but it still works.  Thanks Phil.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-3983915558583202741?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/3983915558583202741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=3983915558583202741' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3983915558583202741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/3983915558583202741'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/02/conditional-page-break-in-access-2003.html' title='Conditional page break in Access 2003 / VBA report'/><author><name>Tom Demask</name><uri>http://www.blogger.com/profile/15287252622852090275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6614564406500631867</id><published>2008-02-25T09:25:00.001-07:00</published><updated>2008-02-25T09:26:56.413-07:00</updated><title type='text'>good excel blog</title><content type='html'>hey world! this blog rocks if you are a vba programmer or a vba not porgrammer &lt;a href="http://smurfonspreadsheets.wordpress.com/"&gt;http://smurfonspreadsheets.wordpress.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;i'd highly recommend putting it on your blog role.&lt;br /&gt;&lt;br /&gt;over and out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6614564406500631867?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6614564406500631867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6614564406500631867' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6614564406500631867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6614564406500631867'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/02/good-excel-blog.html' title='good excel blog'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-1434191288671358978</id><published>2008-02-04T15:46:00.000-07:00</published><updated>2008-02-04T15:52:09.349-07:00</updated><title type='text'>stuff into PDF</title><content type='html'>ever want to send someone a PDF instead of a word document? or excel? or whatever ...&lt;br /&gt;&lt;br /&gt;well adobe pro is pretty spendy. if you're not the type to spend a lot of money - i've got an alternative for you! that's only $20!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.docudesk.com/"&gt;http://www.docudesk.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;They have a free trial too that runs so you can make sure that everything runs ok. But you can believe me - it does!&lt;br /&gt;&lt;br /&gt;It asks you to install a GNU post script writer - which is just like asking your computer to learn how something new is encoded - so make sure you install that or else it won't work - but the standard edition is only $20 and i would say that since this is less than a bottle of vodka - it's a good buy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-1434191288671358978?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/1434191288671358978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=1434191288671358978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1434191288671358978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/1434191288671358978'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/02/stuff-into-pdf.html' title='stuff into PDF'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-463341125761622139</id><published>2008-01-27T20:23:00.000-07:00</published><updated>2008-01-27T20:52:12.135-07:00</updated><title type='text'>Units of Measure in MSAccess</title><content type='html'>Ever wonder what units VBA uses for the MSAccess 'Left' and 'Width' properties by default? Turns out they are 'TWIPs'.  Stands for 'TWentieth of an Inch Point'  There are 1440 of them in an inch, if you use the PostScript standard 72 points/inch (which Access obviously does).  So if you want your control to be an inch wide and centered on your 8-inch-wide report, set its 'Left' property to 5040 and its 'Width' property to 1440.  If you're doing this in code, you can leave the units off (Access/VBA assumes TWIPS).  If you're typing the values into the properties dialog, you have to include the text 'twips' after the number.  Access then auto-converts the value to inches and replaces 'twips' with a double quote.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-463341125761622139?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/463341125761622139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=463341125761622139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/463341125761622139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/463341125761622139'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/01/units-of-measure-in-msaccess.html' title='Units of Measure in MSAccess'/><author><name>Phil Hickey</name><uri>http://www.blogger.com/profile/08390463731902345816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-5668253672452902674</id><published>2008-01-22T17:03:00.001-07:00</published><updated>2008-01-22T17:05:07.254-07:00</updated><title type='text'>API codes</title><content type='html'>Hey I found a site with state and county api codes!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.spwla.org/library_info/api_codes/APICountyCodes.htm"&gt;http://www.spwla.org/library_info/api_codes/APICountyCodes.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Very handy once in awhile.&lt;br /&gt;&lt;br /&gt;-k&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-5668253672452902674?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/5668253672452902674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=5668253672452902674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5668253672452902674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/5668253672452902674'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2008/01/api-codes.html' title='API codes'/><author><name>Karen S</name><uri>http://www.blogger.com/profile/15516536014523096627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2707330156441664221</id><published>2007-12-21T15:19:00.000-07:00</published><updated>2007-12-21T15:22:30.300-07:00</updated><title type='text'>Web Design 101</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_RL5DIi9WST8/R2w8oPMW_GI/AAAAAAAAAA0/2qmRxDxpFFg/s1600-h/Untitled.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5146555136148438114" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_RL5DIi9WST8/R2w8oPMW_GI/AAAAAAAAAA0/2qmRxDxpFFg/s400/Untitled.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Two things that you should do to a website that has a username/login for it.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;1) Make sure you tell your user if they input their password wrong&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;2) Always allow for password retreival ... NOT LIKE THE ORACLE SITE!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2707330156441664221?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2707330156441664221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2707330156441664221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2707330156441664221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2707330156441664221'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2007/12/web-design-101.html' title='Web Design 101'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_RL5DIi9WST8/R2w8oPMW_GI/AAAAAAAAAA0/2qmRxDxpFFg/s72-c/Untitled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-2549335900024919068</id><published>2007-12-19T22:50:00.000-07:00</published><updated>2007-12-19T22:54:10.914-07:00</updated><title type='text'>oracle vs sql</title><content type='html'>so a common debate we have in our office is what is better - oracle or sql. well for different situations, either is *perfect*.&lt;br /&gt;&lt;br /&gt;generally speaking too, oracle's pl/sql is super similar to sql server's tsql.&lt;br /&gt;&lt;br /&gt;well, us who write sql in our sleep know about the @@ inserted command which you would use as so:&lt;br /&gt;INSERT INTO mytable(val1, val2, val3)&lt;br /&gt;SELECT '1','2','3'&lt;br /&gt;SELECT @@INSERTED&lt;br /&gt;&lt;br /&gt;that will return the row that you just inserted&lt;br /&gt;&lt;br /&gt;but in oracle it's not exactly like that. a while ago, Will told me about this "dual" table, which is pretty spiffy and useful in this case to do what sql does.&lt;br /&gt;so oracle would go like this:&lt;br /&gt;&lt;br /&gt;INSERT INTO mytable(val1, val2, val3)&lt;br /&gt;SELECT '1','2','3';&lt;br /&gt;select ds.mytable_seq.currval&lt;br /&gt;from dual;&lt;br /&gt;commit;&lt;br /&gt;&lt;br /&gt;so you can run that all in one transaction and it gives you the ID of whatever you just inserted. pretty cool no?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-2549335900024919068?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/2549335900024919068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=2549335900024919068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2549335900024919068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/2549335900024919068'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2007/12/oracle-vs-sql.html' title='oracle vs sql'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-121856092844548695.post-6426278052679056168</id><published>2007-12-14T14:20:00.001-07:00</published><updated>2007-12-14T14:22:59.376-07:00</updated><title type='text'>things to remember!</title><content type='html'>let's say you get SUPER lazy and just don't delete a lot of test and development databases for a while...&lt;br /&gt;&lt;br /&gt;no problem!&lt;br /&gt;&lt;br /&gt;after you decide to clean up,make sure to detach each database, toss it on a dvd or something and save it just incase you need it.&lt;br /&gt;&lt;br /&gt;something you also NEED to do is make sure that any users associated with that database are inactive or now have a home with a different default database. if you don't - you'll get all sorts of nasty error messages!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/121856092844548695-6426278052679056168?l=wofda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wofda.blogspot.com/feeds/6426278052679056168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=121856092844548695&amp;postID=6426278052679056168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6426278052679056168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/121856092844548695/posts/default/6426278052679056168'/><link rel='alternate' type='text/html' href='http://wofda.blogspot.com/2007/12/things-to-remember.html' title='things to remember!'/><author><name>rmullen</name><uri>http://www.blogger.com/profile/10613753110738706498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
