<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programmieren</title>
	<atom:link href="http://www.ulrich-huhn.de/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ulrich-huhn.de/coding</link>
	<description>Der Uli programmiert und so...</description>
	<lastBuildDate>Sat, 28 Apr 2012 08:50:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Wei&#223;e Farbe und leere Farbe</title>
		<link>http://www.ulrich-huhn.de/coding/weie-farbe-und-leere-farbe/</link>
		<comments>http://www.ulrich-huhn.de/coding/weie-farbe-und-leere-farbe/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 15:34:00 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Dot Net]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=184</guid>
		<description><![CDATA[Ein Control hat natürlich standardmäßig eine Vorder- und Hintergrundfarbe. Nun komme man aber nicht auf die Idee, dass z. B. eine weiße Farbe auch wirklich “weiß” ist. Es kann durchaus vorkommen, dass die Farbe eines Controls auf dem Bildschirm offensichtlich &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/weie-farbe-und-leere-farbe/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ein Control hat natürlich standardmäßig eine Vorder- und Hintergrundfarbe. Nun komme man aber nicht auf die Idee, dass z. B. eine weiße Farbe auch wirklich “weiß” ist.</p>
<p style="text-align: justify;">Es kann durchaus vorkommen, dass die Farbe eines Controls auf dem Bildschirm offensichtlich weiß ist, ein Test auf Color.White() ergibt allerdings <strong>nicht</strong> True.</p>
<p style="text-align: justify;">Falls das vorkommen sollte und man minutenlang an seinem Verstand zweifelt, sollte man die Farben entweder vorher explizit setzen oder aber man testet mal spaßeshalber auf Color.Empty().</p>
<p style="text-align: justify;">Einfach ausgedrückt: Color.Empty() ist die Standard”farbe” solange nicht explizit etwas anderes gesetzt wird. Hurra, das ist ja mal ein Ding, wo jemand wirklich mitgedacht hat, oder!??</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/weie-farbe-und-leere-farbe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datenbank migrieren</title>
		<link>http://www.ulrich-huhn.de/coding/datenbank-migrieren/</link>
		<comments>http://www.ulrich-huhn.de/coding/datenbank-migrieren/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 17:27:40 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Datenbank]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=145</guid>
		<description><![CDATA[Eine Datenbank von SQL Server 2000 auf SQL Server 20XX zu portieren stellt manchmal ein Problem dar. Soll man das mit dem DTS Wizard für Daten Im-/Export machen? Ich persönlich hänge die Datenbank auf dem alten Server ab und hänge &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/datenbank-migrieren/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Eine Datenbank von SQL Server 2000 auf SQL Server 20XX zu portieren stellt manchmal ein Problem dar.<br />
Soll man das mit dem DTS Wizard für Daten Im-/Export machen?<br />
Ich persönlich hänge die Datenbank auf dem alten Server ab und hänge sie in den neuen Server ein.<br />
Meistens geht das ohne größere Probleme.</p>
<p style="text-align: justify;">Zunächst muss sichergestellt sein, dass niemand mehr auf die Datenbank zugreift. Im Query Analyzer gibt man diese Befehle ein:</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="mysql"><pre class="de1"><span class="kw1">use</span> master
sp_detach_db <span class="st0">'datenbank'</span><span class="sy2">,</span> <span class="st0">'true'</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">use master
sp_detach_db 'datenbank', 'true'</pre></div></div>

<p style="text-align: justify;">Die Datenbank ist damit abgehängt und ist auf dem alten Server nicht mehr verfügbar. Danach kann man die zugrundeliegenden Dateien (&#8220;.MDF&#8221; und &#8220;.LDF&#8221;, siehe Codezeile unten) aus dem Daten-Verzeichnis des alten Servers in das Daten-Verzeichnis des neuen Servers kopieren.</p>
<p style="text-align: justify;">Der nächste Befehl (eingegeben im Query Analyzer der neuen Servers) hängt die Datenbankdateien auf dem neuen Server wieder ein:</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="mysql"><pre class="de1">sp_attach_db <span class="st0">'datenbank'</span><span class="sy2">,</span> <span class="st0">'C:<span class="es0">\P</span>rogramme<span class="es0">\M</span>icrosoft SQL Server<span class="es0">\M</span>SSQL<span class="es0">\D</span>ata<span class="es0">\d</span>atenbank<span class="es1">_</span>Data.MDF'</span><span class="sy2">,</span> <span class="st0">'C:<span class="es0">\P</span>rogramme<span class="es0">\M</span>icrosoft SQL Server<span class="es0">\M</span>SSQL<span class="es0">\D</span>ata<span class="es0">\d</span>atenbank<span class="es1">_</span>Log.LDF'</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">sp_attach_db 'datenbank', 'C:\Programme\Microsoft SQL Server\MSSQL\Data\datenbank_Data.MDF', 'C:\Programme\Microsoft SQL Server\MSSQL\Data\datenbank_Log.LDF'</pre></div></div>

<p style="text-align: justify;">Der Speicherort muss natürlich exakt angegeben werden. Nach ein paar Sekunden (oder Minuten, je nach Größe der Datenbank) steht die Datenbank auf dem neuen Server wieder zur Verfügung.</p>
<p style="text-align: justify;">Beim Einhängen wird die Datenbank konvertiert. Meistens geht das gut. Manchmal auch nicht <img src='http://www.ulrich-huhn.de/coding/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Dann muss man manuell nacharbeiten. Alles in allem ist dies die einfachste und schnellste Möglichkeit, eine Datenbank von SQL Server 2000 zu migrieren, die ich so kenne.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/datenbank-migrieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ein einfacher Logger</title>
		<link>http://www.ulrich-huhn.de/coding/ein-einfacher-logger/</link>
		<comments>http://www.ulrich-huhn.de/coding/ein-einfacher-logger/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 16:42:15 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[VB6]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=170</guid>
		<description><![CDATA[Ein einfacher Logger, dem man den zu loggenden String übergibt. Alles andere macht er selbst (Datum, Uhrzeit anhängen). Alternativ kann dem Logger auch der Dateiname übergeben werden, in welche Datei er das loggen soll. ' Ein Verweis auf &#34;Microsoft Scripting &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/ein-einfacher-logger/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ein einfacher Logger, dem man den zu loggenden String übergibt. Alles andere macht er selbst (Datum, Uhrzeit anhängen).<br />
Alternativ kann dem Logger auch der Dateiname übergeben werden, in welche Datei er das loggen soll.</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="vb"><pre class="de1"><span class="co1">' Ein Verweis auf &quot;Microsoft Scripting Runtime&quot; muss gesetzt werden!
</span>
<span class="kw2">Private</span> <span class="kw2">Sub</span> Log2(<span class="kw4">ByVal</span> iMeldung <span class="kw4">As</span> <span class="kw1">String</span>, <span class="kw4">Optional</span> <span class="kw4">ByVal</span> iDateiname <span class="kw4">As</span> <span class="kw1">String</span> = <span class="st0">&quot;log.log&quot;</span>)
<span class="kw4">Dim</span> FSO <span class="kw4">As</span> FileSystemObject
<span class="kw4">Dim</span> TS <span class="kw4">As</span> TextStream
&nbsp;
<span class="kw4">Set</span> FSO = <span class="kw2">New</span> FileSystemObject
<span class="kw3">If</span> <span class="kw3">Not</span> FSO.FileExists(iDateiname) <span class="kw3">Then</span> FSO.CreateTextFile iDateiname, <span class="kw5">False</span>
<span class="kw4">Set</span> TS = FSO.OpenTextFile(iDateiname, ForAppending)
TS.WriteLine CStr(Now) &amp; <span class="st0">&quot;: &quot;</span> &amp; iMeldung
TS.<span class="kw3">Close</span>
<span class="kw4">Set</span> FSO = <span class="kw5">Nothing</span>
&nbsp;
<span class="kw3">End</span> <span class="kw2">Sub</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">' Ein Verweis auf "Microsoft Scripting Runtime" muss gesetzt werden!

Private Sub Log2(ByVal iMeldung As String, Optional ByVal iDateiname As String = "log.log")
Dim FSO As FileSystemObject
Dim TS As TextStream

Set FSO = New FileSystemObject
If Not FSO.FileExists(iDateiname) Then FSO.CreateTextFile iDateiname, False
Set TS = FSO.OpenTextFile(iDateiname, ForAppending)
TS.WriteLine CStr(Now) &amp; ": " &amp; iMeldung
TS.Close
Set FSO = Nothing

End Sub</pre></div></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/ein-einfacher-logger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formel in VB 6 evaluieren</title>
		<link>http://www.ulrich-huhn.de/coding/formel-in-vb-6-evaluieren/</link>
		<comments>http://www.ulrich-huhn.de/coding/formel-in-vb-6-evaluieren/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 17:56:56 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[VB6]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=163</guid>
		<description><![CDATA[Manchmal kommt man in die Not, einen frei eingebbaren mathematischen Ausdruck auswerten zu müssen. Besonders bei der berühmten Taschenrechner-Applikation, die jeder einmal irgendwann in seinem Leben schreiben muss, lohnt es nicht, einen eigenen Parser dafür zu schreiben. Visual Basic bietet &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/formel-in-vb-6-evaluieren/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Manchmal kommt man in die Not, einen frei eingebbaren mathematischen Ausdruck auswerten zu müssen.<br />
Besonders bei der berühmten Taschenrechner-Applikation, die jeder einmal irgendwann in seinem Leben schreiben muss, lohnt es nicht, einen eigenen Parser dafür zu schreiben.<br />
Visual Basic bietet eine einfache Möglichkeit, das zu bewerkstelligen. Das &#8220;Script Control&#8221; erledigt alles.<br />
Hier ein Taschenrechner in seiner simpelsten Form:</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"style=" height: 252px;"><div class="vb"><pre class="de1"><span class="kw2">Public</span> <span class="kw2">Function</span> Eval(<span class="kw4">ByVal</span> iFormel <span class="kw4">As</span> <span class="kw1">String</span>) <span class="kw4">As</span> <span class="kw1">Double</span>
<span class="kw4">Dim</span> sc <span class="kw4">As</span> ScriptControl
&nbsp;
<span class="kw4">On</span> <span class="kw4">Error</span> <span class="kw3">GoTo</span> MyFehler
&nbsp;
<span class="kw4">Set</span> sc = <span class="kw2">New</span> ScriptControl
sc.Language = <span class="st0">&quot;vbscript&quot;</span>
Eval = sc.Eval(iFormel)
<span class="kw2">Exit</span> <span class="kw2">Function</span>
&nbsp;
MyFehler:
MsgBox <span class="st0">&quot;Formel '&quot;</span> &amp; iFormel &amp; <span class="st0">&quot;' kann nicht evaluiert werden!&quot;</span> &amp; vbCrLf &amp; <span class="st0">&quot;Fehler: &quot;</span> &amp; Err.Description
<span class="kw2">Exit</span> <span class="kw2">Function</span>
&nbsp;
<span class="kw3">End</span> <span class="kw2">Function</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">Public Function Eval(ByVal iFormel As String) As Double
Dim sc As ScriptControl

On Error GoTo MyFehler

Set sc = New ScriptControl
sc.Language = "vbscript"
Eval = sc.Eval(iFormel)
Exit Function

MyFehler:
MsgBox "Formel '" &amp; iFormel &amp; "' kann nicht evaluiert werden!" &amp; vbCrLf &amp; "Fehler: " &amp; Err.Description
Exit Function

End Function</pre></div></div>

<p style="text-align: justify;">Der Aufruf ist ebenso simpel:</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="vb"><pre class="de1">Ergebnis = Eval(3*4+20/5) ' Ergebnis = 16</pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">Ergebnis = Eval(3*4+20/5) ' Ergebnis = 16</pre></div></div>

<p style="text-align: justify;">Wie man erkennen kann, werden selbstverständlich mathematische Rechenregeln beachtet.</p>
<p style="text-align: justify;">Wichtig: Unter Verweise muss im zugrundeliegenden Visual Basic Projekt ein Verweis auf &#8220;Microsoft Script Control x.x&#8221; gesetzt werden!</p>
<p style="text-align: justify;">Natürlich steht es jedem frei, auch einen umfangreichen Parser zu schreiben, der den Ausdruck zerlegt und dann auswertet. Aber die oben gezeigte Möglichkeit finde ich wesentlich effektiver.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/formel-in-vb-6-evaluieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zahlen ins 35er System wandeln</title>
		<link>http://www.ulrich-huhn.de/coding/zahlen-ins-35er-system-wandeln/</link>
		<comments>http://www.ulrich-huhn.de/coding/zahlen-ins-35er-system-wandeln/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 19:11:42 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[VB6]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=167</guid>
		<description><![CDATA[Recht sinnfrei, aber wer&#8217;s mal haben möchte: Zahlen wandeln in ein beliebiges Zahlensystem unter VB6. Naja, beliebig ist relativ. Die hier aufgeführte Version macht&#8217;s bis zum 35er-System (und bedient sich dabei der restlichen Buchstaben bis &#8220;Z&#8221; nach dem 16er-System mit &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/zahlen-ins-35er-system-wandeln/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Recht sinnfrei, aber wer&#8217;s mal haben möchte: Zahlen wandeln in ein beliebiges Zahlensystem unter VB6.<br />
Naja, beliebig ist relativ. Die hier aufgeführte Version macht&#8217;s bis zum 35er-System (und bedient sich dabei der restlichen Buchstaben bis &#8220;Z&#8221; nach dem 16er-System mit &#8220;F&#8221;).</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"style=" height: 252px;"><div class="vb"><pre class="de1"><span class="kw2">Private</span> <span class="kw2">Function</span> lfWandler(<span class="kw4">ByVal</span> iZahl <span class="kw4">As</span> <span class="kw1">Long</span>, <span class="kw4">ByVal</span> iBasis <span class="kw4">As</span> <span class="kw1">Long</span>) <span class="kw4">As</span> <span class="kw1">String</span>
<span class="kw4">Dim</span> lvZahlen <span class="kw4">As</span> <span class="kw1">String</span>
<span class="kw4">Dim</span> lvErgebnis <span class="kw4">As</span> <span class="kw1">String</span>
<span class="kw4">Dim</span> lvRest <span class="kw4">As</span> <span class="kw1">Long</span>
&nbsp;
<span class="kw3">If</span> iZahl = 0 <span class="kw3">Then</span> lfWandler = <span class="st0">&quot;0&quot;</span>: <span class="kw2">Exit</span> <span class="kw2">Function</span>
<span class="kw3">If</span> iBasis = 1 <span class="kw3">Then</span> lfWandler = iZahl: <span class="kw2">Exit</span> <span class="kw2">Function</span>
&nbsp;
lvZahlen = <span class="st0">&quot;0123456789ABCDEFGHIJKLMNOPQRSTUVXYZ&quot;</span>
&nbsp;
lvRest = iZahl
<span class="kw3">While</span> <span class="kw3">Not</span> (lvRest = 0)
lvErgebnis = Mid(lvZahlen, lvRest <span class="kw4">Mod</span> iBasis + 1, 1) &amp; lvErgebnis
lvRest = iZahl \ iBasis
iZahl = lvRest
Wend
&nbsp;
lfWandler = lvErgebnis
&nbsp;
<span class="kw3">End</span> <span class="kw2">Function</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">Private Function lfWandler(ByVal iZahl As Long, ByVal iBasis As Long) As String
Dim lvZahlen As String
Dim lvErgebnis As String
Dim lvRest As Long

If iZahl = 0 Then lfWandler = "0": Exit Function
If iBasis = 1 Then lfWandler = iZahl: Exit Function

lvZahlen = "0123456789ABCDEFGHIJKLMNOPQRSTUVXYZ"

lvRest = iZahl
While Not (lvRest = 0)
lvErgebnis = Mid(lvZahlen, lvRest Mod iBasis + 1, 1) &amp; lvErgebnis
lvRest = iZahl \ iBasis
iZahl = lvRest
Wend

lfWandler = lvErgebnis

End Function</pre></div></div>

<p><span style="text-align: justify;">Ich glaube, das war eine der ersten Routinen, die ich je geschrieben habe. Damals noch im BASIC des VC-20 <img src='http://www.ulrich-huhn.de/coding/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
<p style="text-align: justify;">Natürlich kann man den lvZahlen-String noch beliebig erweitern. Wenigstens solange man unterschiedliche ASCII-Zeichen zur Vverfügung hat&#8230;<br />
Eine tolle Erweiterung wäre die Bearbeitung von negativen Zahlen und &#8220;krummen&#8221; Basen. Viel Erfolg <img src='http://www.ulrich-huhn.de/coding/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/zahlen-ins-35er-system-wandeln/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laufen wir in der IDE?</title>
		<link>http://www.ulrich-huhn.de/coding/laufen-wir-in-der-ide/</link>
		<comments>http://www.ulrich-huhn.de/coding/laufen-wir-in-der-ide/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 17:35:32 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Dot Net]]></category>
		<category><![CDATA[Einzeiler]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=141</guid>
		<description><![CDATA[Unter .NET kann man prüfen, ob das hier wahr ist: System.Diagnostics.Debugger.IsAttached System.Diagnostics.Debugger.IsAttached Falls ja, befinden wir uns in der IDE. Ansonsten sind wir ein Kompilat (nein, kein Kombinat, das war etwas anderes…)]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Unter .NET kann man prüfen, ob das hier wahr ist:</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="mysql"><pre class="de1">System.Diagnostics.Debugger.IsAttached</pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">System.Diagnostics.Debugger.IsAttached</pre></div></div>

<p style="text-align: justify;">Falls ja, befinden wir uns in der IDE. Ansonsten sind wir ein Kompilat (nein, kein Kombinat, das war etwas anderes…)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/laufen-wir-in-der-ide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doppelten Eintrag in Datenbank löschen</title>
		<link>http://www.ulrich-huhn.de/coding/doppelten-eintrag-in-datenbank-loschen/</link>
		<comments>http://www.ulrich-huhn.de/coding/doppelten-eintrag-in-datenbank-loschen/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 06:47:00 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Datenbank]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=137</guid>
		<description><![CDATA[Natürlich lohnt es nicht, einen Blogeintrag über das Löschen von Datensätzen in einer Datenbank zu schreiben. Es sei denn, der Dorftrottel hat die Tabelle entworfen&#8230; Dann kann es nämlich durchaus vorkommen ist es meistens so, dass in der Tabelle kein &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/doppelten-eintrag-in-datenbank-loschen/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Natürlich lohnt es nicht, einen Blogeintrag über das Löschen von Datensätzen in einer Datenbank zu schreiben. Es sei denn, der Dorftrottel hat die Tabelle entworfen&#8230; Dann <del>kann es nämlich durchaus vorkommen</del> ist es meistens so, dass in der Tabelle kein Index und keine Art von Schlüssel vorkommt. Natürlich wird bei der Dateneingabe auch nie geprüft, ob ein entsprechender Eintrag vielleicht schon vorhanden ist. Es kommt dann wie es kommen muss: Irgendwann fallen doppelte (in allen Feldwerten gleichlautende) Datensätze an. Und dann ist es nicht mehr weit, bis jemand schreit, dass ein Datensatz oder n Einträge gelöscht werden müssen.</p>
<p style="text-align: justify;">Wie löscht man nun gleiche Einträge, wenn sich die Datensätze nicht unterscheiden? Mit SQL geht&#8217;s nicht, da man keine Einschränkung zur Auswahl eines Datensatzes findet. Mit dem Management-Studio geht&#8217;s auch nicht, es meckert, dass eventuell alle Datensätze betroffen sind. Also einfach alle Datensätze wegpölen und neu eingeben?</p>
<p style="text-align: justify;">Mit SQL geht&#8217;s aber doch, wenigstens seit SQL Server 2005. Dort kann man in der DELETE Anweisung (wie auch in der UPDATE Anweisung) ein TOP ROW angeben. Um den ersten eines doppelten Eintrags zu löschen, reicht es</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="mysql"><pre class="de1"><span class="kw1">DELETE</span> TOP <span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> tabelle <span class="kw1">WHERE</span> feld <span class="sy1">=</span> xyz</pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">DELETE TOP (1) FROM tabelle WHERE feld = xyz</pre></div></div>

<p style="text-align: justify;">zu schreiben. Es wird dann tatsächlich der erste (bzw. beliebige) Eintrag eines doppelten (drei-, vier-, n-fachen)  Eintrags gelöscht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/doppelten-eintrag-in-datenbank-loschen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Men&#252;struktur durchlaufen in VB.NET</title>
		<link>http://www.ulrich-huhn.de/coding/menustruktur-durchlaufen/</link>
		<comments>http://www.ulrich-huhn.de/coding/menustruktur-durchlaufen/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 19:15:25 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Dot Net]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=125</guid>
		<description><![CDATA[Daran bin ich fast schon einmal verzweifelt. Ein Menü zu durchlaufen ist in meinen Augen schwieriger als man zunächst denkt. “Ganz oben” gibt es den/das MenuStrip. Das ist die oberste Hierarchie (optisch kann man sich das MenuStrip als “das erste &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/menustruktur-durchlaufen/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;" align="justify">Daran bin ich fast schon einmal verzweifelt. Ein Menü zu durchlaufen ist in meinen Augen schwieriger als man zunächst denkt.<br />
“Ganz oben” gibt es den/das MenuStrip. Das ist die oberste Hierarchie (optisch kann man sich das MenuStrip als “das erste Menü unterhalb der Titelleiste” denken). Alles andere sind DropdownItems (bzw. ToolStripMenuItems), die am MenuStrip hängen. So viel zum theoretischen  Unterbau. Wer mehr darüber erfahren möchte, kann googlen.</p>
<p style="text-align: justify;">Da eine Menüstruktur verschachtelt sein kann, müssen auch alle Unterknoten durchlaufen werden. Es bietet sich an, dafür eine Rekursion zu verwenden. (Das war übrigens eine der ganz wenigen Stellen in meinem Leben, an denen ich spontan gedacht habe: <strong>das</strong> eignet sich supergut für eine Rekursion.)</p>
<p style="text-align: justify;">Einen Haken hat die Sache noch: bei Separatoren (horizontale Trennlinien im Menü) fällt der Cast des DropDownItems in ein ToolStripMenuItem auf die Nase.  Deswegen muss das vorher noch abgefragt werden.</p>
<p style="text-align: justify;">(Ziel der Übung war es übrigens, den Tooltip jedes einzelnen Menüeintrags zu leeren. Das MenuStrip bringt eine eigene ToolTip-Verwaltung mit sich. Daher funktioniert es nicht, einfach das formulargebundene ToolTip-Control zu deaktivieren, da die Tooltips der Menüs nicht daran hängen.)</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="vb"><pre class="de1"><span class="kw2">Private</span> <span class="kw2">Sub</span> LoescheToolTips()
&nbsp; <span class="kw3">For</span> i <span class="kw4">As</span> <span class="kw1">Integer</span> = 0 <span class="kw3">To</span> MenuStrip1.Items.Count - 1
&nbsp; &nbsp; Unterknoten(MenuStrip1.Items(i))
&nbsp; <span class="kw3">Next</span>
<span class="kw3">End</span> <span class="kw2">Sub</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">Private Sub LoescheToolTips()
  For i As Integer = 0 To MenuStrip1.Items.Count - 1
    Unterknoten(MenuStrip1.Items(i))
  Next
End Sub</pre></div></div>


<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="vb"><pre class="de1"><span class="kw2">Private</span> <span class="kw2">Sub</span> Unterknoten(<span class="kw4">ByVal</span> Tsmi <span class="kw4">As</span> ToolStripMenuItem)
<span class="kw3">For</span> j <span class="kw4">As</span> <span class="kw1">Integer</span> = 0 <span class="kw3">To</span> Tsmi.DropDownItems.Count – 1
&nbsp; &nbsp; Tsmi.DropDownItems(j).ToolTipText = <span class="st0">&quot;&quot;</span> ‘ Hier kann man den Menüpunkt verwursten.
&nbsp; &nbsp; &nbsp; <span class="kw3">If</span> Tsmi.DropDownItems(j).IsOnDropDown <span class="kw3">Then</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">If</span> <span class="kw3">Not</span> (<span class="kw4">TypeOf</span> Tsmi.DropDownItems(j) <span class="kw3">Is</span> System.Windows.Forms.ToolStripSeparator) <span class="kw3">Then</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Unterknoten(DirectCast(Tsmi.DropDownItems(j), ToolStripMenuItem))
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">End</span> <span class="kw3">If</span>
&nbsp; &nbsp; <span class="kw3">End</span> <span class="kw3">If</span>
&nbsp; <span class="kw3">Next</span>
<span class="kw3">End</span> <span class="kw2">Sub</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">Private Sub Unterknoten(ByVal Tsmi As ToolStripMenuItem)
For j As Integer = 0 To Tsmi.DropDownItems.Count – 1
    Tsmi.DropDownItems(j).ToolTipText = "" ‘ Hier kann man den Menüpunkt verwursten.
      If Tsmi.DropDownItems(j).IsOnDropDown Then
        If Not (TypeOf Tsmi.DropDownItems(j) Is System.Windows.Forms.ToolStripSeparator) Then
          Unterknoten(DirectCast(Tsmi.DropDownItems(j), ToolStripMenuItem))
        End If
    End If
  Next
End Sub</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/menustruktur-durchlaufen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Listview unter VB6</title>
		<link>http://www.ulrich-huhn.de/coding/listview-unter-vb6/</link>
		<comments>http://www.ulrich-huhn.de/coding/listview-unter-vb6/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 17:45:20 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[VB6]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=176</guid>
		<description><![CDATA[Weil ich immer wieder gerne vergesse, wie es mit diesem Listview unter VB6 funktioniert&#8230; Hier eine kleine Demo, die ein Listview aufbaut. Durch Klick auf einen Spaltenkopf wird nach der Spalte sortiert. Das war schon alles. ' Im Projekt müssen die &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/listview-unter-vb6/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Weil ich immer wieder gerne vergesse, wie es mit diesem Listview unter VB6 funktioniert&#8230;<br />
Hier eine kleine Demo, die ein Listview aufbaut. Durch Klick auf einen Spaltenkopf wird nach der Spalte sortiert.<br />
Das war schon alles.</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"style=" height: 252px;"><div class="vb"><pre class="de1"><span class="co1">' Im Projekt müssen die &quot;Microsoft Windows Common Controls 6.0&quot; hinzugefügt werden.
</span><span class="co1">' Es muss Version 6 sein! Version 5 erkennt &quot;MSComctlLib.ColumnHeader&quot; nicht.
</span>
<span class="co1">' Ein ListView1 muss der Form hinzugefügt werden.
</span>
<span class="kw2">Private</span> <span class="kw2">Sub</span> Form_Load()
<span class="kw4">Dim</span> lvI <span class="kw4">As</span> <span class="kw1">Long</span>
<span class="kw4">Dim</span> lvListitem <span class="kw4">As</span> ListItem
&nbsp;
ListView1.View = lvwReport
ListView1.HideColumnHeaders = <span class="kw5">False</span>
ListView1.ColumnHeaders.Add , <span class="st0">&quot;E1&quot;</span>, <span class="st0">&quot;Sp1&quot;</span>
ListView1.ColumnHeaders.Add , <span class="st0">&quot;E2&quot;</span>, <span class="st0">&quot;Test&quot;</span>
ListView1.ColumnHeaders.Add , <span class="st0">&quot;E3&quot;</span>, <span class="st0">&quot;Drei&quot;</span>
&nbsp;
<span class="kw3">For</span> lvI = 1 <span class="kw3">To</span> 10
<span class="kw4">Set</span> lvListitem = ListView1.ListItems.Add(, <span class="st0">&quot;E&quot;</span> &amp; lvI, lvI)
lvListitem.SubItems(1) = CStr(Int(Rnd * 100))
lvListitem.SubItems(2) = <span class="st0">&quot;Test&quot;</span>
<span class="kw3">Next</span> lvI
&nbsp;
<span class="kw3">End</span> <span class="kw2">Sub</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">' Im Projekt müssen die "Microsoft Windows Common Controls 6.0" hinzugefügt werden.
' Es muss Version 6 sein! Version 5 erkennt "MSComctlLib.ColumnHeader" nicht.

' Ein ListView1 muss der Form hinzugefügt werden.

Private Sub Form_Load()
Dim lvI As Long
Dim lvListitem As ListItem

ListView1.View = lvwReport
ListView1.HideColumnHeaders = False
ListView1.ColumnHeaders.Add , "E1", "Sp1"
ListView1.ColumnHeaders.Add , "E2", "Test"
ListView1.ColumnHeaders.Add , "E3", "Drei"

For lvI = 1 To 10
Set lvListitem = ListView1.ListItems.Add(, "E" &amp; lvI, lvI)
lvListitem.SubItems(1) = CStr(Int(Rnd * 100))
lvListitem.SubItems(2) = "Test"
Next lvI

End Sub</pre></div></div>


<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple bwp-syntax-no-lines"><div class="vb"><pre class="de1"><span class="kw2">Private</span> <span class="kw2">Sub</span> ListView1_ColumnClick(<span class="kw4">ByVal</span> ColumnHeader <span class="kw4">As</span> MSComctlLib.ColumnHeader)
&nbsp;
ListView1.SortKey = ColumnHeader.SubItemIndex
ListView1.Sorted = <span class="kw5">True</span>
&nbsp;
<span class="kw3">End</span> <span class="kw2">Sub</span></pre></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

ListView1.SortKey = ColumnHeader.SubItemIndex
ListView1.Sorted = True

End Sub</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/listview-unter-vb6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Todos und Do Nots</title>
		<link>http://www.ulrich-huhn.de/coding/todos-und-do-nots/</link>
		<comments>http://www.ulrich-huhn.de/coding/todos-und-do-nots/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 03:21:24 +0000</pubDate>
		<dc:creator>DerUli</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.ulrich-huhn.de/coding/?p=111</guid>
		<description><![CDATA[Die wichtigsten Tue und TueNicht für Programmierer in Kurzform: Programmiere nach Standards Akzeptiere, dass geschulte Leute, die mal wichtige Algorithmen entwickelt haben, Plan davon hatten. Erfinde den Quicksort nicht neu. Benutze den Standard. Kommentiere, aber nicht auf Teufel komm raus &#8230;<p class="read-more"><a href="http://www.ulrich-huhn.de/coding/todos-und-do-nots/">Weiterlesen &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Die wichtigsten Tue und TueNicht für Programmierer in Kurzform:</p>
<ul>
<li style="text-align: justify;">Programmiere nach Standards</li>
</ul>
<p style="padding-left: 30px; text-align: justify;">Akzeptiere, dass geschulte Leute, die mal wichtige Algorithmen entwickelt haben, Plan davon hatten. Erfinde den Quicksort nicht neu. <strong>Benutze den Standard</strong>.</p>
<ul style="text-align: justify;">
<li>Kommentiere, aber nicht auf Teufel komm raus</li>
</ul>
<p style="padding-left: 30px; text-align: justify;">Kommentare sind wichtig. Aber kommentiere keine Funktion, die &#8220;ErmittleKundenname&#8221; heißt mit  dem Kommentar &#8220;Ermittelt den Kundennamen&#8221;. Beschreibe, <strong>warum</strong> du den Kundennamen genau so ermittelst, wie du  es in dieser Routine tust.</p>
<ul>
<li style="text-align: justify;">Benutze eine Sourcecodeverwaltung</li>
</ul>
<p style="padding-left: 30px; text-align: justify;">Auch bei kleinen Programmen. Du kannst so immer wieder zu der Stelle zurückspringen, bevor du dich furchtbar verfranst hast. Du hast Überblick und Ordnung. <strong>Disziplin</strong> kann auch gut sein.</p>
<ul>
<li style="text-align: justify;">Baue ein Programm so, wie du es auch vorfinden wolltest, wenn es ein anderer programmiert hätte</li>
</ul>
<p style="padding-left: 30px; text-align: justify;">Schwierig, denn jeder Programmierer hat andere Vorstellungen vom programmieren. Deswegen: halte dich an <strong>Standards</strong>. Dann klappt&#8217;s auch mit dem Kollegen.</p>
<ul>
<li>Programmiere keine überflüssigen Dinge.</li>
</ul>
<p style="padding-left: 30px; text-align: justify;">Jedes Goodie, was du einbaust, damit der Kunde sieht, wie toll du bist, kommt <strong>irgendwann</strong> zu dir <strong>zurück</strong>. Entweder als Ding, was du ständig warten musst oder als überflüssigen Tand, den du wieder ausbauen musst. Wenn du unbedingt etwas &#8220;cooles&#8221; einbauen möchtest, sprich es mit dem Kunden vorher ab!</p>
<ul>
<li>Ach ja, denke immer an den Kunden.</li>
</ul>
<p style="padding-left: 30px;">Er ist der Geldgeber. Er zahlt deine Miete, dein Essen, deinen Lebensstandard. Der Kunde muss letzten Endes glücklich sein. Mache alles, damit er <strong>glücklich</strong> ist. <img src='http://www.ulrich-huhn.de/coding/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ulrich-huhn.de/coding/todos-und-do-nots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

