<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Freakfabrik Softwareschmiede - Das Blog</title>
    <link>http://blog.freakfabrik.net/</link>
    <description>newtelligence powered</description>
    <language>de-de</language>
    <copyright>Peter Becker (Floyd)</copyright>
    <lastBuildDate>Mon, 15 Jan 2007 15:18:54 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>floyd_3@gmx.net</managingEditor>
    <webMaster>floyd_3@gmx.net</webMaster>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=564deeae-7842-400c-872f-ba2093d0a69d</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=564deeae-7842-400c-872f-ba2093d0a69d</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=564deeae-7842-400c-872f-ba2093d0a69d</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=564deeae-7842-400c-872f-ba2093d0a69d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Fehlercode:<br />
    800a0e78<br /><br />
Fehlermeldung:<br /><br /><font color="#ff0000">    The operation requested by the application
is not allowed if the object is closed.<br />
    ADODB.Recordset Fehler "800a0e78' - Der Vorgang ist für ein geschlossenes
Objekt nicht zugelassen.</font><br /><br />
Ursache:<br /><br />
[code]sql = "Insert into #Tabelle [..]" &amp; vbcrlf &amp; _<br />
       "Select * from #Tabelle"<br />
db.execute(sql)[/code]<br /><br />
Das Problem ist das hier zwei Statements nacheinandere abgearbeitet werden womit ADODB
leider nicht so klar kommt wie man es erwarten würde. Genauer betrachtet macht ADODB
genau das was es soll. Es liefert 2 Recordsets zurück. Das erste behandelt den das
erste Statement was nach seiner Ausfühung ohne Rückgabe gleich wieder geschlossen
wurde.<br /><br />
Lösung:<br /><br />
    Ansatz 1: Man führt einfach beide Anweisungen sperat aus.<br />
    Ansatz 2: Ein "SET NOCOUNT ON" als erste Anweisung behebt ebenfalls
das Problem.<br />
       
<br /><br /><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=564deeae-7842-400c-872f-ba2093d0a69d" /></body>
      <title>Fehler: 800a0e78</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=564deeae-7842-400c-872f-ba2093d0a69d</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=564deeae-7842-400c-872f-ba2093d0a69d</link>
      <pubDate>Mon, 15 Jan 2007 15:18:54 GMT</pubDate>
      <description>Fehlercode:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 800a0e78&lt;br&gt;
&lt;br&gt;
Fehlermeldung:&lt;br&gt;
&lt;br&gt;
&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The operation requested by the application
is not allowed if the object is closed.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ADODB.Recordset Fehler "800a0e78' - Der Vorgang ist für ein geschlossenes
Objekt nicht zugelassen.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
Ursache:&lt;br&gt;
&lt;br&gt;
[code]sql = "Insert into #Tabelle [..]" &amp;amp; vbcrlf &amp;amp; _&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; "Select * from #Tabelle"&lt;br&gt;
db.execute(sql)[/code]&lt;br&gt;
&lt;br&gt;
Das Problem ist das hier zwei Statements nacheinandere abgearbeitet werden womit ADODB
leider nicht so klar kommt wie man es erwarten würde. Genauer betrachtet macht ADODB
genau das was es soll. Es liefert 2 Recordsets zurück. Das erste behandelt den das
erste Statement was nach seiner Ausfühung ohne Rückgabe gleich wieder geschlossen
wurde.&lt;br&gt;
&lt;br&gt;
Lösung:&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Ansatz 1: Man führt einfach beide Anweisungen sperat aus.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Ansatz 2: Ein "SET NOCOUNT ON" als erste Anweisung behebt ebenfalls
das Problem.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=564deeae-7842-400c-872f-ba2093d0a69d" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=564deeae-7842-400c-872f-ba2093d0a69d</comments>
      <category>Fehler und Lösungen</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=98d72a5b-cf4b-4c06-9381-5823b9590669</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=98d72a5b-cf4b-4c06-9381-5823b9590669</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=98d72a5b-cf4b-4c06-9381-5823b9590669</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=98d72a5b-cf4b-4c06-9381-5823b9590669</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Ein Freund von mir bat mich für ihn eine
Klasse zu schrieben mit der man MD5-Hash von Files erzeugen kann. Da er noch nicht
viel Erfahrung mit .Net hat willigte ich ein. Dabei stellte ich jedoch fest das es
viele verschiedene Ansätze gibt die jeweils unterschiedliche Resultate erzeugten.
Also erzeugte ich mit dem Tool <i>MD5sum.exe</i> ein paar Referenzwerte um meine Ergebnisse
zu vergleichen.<br /><br />
[code]<!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 \cf2 Imports\cf0  System.Security.Cryptography\par ??\cf2 Imports\cf0  System.Text\par ??\cf2 Imports\cf0  System.IO\par ??\par ??\cf2 Public\cf0  \cf2 Class\cf0  MD5FileHash\par ??    \cf2 Public\cf0  \cf2 Function\cf0  getMD5HashForFile(\cf2 ByVal\cf0  strFileName \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 String\par ??\cf0         \cf2 If\cf0  (\cf2 New\cf0  FileInfo(strFileName).Exists) \cf2 Then\par ??\cf0             \cf2 Dim\cf0  objSB \cf2 As\cf0  \cf2 New\cf0  StringBuilder\par ??            \cf2 Dim\cf0  objMD5 \cf2 As\cf0  \cf2 New\cf0  MD5CryptoServiceProvider\par ??            \cf2 Dim\cf0  objFS \cf2 As\cf0  \cf2 New\cf0  FileStream(strFileName, FileMode.Open)\par ??            \cf2 Dim\cf0  bHash() \cf2 As\cf0  \cf2 Byte\cf0  = objMD5.ComputeHash(objFS)\par ??            objFS.Close()\par ??            \cf2 For\cf0  \cf2 Each\cf0  bHex \cf2 As\cf0  \cf2 Byte\cf0  \cf2 In\cf0  bHash\par ??                objSB.Append(bHex.ToString(\cf13 "x2"\cf0 ))\par ??            \cf2 Next\par ??\cf0             \cf2 Return\cf0  objSB.ToString\par ??        \cf2 Else\par ??\cf0             \cf2 Throw\cf0  \cf2 New\cf0  FileNotFoundException(\cf13 "File "\cf0  &amp; strFileName &amp; \cf13 " not Found."\cf0 )\par ??            \cf2 Return\cf0  \cf2 Nothing\par ??\cf0         \cf2 End\cf0  \cf2 If\par ??\cf0     \cf2 End\cf0  \cf2 Function\par ??End\cf0  \cf2 Class}
--><div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 8pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    1</span> <span style="color: blue;">Imports</span> System.Security.Cryptography
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    2</span> <span style="color: blue;">Imports</span> System.Text
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    3</span> <span style="color: blue;">Imports</span> System.IO
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    4</span> 
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    5</span> <span style="color: blue;">Public</span><span style="color: blue;">Class</span> MD5FileHash
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    6</span>     <span style="color: blue;">Public</span><span style="color: blue;">Function</span> getMD5HashForFile(<span style="color: blue;">ByVal</span> strFileName <span style="color: blue;">As</span><span style="color: blue;">String</span>) <span style="color: blue;">As</span><span style="color: blue;">String</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    7</span>    
    <span style="color: blue;">If</span> (<span style="color: blue;">New</span> FileInfo(strFileName).Exists) <span style="color: blue;">Then</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    8</span>    
        <span style="color: blue;">Dim</span> objSB <span style="color: blue;">As</span><span style="color: blue;">New</span> StringBuilder
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    9</span>    
        <span style="color: blue;">Dim</span> objMD5 <span style="color: blue;">As</span><span style="color: blue;">New</span> MD5CryptoServiceProvider
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   10</span>    
        <span style="color: blue;">Dim</span> objFS <span style="color: blue;">As</span><span style="color: blue;">New</span> FileStream(strFileName,
FileMode.Open)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   11</span>    
        <span style="color: blue;">Dim</span> bHash() <span style="color: blue;">As</span><span style="color: blue;">Byte</span> =
objMD5.ComputeHash(objFS)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   12</span>    
        objFS.Close()
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   13</span>    
        <span style="color: blue;">For</span><span style="color: blue;">Each</span> bHex <span style="color: blue;">As</span><span style="color: blue;">Byte</span><span style="color: blue;">In</span> bHash
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   14</span>    
            objSB.Append(bHex.ToString(<span style="color: maroon;">"x2"</span>))
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   15</span>    
        <span style="color: blue;">Next</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   16</span>    
        <span style="color: blue;">Return</span> objSB.ToString
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   17</span>    
    <span style="color: blue;">Else</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   18</span>    
        <span style="color: blue;">Throw</span><span style="color: blue;">New</span> FileNotFoundException(<span style="color: maroon;">"File
"</span> &amp; strFileName &amp; <span style="color: maroon;">" not Found."</span>)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   19</span>    
        <span style="color: blue;">Return</span><span style="color: blue;">Nothing</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   20</span>    
    <span style="color: blue;">End</span><span style="color: blue;">If</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   21</span>     <span style="color: blue;">End</span><span style="color: blue;">Function</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   22</span> <span style="color: blue;">End</span><span style="color: blue;">Class</span></p></div>
[/code]<br /><br />
Wichtig ist das die Referenz auf <u>System.Security</u> bestehen muss. Diese Funktion
erzeugt MD5-Hash-Werte von Dateien die unter anderem zu den Hash-Werten von <a href="http://www.etree.org/md5com.html">MD5sum.exe</a>, <a href="http://digestit.kennethballard.com/download.html">digestIT</a> und
der <a href="http://mdhashtool.mozdev.org/installation.html">MD Hash Tool extension
for Firefox</a> kompatibel sind.<br /><p></p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=98d72a5b-cf4b-4c06-9381-5823b9590669" /></body>
      <title>MD5sum kompatible Hash-Werte erzeugen</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=98d72a5b-cf4b-4c06-9381-5823b9590669</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=98d72a5b-cf4b-4c06-9381-5823b9590669</link>
      <pubDate>Fri, 12 Jan 2007 10:16:05 GMT</pubDate>
      <description>Ein Freund von mir bat mich für ihn eine Klasse zu schrieben mit der man MD5-Hash von Files erzeugen kann. Da er noch nicht viel Erfahrung mit .Net hat willigte ich ein. Dabei stellte ich jedoch fest das es viele verschiedene Ansätze gibt die jeweils unterschiedliche Resultate erzeugten. Also erzeugte ich mit dem Tool &lt;i&gt;MD5sum.exe&lt;/i&gt; ein
paar Referenzwerte um meine Ergebnisse zu vergleichen.&lt;br&gt;
&lt;br&gt;
[code]&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 \cf2 Imports\cf0  System.Security.Cryptography\par ??\cf2 Imports\cf0  System.Text\par ??\cf2 Imports\cf0  System.IO\par ??\par ??\cf2 Public\cf0  \cf2 Class\cf0  MD5FileHash\par ??    \cf2 Public\cf0  \cf2 Function\cf0  getMD5HashForFile(\cf2 ByVal\cf0  strFileName \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 String\par ??\cf0         \cf2 If\cf0  (\cf2 New\cf0  FileInfo(strFileName).Exists) \cf2 Then\par ??\cf0             \cf2 Dim\cf0  objSB \cf2 As\cf0  \cf2 New\cf0  StringBuilder\par ??            \cf2 Dim\cf0  objMD5 \cf2 As\cf0  \cf2 New\cf0  MD5CryptoServiceProvider\par ??            \cf2 Dim\cf0  objFS \cf2 As\cf0  \cf2 New\cf0  FileStream(strFileName, FileMode.Open)\par ??            \cf2 Dim\cf0  bHash() \cf2 As\cf0  \cf2 Byte\cf0  = objMD5.ComputeHash(objFS)\par ??            objFS.Close()\par ??            \cf2 For\cf0  \cf2 Each\cf0  bHex \cf2 As\cf0  \cf2 Byte\cf0  \cf2 In\cf0  bHash\par ??                objSB.Append(bHex.ToString(\cf13 "x2"\cf0 ))\par ??            \cf2 Next\par ??\cf0             \cf2 Return\cf0  objSB.ToString\par ??        \cf2 Else\par ??\cf0             \cf2 Throw\cf0  \cf2 New\cf0  FileNotFoundException(\cf13 "File "\cf0  &amp;amp; strFileName &amp;amp; \cf13 " not Found."\cf0 )\par ??            \cf2 Return\cf0  \cf2 Nothing\par ??\cf0         \cf2 End\cf0  \cf2 If\par ??\cf0     \cf2 End\cf0  \cf2 Function\par ??End\cf0  \cf2 Class}
--&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 8pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;Imports&lt;/span&gt; System.Security.Cryptography
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;Imports&lt;/span&gt; System.Text
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;Imports&lt;/span&gt; System.IO
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; MD5FileHash
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; getMD5HashForFile(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; strFileName &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;) &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; (&lt;span style="color: blue;"&gt;New&lt;/span&gt; FileInfo(strFileName).Exists) &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; objSB &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; StringBuilder
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; objMD5 &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; MD5CryptoServiceProvider
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; objFS &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; FileStream(strFileName,
FileMode.Open)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; bHash() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Byte&lt;/span&gt; =
objMD5.ComputeHash(objFS)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; objFS.Close()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; &lt;span style="color: blue;"&gt;Each&lt;/span&gt; bHex &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Byte&lt;/span&gt; &lt;span style="color: blue;"&gt;In&lt;/span&gt; bHash
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; objSB.Append(bHex.ToString(&lt;span style="color: maroon;"&gt;"x2"&lt;/span&gt;))
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; objSB.ToString
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Throw&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; FileNotFoundException(&lt;span style="color: maroon;"&gt;"File
"&lt;/span&gt; &amp;amp; strFileName &amp;amp; &lt;span style="color: maroon;"&gt;" not Found."&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; &lt;span style="color: blue;"&gt;Nothing&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
[/code]&lt;br&gt;
&lt;br&gt;
Wichtig ist das die Referenz auf &lt;u&gt;System.Security&lt;/u&gt; bestehen muss. Diese Funktion
erzeugt MD5-Hash-Werte von Dateien die unter anderem zu den Hash-Werten von &lt;a href="http://www.etree.org/md5com.html"&gt;MD5sum.exe&lt;/a&gt;, &lt;a href="http://digestit.kennethballard.com/download.html"&gt;digestIT&lt;/a&gt; und
der &lt;a href="http://mdhashtool.mozdev.org/installation.html"&gt;MD Hash Tool extension
for Firefox&lt;/a&gt; kompatibel sind.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=98d72a5b-cf4b-4c06-9381-5823b9590669" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=98d72a5b-cf4b-4c06-9381-5823b9590669</comments>
      <category>Quellcode / .Net Framework 2.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=81f4642a-a663-490c-988d-c2d561e75593</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=81f4642a-a663-490c-988d-c2d561e75593</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=81f4642a-a663-490c-988d-c2d561e75593</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=81f4642a-a663-490c-988d-c2d561e75593</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Und zugleich erfolgt der zweite Blogeintrag
für Heute. Diesmal befasse ich mich mit dem Problem die Version des Acrobat's respektive
Acrobat Reader's im Internetexplorer auszulesen.<br /><br />
Das kniflige dabei ist das ich nicht VBScript zurückgreifen möchte. Das hat eine einfachen
Grund. Die viele Benutzer haben VBScript deaktiviert oder auf "Eingabeaufforderung"
gestellt was zu einem nervigen PopUp führen würde.<br /><br />
[code]<!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 \cf2 function\cf0  getAcrobatVersionsNr(style)\{ \cf11 //Parameters Accept: short (Return X.X) | long (Return X.X.X) || Returns is none Acrobat detectet NULL\par ??\cf0     document.write(\cf13 '&lt;object id="pdfObj" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="0" height="0" style="display:none"&gt;&lt;/object&gt;'\cf0 );\par ??    \cf2 try\cf0 \{\par ??        AcrobatVersion = pdfObj.GetVersions();\par ??        \cf2 if\cf0 (AcrobatVersion == \cf13 ''\cf0 )\par ??            \cf2 return\cf0  \cf2 null\cf0 ;\par ??        \cf2 else\cf0 \{\par ??            \cf2 var\cf0  indice = AcrobatVersion.indexOf(\cf13 "AcroForm"\cf0 );\par ??            \cf2 if\cf0  (indice&gt;-1) \{\par ??                indice = indice + 9;\par ??                \cf2 var\cf0  AcrobatVersionNrLang = AcrobatVersion.substring(indice, indice + 5)\par ??                indice=AcrobatVersionNrLang.lastIndexOf(\cf13 "."\cf0 )\par ??                AcrobatVersionNrKurz = AcrobatVersionNrLang.substring(0,indice);\par ??                \cf2 if\cf0  (style==\cf13 'short'\cf0 )\par ??                    \cf2 return\cf0  AcrobatVersionNrKurz;\par ??                \cf2 else\cf0  \cf2 if\cf0  (style==\cf13 'long'\cf0 )\par ??                    \cf2 return\cf0  AcrobatVersionNrLang;\par ??            \}\par ??            \cf2 else\cf0  \par ??                \cf2 return\cf0  \cf2 null\par ??\cf0                 \par ??        \}\par ??    \}\par ??    \cf2 catch\cf0 (ex)\{\cf2 return\cf0  \cf2 null\cf0 \}\par ??\}}
--><div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 8pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    1</span> <span style="color: blue;">function</span> getAcrobatVersionsNr(style){ <span style="color: green;">//Parameters
Accept: short (Return X.X) | long (Return X.X.X) || Returns is none Acrobat detectet
NULL</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    2</span>    
document.write(<span style="color: maroon;">'&lt;object id="pdfObj" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000"
width="0" height="0" style="display:none"&gt;&lt;/object&gt;'</span>);
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    3</span>     <span style="color: blue;">try</span>{
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    4</span>    
    AcrobatVersion = pdfObj.GetVersions();
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    5</span>    
    <span style="color: blue;">if</span>(AcrobatVersion == <span style="color: maroon;">''</span>)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    6</span>    
        <span style="color: blue;">return</span><span style="color: blue;">null</span>;
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    7</span>    
    <span style="color: blue;">else</span>{
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    8</span>    
        <span style="color: blue;">var</span> indice
= AcrobatVersion.indexOf(<span style="color: maroon;">"AcroForm"</span>);
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    9</span>    
        <span style="color: blue;">if</span> (indice&gt;-1)
{
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   10</span>    
            indice = indice + 9;
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   11</span>    
            <span style="color: blue;">var</span> AcrobatVersionNrLang
= AcrobatVersion.substring(indice, indice + 5)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   12</span>    
            indice=AcrobatVersionNrLang.lastIndexOf(<span style="color: maroon;">"."</span>)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   13</span>    
            AcrobatVersionNrKurz = AcrobatVersionNrLang.substring(0,indice);
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   14</span>    
            <span style="color: blue;">if</span> (style==<span style="color: maroon;">'short'</span>)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   15</span>    
                <span style="color: blue;">return</span> AcrobatVersionNrKurz;
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   16</span>    
            <span style="color: blue;">else</span><span style="color: blue;">if</span> (style==<span style="color: maroon;">'long'</span>)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   17</span>    
                <span style="color: blue;">return</span> AcrobatVersionNrLang;
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   18</span>    
        }
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   19</span>    
        <span style="color: blue;">else</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   20</span>    
            <span style="color: blue;">return</span><span style="color: blue;">null</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   21</span> 
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   22</span>    
    }
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   23</span>    
}
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   24</span>     <span style="color: blue;">catch</span>(ex){<span style="color: blue;">return</span><span style="color: blue;">null</span>}
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   25</span> }
</p></div>
[/code]<br /><br />
Die Funktion <i>getAcrobatVersionsNr</i> erstellt ein neues Objekt der angegebenen
classid welches das AcrobatBowserHelper-Objekt representatiert. Anschließend wird
geprüft ob sich dieses Objekt instanzieren ließe und wenn ja wird die Funktion <i>GetVersions </i>aufgerufen
welche einen String mit allen installierten AcrobatPlugins und deren Versionen auflistet.
Das wichtigste Plugin in diesem Zusammenhang ist <i>AcroForm</i>. Nun wird die Versionsinformation
dieses Plugins rausgeparst.<br /><br />
Die Funktion verfügt über einen Parameter der angibt in welchem Format die Rückgabe
erfolgen soll. Zur Auswahl stehen hier "short" und "long". Weitere Informationen entnehmen
Sie bitte dem Kommentar.<br /><br />
Sollte keine Acrobatversion installiert sein wird <i>NULL</i> zurückgegeben.<br /><br /><p></p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=81f4642a-a663-490c-988d-c2d561e75593" /></body>
      <title>Acrobat-Version mittels JavaScript  im Internetexplorer auslesen</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=81f4642a-a663-490c-988d-c2d561e75593</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=81f4642a-a663-490c-988d-c2d561e75593</link>
      <pubDate>Thu, 11 Jan 2007 15:56:19 GMT</pubDate>
      <description>Und zugleich erfolgt der zweite Blogeintrag für Heute. Diesmal befasse ich mich mit dem Problem die Version des Acrobat's respektive Acrobat Reader's im Internetexplorer auszulesen.&lt;br&gt;
&lt;br&gt;
Das kniflige dabei ist das ich nicht VBScript zurückgreifen möchte. Das hat eine einfachen
Grund. Die viele Benutzer haben VBScript deaktiviert oder auf "Eingabeaufforderung"
gestellt was zu einem nervigen PopUp führen würde.&lt;br&gt;
&lt;br&gt;
[code]&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 \cf2 function\cf0  getAcrobatVersionsNr(style)\{ \cf11 //Parameters Accept: short (Return X.X) | long (Return X.X.X) || Returns is none Acrobat detectet NULL\par ??\cf0     document.write(\cf13 '&amp;lt;object id="pdfObj" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="0" height="0" style="display:none"&amp;gt;&amp;lt;/object&amp;gt;'\cf0 );\par ??    \cf2 try\cf0 \{\par ??        AcrobatVersion = pdfObj.GetVersions();\par ??        \cf2 if\cf0 (AcrobatVersion == \cf13 ''\cf0 )\par ??            \cf2 return\cf0  \cf2 null\cf0 ;\par ??        \cf2 else\cf0 \{\par ??            \cf2 var\cf0  indice = AcrobatVersion.indexOf(\cf13 "AcroForm"\cf0 );\par ??            \cf2 if\cf0  (indice&amp;gt;-1) \{\par ??                indice = indice + 9;\par ??                \cf2 var\cf0  AcrobatVersionNrLang = AcrobatVersion.substring(indice, indice + 5)\par ??                indice=AcrobatVersionNrLang.lastIndexOf(\cf13 "."\cf0 )\par ??                AcrobatVersionNrKurz = AcrobatVersionNrLang.substring(0,indice);\par ??                \cf2 if\cf0  (style==\cf13 'short'\cf0 )\par ??                    \cf2 return\cf0  AcrobatVersionNrKurz;\par ??                \cf2 else\cf0  \cf2 if\cf0  (style==\cf13 'long'\cf0 )\par ??                    \cf2 return\cf0  AcrobatVersionNrLang;\par ??            \}\par ??            \cf2 else\cf0  \par ??                \cf2 return\cf0  \cf2 null\par ??\cf0                 \par ??        \}\par ??    \}\par ??    \cf2 catch\cf0 (ex)\{\cf2 return\cf0  \cf2 null\cf0 \}\par ??\}}
--&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 8pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt; getAcrobatVersionsNr(style){ &lt;span style="color: green;"&gt;//Parameters
Accept: short (Return X.X) | long (Return X.X.X) || Returns is none Acrobat detectet
NULL&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
document.write(&lt;span style="color: maroon;"&gt;'&amp;lt;object id="pdfObj" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000"
width="0" height="0" style="display:none"&amp;gt;&amp;lt;/object&amp;gt;'&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; AcrobatVersion = pdfObj.GetVersions();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt;(AcrobatVersion == &lt;span style="color: maroon;"&gt;''&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; indice
= AcrobatVersion.indexOf(&lt;span style="color: maroon;"&gt;"AcroForm"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (indice&amp;gt;-1)
{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice = indice + 9;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; AcrobatVersionNrLang
= AcrobatVersion.substring(indice, indice + 5)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice=AcrobatVersionNrLang.lastIndexOf(&lt;span style="color: maroon;"&gt;"."&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AcrobatVersionNrKurz = AcrobatVersionNrLang.substring(0,indice);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (style==&lt;span style="color: maroon;"&gt;'short'&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; AcrobatVersionNrKurz;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (style==&lt;span style="color: maroon;"&gt;'long'&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; AcrobatVersionNrLang;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;catch&lt;/span&gt;(ex){&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;}
&lt;/p&gt;
&lt;/div&gt;
[/code]&lt;br&gt;
&lt;br&gt;
Die Funktion &lt;i&gt;getAcrobatVersionsNr&lt;/i&gt; erstellt ein neues Objekt der angegebenen
classid welches das AcrobatBowserHelper-Objekt representatiert. Anschließend wird
geprüft ob sich dieses Objekt instanzieren ließe und wenn ja wird die Funktion &lt;i&gt;GetVersions &lt;/i&gt;aufgerufen
welche einen String mit allen installierten AcrobatPlugins und deren Versionen auflistet.
Das wichtigste Plugin in diesem Zusammenhang ist &lt;i&gt;AcroForm&lt;/i&gt;. Nun wird die Versionsinformation
dieses Plugins rausgeparst.&lt;br&gt;
&lt;br&gt;
Die Funktion verfügt über einen Parameter der angibt in welchem Format die Rückgabe
erfolgen soll. Zur Auswahl stehen hier "short" und "long". Weitere Informationen entnehmen
Sie bitte dem Kommentar.&lt;br&gt;
&lt;br&gt;
Sollte keine Acrobatversion installiert sein wird &lt;i&gt;NULL&lt;/i&gt; zurückgegeben.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=81f4642a-a663-490c-988d-c2d561e75593" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=81f4642a-a663-490c-988d-c2d561e75593</comments>
      <category>Quellcode / JavaScript</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=c18b9709-beed-402e-b517-6bd1dbb5d4ff</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=c18b9709-beed-402e-b517-6bd1dbb5d4ff</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=c18b9709-beed-402e-b517-6bd1dbb5d4ff</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c18b9709-beed-402e-b517-6bd1dbb5d4ff</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Nach einer kurzen Ruhepause möchte ich
nun wieder mit meiner Arbeit beginnen. Und gleich bin ich auf das erste Problem gestoßen.<br /><br />
Im Namespace System.Web gibt es eine Klasse die sich HttpUtility nennt und die unter
anderem die Funktion Urlencode und Urldecode implementiert. Leider hatte ich feststellen
müssen das diese Klasse nicht das macht was ich wollte. Mittels des WebClients aus
dem System.Net Namespace wollte ich einen Request absätzen der jedoch als Parameter
auch umlaute enthielt. Diese wurde jedoch nicht encodiert und auch der WebClient encodiert
sie nicht automatisch.<br /><br />
Aus diesem Grund habe ich mich drangemacht selber eine entsprechende Implementierung
zu schreiben und das Resultat möchte ich euch hier zur Verfügung stellen.<br /><br />
[code]<!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16     \cf2 Public\cf0  \cf2 Function\cf0  UrlEncode(\cf2 ByVal\cf0  strValue \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 String\par ??\cf0         \cf2 Dim\cf0  strTempreturn \cf2 As\cf0  \cf2 String\cf0  = \cf13 ""\par ??\cf0         \cf2 For\cf0  \cf2 Each\cf0  strChar \cf2 As\cf0  \cf2 Char\cf0  \cf2 In\cf0  strValue\par ??            \cf2 If\cf0  InStr(1, \cf13 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"\cf0 , strChar) = 0 \cf2 Then\par ??\cf0                 strTempreturn += \cf13 "%"\cf0  &amp; Hex(Asc(strChar))\par ??            \cf2 Else\cf0  : strTempreturn += strChar\par ??            \cf2 End\cf0  \cf2 If\par ??\cf0         \cf2 Next\par ??\cf0         \cf2 Return\cf0  strTempreturn\par ??    \cf2 End\cf0  \cf2 Function\par ??\par ??\cf0     \cf2 Public\cf0  \cf2 Function\cf0  UrlDecode(\cf2 ByVal\cf0  strValue \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 String\par ??\cf0         \cf2 Dim\cf0  strTempreturn \cf2 As\cf0  \cf2 String\cf0  = \cf13 ""\par ??\cf0         \cf2 Dim\cf0  arrTempString() \cf2 As\cf0  \cf2 String\cf0  = strValue.Split(\cf13 "%"\cf0 )\par ??        \cf2 For\cf0  \cf2 Each\cf0  strEntry \cf2 As\cf0  \cf2 String\cf0  \cf2 In\cf0  arrTempString\par ??            \cf2 If\cf0  strEntry.Length &gt;= 2 \cf2 Then\par ??\cf0                 \cf2 If\cf0  IsHex(strEntry.Substring(0, 2)) \cf2 Then\par ??\cf0                     strTempreturn += Chr(\cf13 "&amp;H"\cf0  &amp; strEntry.Substring(0, 2))\par ??                    strTempreturn += strEntry.Substring(2)\par ??                \cf2 Else\cf0  : strTempreturn += \cf13 "%"\cf0  &amp; strEntry\par ??                \cf2 End\cf0  \cf2 If\par ??\cf0             \cf2 Else\cf0  : strTempreturn += strEntry\par ??            \cf2 End\cf0  \cf2 If\par ??\cf0         \cf2 Next\par ??\cf0         \cf2 Return\cf0  strTempreturn\par ??    \cf2 End\cf0  \cf2 Function\par ??\par ??\cf0     \cf2 Public\cf0  \cf2 Function\cf0  IsHex(\cf2 ByVal\cf0  strValue \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 Boolean\par ??\cf0         \cf2 Dim\cf0  bolTempreturn \cf2 As\cf0  \cf2 Boolean\cf0  = \cf2 True\par ??\cf0         \cf2 If\cf0  strValue.Length = 1 \cf2 Or\cf0  strValue.Length = 2 \cf2 Then\par ??\cf0             \cf2 For\cf0  \cf2 Each\cf0  strChar \cf2 As\cf0  \cf2 Char\cf0  \cf2 In\cf0  strValue\par ??                \cf2 If\cf0  InStr(1, \cf13 "0123456789ABCDEF"\cf0 , strChar) = 0 \cf2 Then\par ??\cf0                     bolTempreturn = \cf2 False\par ??\cf0                 \cf2 End\cf0  \cf2 If\par ??\cf0             \cf2 Next\par ??\cf0         \cf2 Else\cf0  : bolTempreturn = \cf2 False\par ??\cf0         \cf2 End\cf0  \cf2 If\par ??\cf0         \cf2 Return\cf0  bolTempreturn\par ??    \cf2 End\cf0  \cf2 Function}
--><div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 8pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    1</span>     <span style="color: blue;">Public</span><span style="color: blue;">Function</span> UrlEncode(<span style="color: blue;">ByVal</span> strValue <span style="color: blue;">As</span><span style="color: blue;">String</span>) <span style="color: blue;">As</span><span style="color: blue;">String</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    2</span>    
    <span style="color: blue;">Dim</span> strTempreturn <span style="color: blue;">As</span><span style="color: blue;">String</span> = <span style="color: maroon;">""</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    3</span>    
    <span style="color: blue;">For</span><span style="color: blue;">Each</span> strChar <span style="color: blue;">As</span><span style="color: blue;">Char</span><span style="color: blue;">In</span> strValue
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    4</span>    
        <span style="color: blue;">If</span> InStr(1, <span style="color: maroon;">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"</span>,
strChar) = 0 <span style="color: blue;">Then</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    5</span>    
            strTempreturn += <span style="color: maroon;">"%"</span> &amp;
Hex(Asc(strChar))
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    6</span>    
        <span style="color: blue;">Else</span> : strTempreturn
+= strChar
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    7</span>    
        <span style="color: blue;">End</span><span style="color: blue;">If</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    8</span>    
    <span style="color: blue;">Next</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">    9</span>    
    <span style="color: blue;">Return</span> strTempreturn
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   10</span>     <span style="color: blue;">End</span><span style="color: blue;">Function</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   11</span> 
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   12</span>     <span style="color: blue;">Public</span><span style="color: blue;">Function</span> UrlDecode(<span style="color: blue;">ByVal</span> strValue <span style="color: blue;">As</span><span style="color: blue;">String</span>) <span style="color: blue;">As</span><span style="color: blue;">String</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   13</span>    
    <span style="color: blue;">Dim</span> strTempreturn <span style="color: blue;">As</span><span style="color: blue;">String</span> = <span style="color: maroon;">""</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   14</span>    
    <span style="color: blue;">Dim</span> arrTempString() <span style="color: blue;">As</span><span style="color: blue;">String</span> =
strValue.Split(<span style="color: maroon;">"%"</span>)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   15</span>    
    <span style="color: blue;">For</span><span style="color: blue;">Each</span> strEntry <span style="color: blue;">As</span><span style="color: blue;">String</span><span style="color: blue;">In</span> arrTempString
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   16</span>    
        <span style="color: blue;">If</span> strEntry.Length
&gt;= 2 <span style="color: blue;">Then</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   17</span>    
            <span style="color: blue;">If</span> IsHex(strEntry.Substring(0,
2)) <span style="color: blue;">Then</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   18</span>    
                strTempreturn
+= Chr(<span style="color: maroon;">"&amp;H"</span> &amp; strEntry.Substring(0, 2))
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   19</span>    
                strTempreturn
+= strEntry.Substring(2)
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   20</span>    
            <span style="color: blue;">Else</span> :
strTempreturn += <span style="color: maroon;">"%"</span> &amp; strEntry
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   21</span>    
            <span style="color: blue;">End</span><span style="color: blue;">If</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   22</span>    
        <span style="color: blue;">Else</span> : strTempreturn
+= strEntry
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   23</span>    
        <span style="color: blue;">End</span><span style="color: blue;">If</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   24</span>    
    <span style="color: blue;">Next</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   25</span>    
    <span style="color: blue;">Return</span> strTempreturn
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   26</span>     <span style="color: blue;">End</span><span style="color: blue;">Function</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   27</span> 
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   28</span>     <span style="color: blue;">Public</span><span style="color: blue;">Function</span> IsHex(<span style="color: blue;">ByVal</span> strValue <span style="color: blue;">As</span><span style="color: blue;">String</span>) <span style="color: blue;">As</span><span style="color: blue;">Boolean</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   29</span>    
    <span style="color: blue;">Dim</span> bolTempreturn <span style="color: blue;">As</span><span style="color: blue;">Boolean</span> = <span style="color: blue;">True</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   30</span>    
    <span style="color: blue;">If</span> strValue.Length = 1 <span style="color: blue;">Or</span> strValue.Length
= 2 <span style="color: blue;">Then</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   31</span>    
        <span style="color: blue;">For</span><span style="color: blue;">Each</span> strChar <span style="color: blue;">As</span><span style="color: blue;">Char</span><span style="color: blue;">In</span> strValue
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   32</span>    
            <span style="color: blue;">If</span> InStr(1, <span style="color: maroon;">"0123456789ABCDEF"</span>,
strChar) = 0 <span style="color: blue;">Then</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   33</span>    
                bolTempreturn
= <span style="color: blue;">False</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   34</span>    
            <span style="color: blue;">End</span><span style="color: blue;">If</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   35</span>    
        <span style="color: blue;">Next</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   36</span>    
    <span style="color: blue;">Else</span> : bolTempreturn = <span style="color: blue;">False</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   37</span>    
    <span style="color: blue;">End</span><span style="color: blue;">If</span></p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   38</span>    
    <span style="color: blue;">Return</span> bolTempreturn
</p><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">   39</span>     <span style="color: blue;">End</span><span style="color: blue;">Function</span></p></div>
[/code]<br /><br />
Beide Funktionen erwartet einen String als Parameter und liefern ebenfalls einen String
zurück.<br /><br />
Kurz zu den Funktionsweisen:<br /><br /><b>UrlEncode:<br /><br /></b>Diese Funktion prüft ob die im ubergebenen String enthaltenen Zeichen in der Zeichsatz
(0-9a-zA-Z) passen (wobei ä,ü,ö,.. ignoriert werden). Sollte dem nicht so sein, wird
der Hex-Wert des ASCII-Code dieses Zeichens ermittelt.<br /><br /><b>UrlDecode:</b><br /><br />
Diese Funktion teilt den übergebenen String anhand des %-Zeichens und prüft ob anschließend
die nächsten zwei Zeichen einen Hex-Wert darstellen. Wenn ja wird dieser wieder in
ein Char convertiert.<br /><br /><b>IsHex:</b><br /><br />
Diese Funktion überprüft lediglich ob die übergebene Zeichenfolge aus einem bzw. zwei
Zeichen besteht und im Zeichsatz für Hex-Werte enthalten ist.<br /><br /><br /><p></p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=c18b9709-beed-402e-b517-6bd1dbb5d4ff" /></body>
      <title>UrlEncode und UrlDecode</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=c18b9709-beed-402e-b517-6bd1dbb5d4ff</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=c18b9709-beed-402e-b517-6bd1dbb5d4ff</link>
      <pubDate>Thu, 11 Jan 2007 12:34:37 GMT</pubDate>
      <description>Nach einer kurzen Ruhepause möchte ich nun wieder mit meiner Arbeit beginnen. Und gleich bin ich auf das erste Problem gestoßen.&lt;br&gt;
&lt;br&gt;
Im Namespace System.Web gibt es eine Klasse die sich HttpUtility nennt und die unter
anderem die Funktion Urlencode und Urldecode implementiert. Leider hatte ich feststellen
müssen das diese Klasse nicht das macht was ich wollte. Mittels des WebClients aus
dem System.Net Namespace wollte ich einen Request absätzen der jedoch als Parameter
auch umlaute enthielt. Diese wurde jedoch nicht encodiert und auch der WebClient encodiert
sie nicht automatisch.&lt;br&gt;
&lt;br&gt;
Aus diesem Grund habe ich mich drangemacht selber eine entsprechende Implementierung
zu schreiben und das Resultat möchte ich euch hier zur Verfügung stellen.&lt;br&gt;
&lt;br&gt;
[code]&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16     \cf2 Public\cf0  \cf2 Function\cf0  UrlEncode(\cf2 ByVal\cf0  strValue \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 String\par ??\cf0         \cf2 Dim\cf0  strTempreturn \cf2 As\cf0  \cf2 String\cf0  = \cf13 ""\par ??\cf0         \cf2 For\cf0  \cf2 Each\cf0  strChar \cf2 As\cf0  \cf2 Char\cf0  \cf2 In\cf0  strValue\par ??            \cf2 If\cf0  InStr(1, \cf13 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"\cf0 , strChar) = 0 \cf2 Then\par ??\cf0                 strTempreturn += \cf13 "%"\cf0  &amp;amp; Hex(Asc(strChar))\par ??            \cf2 Else\cf0  : strTempreturn += strChar\par ??            \cf2 End\cf0  \cf2 If\par ??\cf0         \cf2 Next\par ??\cf0         \cf2 Return\cf0  strTempreturn\par ??    \cf2 End\cf0  \cf2 Function\par ??\par ??\cf0     \cf2 Public\cf0  \cf2 Function\cf0  UrlDecode(\cf2 ByVal\cf0  strValue \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 String\par ??\cf0         \cf2 Dim\cf0  strTempreturn \cf2 As\cf0  \cf2 String\cf0  = \cf13 ""\par ??\cf0         \cf2 Dim\cf0  arrTempString() \cf2 As\cf0  \cf2 String\cf0  = strValue.Split(\cf13 "%"\cf0 )\par ??        \cf2 For\cf0  \cf2 Each\cf0  strEntry \cf2 As\cf0  \cf2 String\cf0  \cf2 In\cf0  arrTempString\par ??            \cf2 If\cf0  strEntry.Length &amp;gt;= 2 \cf2 Then\par ??\cf0                 \cf2 If\cf0  IsHex(strEntry.Substring(0, 2)) \cf2 Then\par ??\cf0                     strTempreturn += Chr(\cf13 "&amp;amp;H"\cf0  &amp;amp; strEntry.Substring(0, 2))\par ??                    strTempreturn += strEntry.Substring(2)\par ??                \cf2 Else\cf0  : strTempreturn += \cf13 "%"\cf0  &amp;amp; strEntry\par ??                \cf2 End\cf0  \cf2 If\par ??\cf0             \cf2 Else\cf0  : strTempreturn += strEntry\par ??            \cf2 End\cf0  \cf2 If\par ??\cf0         \cf2 Next\par ??\cf0         \cf2 Return\cf0  strTempreturn\par ??    \cf2 End\cf0  \cf2 Function\par ??\par ??\cf0     \cf2 Public\cf0  \cf2 Function\cf0  IsHex(\cf2 ByVal\cf0  strValue \cf2 As\cf0  \cf2 String\cf0 ) \cf2 As\cf0  \cf2 Boolean\par ??\cf0         \cf2 Dim\cf0  bolTempreturn \cf2 As\cf0  \cf2 Boolean\cf0  = \cf2 True\par ??\cf0         \cf2 If\cf0  strValue.Length = 1 \cf2 Or\cf0  strValue.Length = 2 \cf2 Then\par ??\cf0             \cf2 For\cf0  \cf2 Each\cf0  strChar \cf2 As\cf0  \cf2 Char\cf0  \cf2 In\cf0  strValue\par ??                \cf2 If\cf0  InStr(1, \cf13 "0123456789ABCDEF"\cf0 , strChar) = 0 \cf2 Then\par ??\cf0                     bolTempreturn = \cf2 False\par ??\cf0                 \cf2 End\cf0  \cf2 If\par ??\cf0             \cf2 Next\par ??\cf0         \cf2 Else\cf0  : bolTempreturn = \cf2 False\par ??\cf0         \cf2 End\cf0  \cf2 If\par ??\cf0         \cf2 Return\cf0  bolTempreturn\par ??    \cf2 End\cf0  \cf2 Function}
--&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 8pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; UrlEncode(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; strValue &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;) &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; strTempreturn &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = &lt;span style="color: maroon;"&gt;""&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; &lt;span style="color: blue;"&gt;Each&lt;/span&gt; strChar &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Char&lt;/span&gt; &lt;span style="color: blue;"&gt;In&lt;/span&gt; strValue
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; InStr(1, &lt;span style="color: maroon;"&gt;"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"&lt;/span&gt;,
strChar) = 0 &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strTempreturn += &lt;span style="color: maroon;"&gt;"%"&lt;/span&gt; &amp;amp;
Hex(Asc(strChar))
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt; : strTempreturn
+= strChar
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; strTempreturn
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; UrlDecode(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; strValue &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;) &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; strTempreturn &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = &lt;span style="color: maroon;"&gt;""&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; arrTempString() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; =
strValue.Split(&lt;span style="color: maroon;"&gt;"%"&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; &lt;span style="color: blue;"&gt;Each&lt;/span&gt; strEntry &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; &lt;span style="color: blue;"&gt;In&lt;/span&gt; arrTempString
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; strEntry.Length
&amp;gt;= 2 &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; IsHex(strEntry.Substring(0,
2)) &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strTempreturn
+= Chr(&lt;span style="color: maroon;"&gt;"&amp;amp;H"&lt;/span&gt; &amp;amp; strEntry.Substring(0, 2))
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strTempreturn
+= strEntry.Substring(2)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt; :
strTempreturn += &lt;span style="color: maroon;"&gt;"%"&lt;/span&gt; &amp;amp; strEntry
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt; : strTempreturn
+= strEntry
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; strTempreturn
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; IsHex(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; strValue &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;) &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; bolTempreturn &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt; = &lt;span style="color: blue;"&gt;True&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; strValue.Length = 1 &lt;span style="color: blue;"&gt;Or&lt;/span&gt; strValue.Length
= 2 &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; &lt;span style="color: blue;"&gt;Each&lt;/span&gt; strChar &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Char&lt;/span&gt; &lt;span style="color: blue;"&gt;In&lt;/span&gt; strValue
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; InStr(1, &lt;span style="color: maroon;"&gt;"0123456789ABCDEF"&lt;/span&gt;,
strChar) = 0 &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bolTempreturn
= &lt;span style="color: blue;"&gt;False&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt; : bolTempreturn = &lt;span style="color: blue;"&gt;False&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; bolTempreturn
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
[/code]&lt;br&gt;
&lt;br&gt;
Beide Funktionen erwartet einen String als Parameter und liefern ebenfalls einen String
zurück.&lt;br&gt;
&lt;br&gt;
Kurz zu den Funktionsweisen:&lt;br&gt;
&lt;br&gt;
&lt;b&gt;UrlEncode:&lt;br&gt;
&lt;br&gt;
&lt;/b&gt;Diese Funktion prüft ob die im ubergebenen String enthaltenen Zeichen in der Zeichsatz
(0-9a-zA-Z) passen (wobei ä,ü,ö,.. ignoriert werden). Sollte dem nicht so sein, wird
der Hex-Wert des ASCII-Code dieses Zeichens ermittelt.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;UrlDecode:&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Diese Funktion teilt den übergebenen String anhand des %-Zeichens und prüft ob anschließend
die nächsten zwei Zeichen einen Hex-Wert darstellen. Wenn ja wird dieser wieder in
ein Char convertiert.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;IsHex:&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Diese Funktion überprüft lediglich ob die übergebene Zeichenfolge aus einem bzw. zwei
Zeichen besteht und im Zeichsatz für Hex-Werte enthalten ist.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=c18b9709-beed-402e-b517-6bd1dbb5d4ff" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=c18b9709-beed-402e-b517-6bd1dbb5d4ff</comments>
      <category>Quellcode / .Net Framework 2.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Die Fehlermeldung "Response Buffer Limit
Exceeded" wird vom IIS geworfen sobald der Puffer einer Webseite eine Größe von 4
MB - 4194304 Byte - überschreitet. Dies trifft auch auf alle eingebetteten Objecte
wie Bilder, PDFs und äühnliches zu die direkt ins ASP eingebunden sind.<br /><br />
Für dieses Problem gibt es verschiedene Lösungen.<br /><br /><b>Lösung 1 - Verwendung von Response.Flush: </b><br /><br />
Bei einer reinen HTML-Generrierung ist es möglich die Eigenschaft <i>Response.Buffer</i> zu
setzten. Diese bewirkt das erstmal garnix besonderes. Erst im Zusammenhang mit mit <i>Response.Flush()</i> wird
es interessant.<br /><br />
Sobald <i>Response.Buffer</i> auf True gesetzt wurde wird der generierte Seiteninhalt
bis zum nächsten Auftreten von <i>Response.Flush()</i> oder dem Ende der Seite gechacht.<br /><br />
Hier ein kleines Beispiel<br /><br />
[code] Response.Buffer = True<br />
For i=0 to Ubound(arr)<br />
   set RS = db.execute("Select from table where y=" &amp; arr(i))<br />
   Do While not rs.eof and rs.recordcount&gt;1<br />
     .....<br />
   Loop<br />
   Response.Flush()<br />
Next<br />
 [/code] 
<br /><p><b>Lösung 2 - Anhebung des ASPBufferLimits:</b></p><br />
Die zweite Lösung ist dann zu bevorzugen wenn es sich nicht um eine HTML-Generierung
handelt. Als Beispiel kann ich hier zum Beispiel aufführen das eine PDF geladen werden
soll die größer als 4MB ist - diesen Fall hatte ich heut selber gehabt.<br /><br />
Im AdminScripts-Verzeichnis des IIS (Inetpubs) findet sich das Script <span class="userInput"><i>adsutil.vbs</i> welches
man wie folgt aufrufen muss.</span><br /><br />
[code]cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize[/code]<br /><p><var>LimitSize</var> stellt die Puffer-Limit-Größe in Byte dar. Beispielsweise wird
mit der Nummer 67108864 die Puffer-Limit-Größe zu 64 MB festgelegt.
</p>
Nach einem Neustart der IIS-Webinstanz wird die Einstellung übernommen und das Problem
sollte nicht mehr auftreten.<br /><br />
Floyd<br /><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a" /></body>
      <title>Response Buffer Limit Exceeded (80004005)</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a</link>
      <pubDate>Tue, 14 Nov 2006 08:52:05 GMT</pubDate>
      <description>Die Fehlermeldung "Response Buffer Limit Exceeded" wird vom IIS geworfen sobald der Puffer einer Webseite eine Größe von 4 MB - 4194304 Byte - überschreitet. Dies trifft auch auf alle eingebetteten Objecte wie Bilder, PDFs und äühnliches zu die direkt ins ASP eingebunden sind.&lt;br&gt;
&lt;br&gt;
Für dieses Problem gibt es verschiedene Lösungen.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Lösung 1 - Verwendung von Response.Flush: &lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Bei einer reinen HTML-Generrierung ist es möglich die Eigenschaft &lt;i&gt;Response.Buffer&lt;/i&gt; zu
setzten. Diese bewirkt das erstmal garnix besonderes. Erst im Zusammenhang mit mit &lt;i&gt;Response.Flush()&lt;/i&gt; wird
es interessant.&lt;br&gt;
&lt;br&gt;
Sobald &lt;i&gt;Response.Buffer&lt;/i&gt; auf True gesetzt wurde wird der generierte Seiteninhalt
bis zum nächsten Auftreten von &lt;i&gt;Response.Flush()&lt;/i&gt; oder dem Ende der Seite gechacht.&lt;br&gt;
&lt;br&gt;
Hier ein kleines Beispiel&lt;br&gt;
&lt;br&gt;
[code] Response.Buffer = True&lt;br&gt;
For i=0 to Ubound(arr)&lt;br&gt;
&amp;nbsp;&amp;nbsp; set RS = db.execute("Select from table where y=" &amp;amp; arr(i))&lt;br&gt;
&amp;nbsp;&amp;nbsp; Do While not rs.eof and rs.recordcount&amp;gt;1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .....&lt;br&gt;
&amp;nbsp;&amp;nbsp; Loop&lt;br&gt;
&amp;nbsp;&amp;nbsp; Response.Flush()&lt;br&gt;
Next&lt;br&gt;
&amp;nbsp;[/code] 
&lt;br&gt;
&lt;p&gt;
&lt;b&gt;Lösung 2 - Anhebung des ASPBufferLimits:&lt;/b&gt;
&lt;/p&gt;
&lt;br&gt;
Die zweite Lösung ist dann zu bevorzugen wenn es sich nicht um eine HTML-Generierung
handelt. Als Beispiel kann ich hier zum Beispiel aufführen das eine PDF geladen werden
soll die größer als 4MB ist - diesen Fall hatte ich heut selber gehabt.&lt;br&gt;
&lt;br&gt;
Im AdminScripts-Verzeichnis des IIS (Inetpubs) findet sich das Script &lt;span class="userInput"&gt;&lt;i&gt;adsutil.vbs&lt;/i&gt; welches
man wie folgt aufrufen muss.&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
[code]cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize[/code]&lt;br&gt;
&lt;p&gt;
&lt;var&gt;LimitSize&lt;/var&gt; stellt die Puffer-Limit-Größe in Byte dar. Beispielsweise wird
mit der Nummer 67108864 die Puffer-Limit-Größe zu 64 MB festgelegt.
&lt;/p&gt;
Nach einem Neustart der IIS-Webinstanz wird die Einstellung übernommen und das Problem
sollte nicht mehr auftreten.&lt;br&gt;
&lt;br&gt;
Floyd&lt;br&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=5f4e1c28-8929-4e08-8ca4-2e676b13cf4a</comments>
      <category>Fehler und Lösungen;Quellcode / ASP</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=c211611f-fad6-441a-837a-07778c6fbde3</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=c211611f-fad6-441a-837a-07778c6fbde3</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=c211611f-fad6-441a-837a-07778c6fbde3</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c211611f-fad6-441a-837a-07778c6fbde3</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Häufig stößt man in diversen Foren auf die Frage wie man in ASP NULL-Werte in eine
Datenbank binden kann. Leider liefert ASP und ADODB keine Möglichkeit von Haus aus
mit dies zu machen. Hierzu muss man sich einem kleinen Trick behelfen.
</p>
[code]<!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 dbNull = db.execute(\cf13 "select null"\cf0 ).fields(0)}
--><div style="FONT-SIZE: 8pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"><p style="MARGIN: 0px"><span style="COLOR: #2b91af">    1</span> dbNull = db.execute(<span style="COLOR: maroon">"select
null"</span>).fields(0)
</p></div>
[/code]<br /><p>
Natürlich kann man auch den weg gehen das man "NULL" direkt ins Statment schreib,
doch dieser Weg ist weder besonders schön noch besonders empfehlenswert da dies zumeist
doppelte Code-Pflege mit sich bringt.
</p><p>
Floyd
</p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=c211611f-fad6-441a-837a-07778c6fbde3" /></body>
      <title>NULL in ASP binden</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=c211611f-fad6-441a-837a-07778c6fbde3</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=c211611f-fad6-441a-837a-07778c6fbde3</link>
      <pubDate>Wed, 08 Nov 2006 17:33:48 GMT</pubDate>
      <description>&lt;p&gt;
Häufig stößt man in diversen Foren auf die Frage wie man in ASP NULL-Werte in eine
Datenbank binden kann. Leider liefert ASP und ADODB keine Möglichkeit von Haus aus
mit dies zu machen. Hierzu muss man sich einem kleinen Trick behelfen.
&lt;/p&gt;
[code]&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 dbNull = db.execute(\cf13 "select null"\cf0 ).fields(0)}
--&gt;
&lt;div style="FONT-SIZE: 8pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;dbNull = db.execute(&lt;span style="COLOR: maroon"&gt;"select
null"&lt;/span&gt;).fields(0)
&lt;/p&gt;
&lt;/div&gt;
[/code]&lt;br&gt;
&lt;p&gt;
Natürlich kann man auch den weg gehen das man "NULL" direkt ins Statment schreib,
doch dieser Weg ist weder besonders schön noch besonders empfehlenswert da dies zumeist
doppelte Code-Pflege mit sich bringt.
&lt;/p&gt;
&lt;p&gt;
Floyd
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=c211611f-fad6-441a-837a-07778c6fbde3" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=c211611f-fad6-441a-837a-07778c6fbde3</comments>
      <category>Quellcode / ASP</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=997295b9-23f7-4ded-8efa-bdb5dc3af91d</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=997295b9-23f7-4ded-8efa-bdb5dc3af91d</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=997295b9-23f7-4ded-8efa-bdb5dc3af91d</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=997295b9-23f7-4ded-8efa-bdb5dc3af91d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Im Artikel <a class="TitleLinkStyle" href="http://blog.freakfabrik.net/PermaLink.aspx?guid=74447684-4fcc-424f-8888-f0785be80e91" rel="bookmark">SQL-Injektion
oder Wie binde ich richtig für Anfänger</a> hatte ich vor einiger Zeit mal eine
Funktionsblock gepostet um NULL in eine Datenbank zu binden. Da ich die Funktion jetzt
mal wieder brauchte wollt ich sie natürlich gleich verbessern. Die neue
Version ist um einiges schlanker und hat auch keinen begrenzten Typenumfang mehr.
</p>
[code]<!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16     \cf2 Function\cf0  ReturnDBNull(\cf2 ByVal\cf0  value \cf2 As\cf0  VariantType) \cf2 As\cf0  \cf2 Object\par ??\cf0         \cf2 If\cf0  IsNothing(value) \cf2 Or\cf0  value = vbEmpty \cf2 Or\cf0  value = vbNull \cf2 Then\par ??\cf0             \cf2 Return\cf0  DBNull.Value\par ??        \cf2 Else\par ??\cf0             \cf2 Return\cf0  value\par ??        \cf2 End\cf0  \cf2 If\par ??\cf0     \cf2 End\cf0  \cf2 Function}
--><div style="FONT-SIZE: 8pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"><p style="MARGIN: 0px"><span style="COLOR: #2b91af">   1</span>     <span style="COLOR: blue">Function</span> ReturnDBNull(<span style="COLOR: blue">ByVal</span> value <span style="COLOR: blue">As</span><span style="COLOR: blue">Object</span>) <span style="COLOR: blue">As</span><span style="COLOR: blue">Object</span></p><p style="MARGIN: 0px"><span style="COLOR: #2b91af">   2</span>         <span style="COLOR: blue">If</span> IsNothing(value) <span style="COLOR: blue">Or</span> value
= vbEmpty <span style="COLOR: blue">Or</span> value = vbNull <span style="COLOR: blue">Then</span></p><p style="MARGIN: 0px"><span style="COLOR: #2b91af">   3</span>        
    <span style="COLOR: blue">Return</span> DBNull.Value
</p><p style="MARGIN: 0px"><span style="COLOR: #2b91af">   4</span>         <span style="COLOR: blue">Else</span></p><p style="MARGIN: 0px"><span style="COLOR: #2b91af">   5</span>        
    <span style="COLOR: blue">Return</span> value
</p><p style="MARGIN: 0px"><span style="COLOR: #2b91af">   6</span>         <span style="COLOR: blue">End</span><span style="COLOR: blue">If</span></p><p style="MARGIN: 0px"><span style="COLOR: #2b91af">   7</span>     <span style="COLOR: blue">End</span><span style="COLOR: blue">Function</span></p></div>
[/code]<br /><p>
Floyd
</p><p></p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=997295b9-23f7-4ded-8efa-bdb5dc3af91d" /></body>
      <title>Function: ReturnDBNull - neu aufgelegt</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=997295b9-23f7-4ded-8efa-bdb5dc3af91d</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=997295b9-23f7-4ded-8efa-bdb5dc3af91d</link>
      <pubDate>Wed, 08 Nov 2006 17:26:41 GMT</pubDate>
      <description>&lt;p&gt;
Im Artikel&amp;nbsp;&lt;a class=TitleLinkStyle href="http://blog.freakfabrik.net/PermaLink.aspx?guid=74447684-4fcc-424f-8888-f0785be80e91" rel=bookmark&gt;SQL-Injektion
oder Wie binde ich richtig für Anfänger&lt;/a&gt;&amp;nbsp;hatte ich vor einiger Zeit mal eine
Funktionsblock gepostet um NULL in eine Datenbank zu binden. Da ich die Funktion jetzt
mal wieder&amp;nbsp;brauchte wollt ich&amp;nbsp;sie natürlich gleich verbessern. Die neue
Version ist um einiges schlanker und hat auch keinen begrenzten Typenumfang mehr.
&lt;/p&gt;
[code]&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16     \cf2 Function\cf0  ReturnDBNull(\cf2 ByVal\cf0  value \cf2 As\cf0  VariantType) \cf2 As\cf0  \cf2 Object\par ??\cf0         \cf2 If\cf0  IsNothing(value) \cf2 Or\cf0  value = vbEmpty \cf2 Or\cf0  value = vbNull \cf2 Then\par ??\cf0             \cf2 Return\cf0  DBNull.Value\par ??        \cf2 Else\par ??\cf0             \cf2 Return\cf0  value\par ??        \cf2 End\cf0  \cf2 If\par ??\cf0     \cf2 End\cf0  \cf2 Function}
--&gt;
&lt;div style="FONT-SIZE: 8pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Function&lt;/span&gt; ReturnDBNull(&lt;span style="COLOR: blue"&gt;ByVal&lt;/span&gt; value &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Object&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Object&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; IsNothing(value) &lt;span style="COLOR: blue"&gt;Or&lt;/span&gt; value
= vbEmpty &lt;span style="COLOR: blue"&gt;Or&lt;/span&gt; value = vbNull &lt;span style="COLOR: blue"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Return&lt;/span&gt; DBNull.Value
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Return&lt;/span&gt; value
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
[/code]&lt;br&gt;
&lt;p&gt;
Floyd
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=997295b9-23f7-4ded-8efa-bdb5dc3af91d" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=997295b9-23f7-4ded-8efa-bdb5dc3af91d</comments>
      <category>Quellcode / .Net Framework 2.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=8d907b4f-9f93-40f0-b808-713b9425d671</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=8d907b4f-9f93-40f0-b808-713b9425d671</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=8d907b4f-9f93-40f0-b808-713b9425d671</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8d907b4f-9f93-40f0-b808-713b9425d671</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Über dieses Blog</strong>
        </p>
        <p>
Diese Blog habe ich im April 2006 aus ein wenig Langeweile und auf der Suche nach
etwas neuem auf die Beine gestellt mit dem Ziel es als eine Art privates Quellcodearchiv
zu verwenden. Der Schwerpunkt dieses Blogs liegt dabei auf <a href="http://de.wikipedia.org/wiki/Microsoft_.NET">.NET-Technologie</a> von <a href="http://de.wikipedia.org/wiki/Microsoft">Microsoft</a> wobei
ich mich nicht auf diese beschränke. Vorallem die Sprachen und Technologien die
ich beruflich und privat einsetze - wie zum Beispiel <a href="http://de.wikipedia.org/wiki/Active_Server_Pages">Active
Server Pages ASP</a>, <a href="http://de.wikipedia.org/wiki/MSSQL">MSSQL (T-SQL)</a> -
möchte in in diesem Blog ebenfalls behandeln.<br />
Hin und wieder kommt auch mal ein privater Post hinzu.
</p>
        <p>
          <strong>Über mich</strong>
        </p>
        <p>
Zu mir gibt es eigendlich nicht viel zu sagen. Ich wurde im August 1984 in Leipzig geboren
und lebe seither in einem kleinen Dorf etwa 25km von Leipzig entfernt. Im Dezember
1996 bekamm ich meinen ersten eigenen Computer den ich mir durch viel Hausarbeit schwer
erarbeiten musste. ^^ Internet war damals noch nicht und so musste ich mich mit einigen
wenigen Zeitschriften und den WSH- und VBS-Scripten begügen. So begann ich meine ersten
Begegnungen mit der Programmierei eher mit einigen spielereien an HTML, VBS und QBasic.Irgendwann
viel mir dann in der Bücherrei ein Buch über Visual Basic in die Hand. Nachdem ich
dieses Buch innerhalb von 2 Wochen begierig verschlugen hatte war wieder einmal Hausarbeit
fällig :D denn das Visual Studio 6 musste her. Als Schüler-Version war diese auch
relativ erschwinglich. Somit begann ich meine ersten Progrämmchen zu schreiben. Wärend
die anderen in meiner Klasse noch überlegten was Sie werden wollten stand es für mich
schon relativ zeitig Fest: Programmierer. Also beworb ich mich als Fachinformatiker
für Anwendungsentwicklung und fand eine Ausbildung bei der Stadt Leipzig. Nachdem
ich diese erfolgreich abschließen konnte musste ich eine weile Warten bis ich dann
endlich eine Firma fand die mich einstellen wollte. Doch diese Zeit hab ich intensiv
genutzt. .Net war grade frisch rausgekommen und wollte erobert werden. Zwischenzeitlich
verdiente ich mich hin und wieder durch kleiner Projekte ein paar Euro dazu. Das größte
war ein Verschlüsselungssystem für PDF-Dokumente für eine Schweitzer Bank. Damals
gab es noch eine sehr aktive Community im programmierer-borad.de und Zusammen mit
ein paar anderen Mitgliedern gründete ich damals das Projekt "Programmers-United"
und leitetet dieses Projekt über ein paar Jahre lang bis es Aufgrund von Teilnahmemangel
(begündet durch Abitur, Bund, etc. der aktivste Mitglieder) versiegte. Eine neue Aufgabe
in der Community musste her. Ich stieß auf <a href="http://www.it-academy.cc">it-acamdey</a> und
bewarb mich als Mitglied der Artikeladministration. Mitlerweile bin ich Nun dort
zum Bereichsleiter aufgestiegen.
</p>
        <p>
          <strong>Erfahungungen</strong>
        </p>
        <ul>
          <li>
VB.Net, ASP.Net (seit Version 1.0), Visual Basic 6, ASP, VBS, JavaScript, CSS,
HTML, XML, SQL (T-SQL) und Grundlagen in: Java, C, C++, PHP, C# 
</li>
          <li>
MSSQL-Server (2000 und 2005), Firebird, Access, SQLite, MySQL 
</li>
          <li>
Windows 95 bis Vista, Windows 2000 Server bis 2003 und Grundlagen in: Linux
(seit Suse Linux 7.0), Apple Mac OS X 
</li>
          <li>
Visual Studio .Net 2003 bis 2005, #Develop, CVS, Subversion 
</li>
          <li>
Microsoft Office, OpenOffice, Lotus Notes 
</li>
          <li>
...</li>
        </ul>
        <p>
Ich denke das sollte es erstmal übermich gewesen sein. Wer noch Fragen hat kann sich
gerne bei mir per <a onclick="javascript:var e1='%67%6d%78%2e%6e%65%74',e2='mailto: ', e3='%66%6c%6f%79%64%5f%33';var e0=e2+e3+'%40'+e1+'?Subject=Comments on: Freakfabrik Softwareschmiede - Das Blog';(window.location?window.location.replace(e0):document.write(e0));" href="#">eMail</a> melden.
</p>
        <img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=8d907b4f-9f93-40f0-b808-713b9425d671" />
      </body>
      <title>About me</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=8d907b4f-9f93-40f0-b808-713b9425d671</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=8d907b4f-9f93-40f0-b808-713b9425d671</link>
      <pubDate>Tue, 07 Nov 2006 15:12:44 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;Über dieses Blog&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Diese Blog habe ich im April 2006 aus ein wenig Langeweile und auf der Suche nach
etwas neuem auf die Beine gestellt mit dem Ziel es als eine Art&amp;nbsp;privates Quellcodearchiv
zu verwenden. Der Schwerpunkt dieses Blogs liegt dabei auf &lt;a href="http://de.wikipedia.org/wiki/Microsoft_.NET"&gt;.NET-Technologie&lt;/a&gt;&amp;nbsp;von &lt;a href="http://de.wikipedia.org/wiki/Microsoft"&gt;Microsoft&lt;/a&gt;&amp;nbsp;wobei
ich mich nicht auf diese beschränke. Vorallem die Sprachen und Technologien&amp;nbsp;die
ich beruflich und privat einsetze - wie zum Beispiel &lt;a href="http://de.wikipedia.org/wiki/Active_Server_Pages"&gt;Active
Server Pages ASP&lt;/a&gt;, &lt;a href="http://de.wikipedia.org/wiki/MSSQL"&gt;MSSQL (T-SQL)&lt;/a&gt;&amp;nbsp;-
möchte in in diesem Blog ebenfalls behandeln.&lt;br&gt;
Hin und wieder kommt auch mal ein privater Post hinzu.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Über mich&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Zu mir gibt es eigendlich nicht viel zu sagen. Ich wurde im August 1984 in Leipzig&amp;nbsp;geboren
und lebe seither in einem kleinen Dorf etwa 25km von Leipzig entfernt. Im Dezember
1996 bekamm ich meinen ersten eigenen Computer den ich mir durch viel Hausarbeit schwer
erarbeiten musste. ^^ Internet war damals noch nicht und so musste ich mich mit einigen
wenigen Zeitschriften und den WSH- und VBS-Scripten begügen. So begann ich meine ersten
Begegnungen mit der Programmierei eher mit einigen spielereien an HTML, VBS und QBasic.Irgendwann
viel mir dann in der Bücherrei ein Buch über Visual Basic in die Hand. Nachdem ich
dieses Buch innerhalb von 2 Wochen begierig verschlugen hatte war wieder einmal Hausarbeit
fällig :D denn das Visual Studio 6 musste her. Als Schüler-Version war diese auch
relativ erschwinglich. Somit begann ich meine ersten Progrämmchen zu schreiben. Wärend
die anderen in meiner Klasse noch überlegten was Sie werden wollten stand es für mich
schon relativ zeitig Fest: Programmierer. Also beworb ich mich als Fachinformatiker
für Anwendungsentwicklung und fand eine Ausbildung bei der Stadt Leipzig. Nachdem
ich diese erfolgreich abschließen konnte musste ich eine weile Warten bis ich dann
endlich eine Firma fand die mich einstellen wollte. Doch diese Zeit hab ich intensiv
genutzt. .Net war grade frisch rausgekommen und wollte erobert werden. Zwischenzeitlich
verdiente ich mich hin und wieder durch kleiner Projekte ein paar Euro dazu. Das größte
war ein Verschlüsselungssystem für PDF-Dokumente für eine Schweitzer Bank. Damals
gab es noch eine sehr aktive Community im programmierer-borad.de und Zusammen mit
ein paar anderen Mitgliedern gründete ich damals das Projekt "Programmers-United"
und leitetet dieses Projekt über ein paar Jahre lang bis es Aufgrund von Teilnahmemangel
(begündet durch Abitur, Bund, etc. der aktivste Mitglieder) versiegte. Eine neue Aufgabe
in der Community musste her. Ich stieß auf &lt;a href="http://www.it-academy.cc"&gt;it-acamdey&lt;/a&gt;&amp;nbsp;und
bewarb mich als Mitglied der Artikeladministration. Mitlerweile bin ich&amp;nbsp;Nun dort
zum&amp;nbsp;Bereichsleiter aufgestiegen.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Erfahungungen&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
VB.Net, ASP.Net (seit Version 1.0), Visual Basic 6, ASP,&amp;nbsp;VBS, JavaScript, CSS,
HTML, XML, SQL (T-SQL) und Grundlagen in: Java, C, C++, PHP, C# 
&lt;li&gt;
MSSQL-Server (2000 und 2005), Firebird, Access, SQLite, MySQL 
&lt;li&gt;
Windows 95&amp;nbsp;bis Vista, Windows 2000 Server&amp;nbsp;bis 2003 und Grundlagen in:&amp;nbsp;Linux
(seit Suse Linux 7.0), Apple Mac OS X 
&lt;li&gt;
Visual Studio .Net 2003 bis 2005, #Develop, CVS, Subversion 
&lt;li&gt;
Microsoft Office, OpenOffice, Lotus Notes 
&lt;li&gt;
...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Ich denke das sollte es erstmal übermich gewesen sein. Wer noch Fragen hat kann sich
gerne bei mir per &lt;a onclick="javascript:var e1='%67%6d%78%2e%6e%65%74',e2='mailto: ', e3='%66%6c%6f%79%64%5f%33';var e0=e2+e3+'%40'+e1+'?Subject=Comments on: Freakfabrik Softwareschmiede - Das Blog';(window.location?window.location.replace(e0):document.write(e0));" href="#"&gt;eMail&lt;/a&gt; melden.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=8d907b4f-9f93-40f0-b808-713b9425d671" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=8d907b4f-9f93-40f0-b808-713b9425d671</comments>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=fa7a1e54-88d8-4396-a37e-4d370c0f5e17</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=fa7a1e54-88d8-4396-a37e-4d370c0f5e17</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=fa7a1e54-88d8-4396-a37e-4d370c0f5e17</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fa7a1e54-88d8-4396-a37e-4d370c0f5e17</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Heute bin ich wiedermal in einem Forum auf die Frage gestoßen wie den Inhalt einer
Variable in die Zwischenablage kopieren, jedoch soll der Inhalt der Zwischenablage
auch nach Beendigung des Programms erhalten bleiben und somit anderen Programmen zur
Verfügung stehen.
</p>
        <p>
Die Lösung ist dabei Recht einfach. Die Funktion SetDataObject des Clipboard kopiert
bekanntlicherweise den Inhalt einer Variable in die Zwischenablage. Einen zweite
Parameter kann man jedoch optional noch angeben. Setzt man diesen auf "true" so sorgt
er dafür, dass der Inhalt nicht nach Beendigung des Programms wieder gelöscht
wird. Dies wird dann als "persistenz des Clipboard-Inhaltes" bezeichnet.
</p>
[code]<!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 \cf2 Dim\cf0  strDaten \cf2 As\cf0  \cf2 String\cf0  = \cf13 "TestString"\par ??\cf0 Clipboard.SetDataObject(strDaten, \cf2 True\cf0 )}
--><div style="FONT-SIZE: 8pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"><p style="MARGIN: 0px"><span style="COLOR: blue">Dim</span> strDaten <span style="COLOR: blue">As</span><span style="COLOR: blue">String</span> = <span style="COLOR: maroon">"TestString"</span></p><p style="MARGIN: 0px">
Clipboard.SetDataObject(strDaten, <span style="COLOR: blue">True</span>)
</p></div>
[/code] 
<p><br />
Floyd
</p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=fa7a1e54-88d8-4396-a37e-4d370c0f5e17" /></body>
      <title>Persistentes kopieren in die Zwischenablage</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=fa7a1e54-88d8-4396-a37e-4d370c0f5e17</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=fa7a1e54-88d8-4396-a37e-4d370c0f5e17</link>
      <pubDate>Tue, 07 Nov 2006 11:08:54 GMT</pubDate>
      <description>&lt;p&gt;
Heute bin ich wiedermal in einem Forum auf die Frage gestoßen wie den Inhalt einer
Variable in die Zwischenablage kopieren, jedoch soll der Inhalt der Zwischenablage
auch nach Beendigung des Programms erhalten bleiben und somit anderen Programmen zur
Verfügung stehen.
&lt;/p&gt;
&lt;p&gt;
Die Lösung ist dabei Recht einfach. Die Funktion SetDataObject des Clipboard kopiert
bekanntlicherweise den Inhalt einer Variable in die Zwischenablage.&amp;nbsp;Einen zweite
Parameter kann man jedoch optional noch angeben. Setzt man diesen auf "true" so sorgt
er&amp;nbsp;dafür, dass der Inhalt nicht nach Beendigung des Programms wieder gelöscht
wird. Dies wird dann als "persistenz des Clipboard-Inhaltes" bezeichnet.
&lt;/p&gt;
[code]&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs16 \cf2 Dim\cf0  strDaten \cf2 As\cf0  \cf2 String\cf0  = \cf13 "TestString"\par ??\cf0 Clipboard.SetDataObject(strDaten, \cf2 True\cf0 )}
--&gt;
&lt;div style="FONT-SIZE: 8pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; strDaten &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;String&lt;/span&gt; = &lt;span style="COLOR: maroon"&gt;"TestString"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
Clipboard.SetDataObject(strDaten, &lt;span style="COLOR: blue"&gt;True&lt;/span&gt;)
&lt;/p&gt;
&lt;/div&gt;
[/code] 
&lt;p&gt;
&lt;br&gt;
Floyd
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=fa7a1e54-88d8-4396-a37e-4d370c0f5e17" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=fa7a1e54-88d8-4396-a37e-4d370c0f5e17</comments>
      <category>Quellcode / .Net Framework 2.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=6317fc4b-a183-4c05-9696-b4fdc9897bea</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=6317fc4b-a183-4c05-9696-b4fdc9897bea</pingback:target>
      <dc:creator>Floyd</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=6317fc4b-a183-4c05-9696-b4fdc9897bea</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6317fc4b-a183-4c05-9696-b4fdc9897bea</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Hab soeben auf DasBlog 1.9.6264.0 upgedatet. Hab die Grundkonfiguration erstmal wieder
hergestellt. Morgen schau ich mir dann mal die Details an.
</p>
        <p>
 
</p>
        <p>
Gruß Floyd
</p>
        <p>
        </p>
        <img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=6317fc4b-a183-4c05-9696-b4fdc9897bea" />
      </body>
      <title>DasBlog Update (1.9.6264.0)</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=6317fc4b-a183-4c05-9696-b4fdc9897bea</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=6317fc4b-a183-4c05-9696-b4fdc9897bea</link>
      <pubDate>Fri, 06 Oct 2006 18:47:44 GMT</pubDate>
      <description>&lt;p&gt;
Hab soeben auf DasBlog 1.9.6264.0 upgedatet. Hab die Grundkonfiguration erstmal wieder
hergestellt. Morgen schau ich mir dann mal die Details an.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Gruß Floyd
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=6317fc4b-a183-4c05-9696-b4fdc9897bea" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=6317fc4b-a183-4c05-9696-b4fdc9897bea</comments>
      <category>dasBlog</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf</pingback:target>
      <dc:creator>k00ni</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Für die Zukunft möchte ich persönlich folgende
Datenbanksysteme integriert haben:<br /><br /><u>dienstgesteuerte DBSe:<br /><br /></u>- MySQL<br />
- MS SQL Server<br />
- PostgreSQL<br />
- Firebird<br />
- Interbase<br />
- Ingres<br /><br /><u>Datei-basierende DBSe:<br /><br /></u>- SQLite<br />
- MSAccess<br />
- Firebird<br /><br /><br />
k00ni<br /><br />
ps.: Welche Version und welche nicht, ist erstmal uninteressant. Aber ich lege das
Augenmerk nicht nur auf "New-Stuff", sondern auch auf "ältere" Systeme.<br /><p></p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf" /></body>
      <title>Unterstützte Datenbanksysteme - Die Zukunft</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf</link>
      <pubDate>Fri, 06 Oct 2006 16:25:47 GMT</pubDate>
      <description>Für die Zukunft möchte ich persönlich folgende Datenbanksysteme integriert haben:&lt;br&gt;
&lt;br&gt;
&lt;u&gt;dienstgesteuerte DBSe:&lt;br&gt;
&lt;br&gt;
&lt;/u&gt;- MySQL&lt;br&gt;
- MS SQL Server&lt;br&gt;
- PostgreSQL&lt;br&gt;
- Firebird&lt;br&gt;
- Interbase&lt;br&gt;
- Ingres&lt;br&gt;
&lt;br&gt;
&lt;u&gt;Datei-basierende DBSe:&lt;br&gt;
&lt;br&gt;
&lt;/u&gt;- SQLite&lt;br&gt;
- MSAccess&lt;br&gt;
- Firebird&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
k00ni&lt;br&gt;
&lt;br&gt;
ps.: Welche Version und welche nicht, ist erstmal uninteressant. Aber ich lege das
Augenmerk nicht nur auf "New-Stuff", sondern auch auf "ältere" Systeme.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=6dbbb4f0-8d0f-4700-9c3a-aa516e4831cf</comments>
      <category>Projekte / equal</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=b0e44763-c21a-4949-bc24-34aebd536b88</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=b0e44763-c21a-4949-bc24-34aebd536b88</pingback:target>
      <dc:creator>k00ni</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=b0e44763-c21a-4949-bc24-34aebd536b88</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b0e44763-c21a-4949-bc24-34aebd536b88</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div align="justify">Ich habe mir lange Gedanken darüber gemacht. Und ich denke, wir
sollten am Anfang 2-gleisig fahren. Einseits sollten wir die Open-Source-Datenbanksysteme
unterstützten. Andererseits auch die komerziellen, speziell aber die, die auch von
den "kleinen Leuten" genutzt werden. 
<br /><br />
Deshalb würde ich MySQL und MS Access angehen. MySQL deshalb, weil ich damit schon
seit fast 3 - 4 Jahren mehr oder weniger gearbeitet habe, meist in Verbindung mit
PHP. Ich kenne mich dort so aus, das ich schnell und effektiv administrative Aufgaben
lösen kann. MS Access wegen der starken Verwendung in privaten Haushalten und in sehr
kleinen Firmen. 
<br /><br />
Später würde ich dann auf MS SQL Server und SQLite gehen, je nachdem, was der Floyd
dazu sagt.<br /><br />
Dieser Post ist nur ein Vorschlag und noch nicht endgültig, es darf also diskutiert
werden.<br /><br /><u>Noch eine Anmerkung:</u> Wir sollten versuchen jetzt am Anfang viele "verschiedene"
Datenbanksysteme zu integrieren. Liegt daran, dass wir dann später Muster haben, wo
wir bei gleichartigen System ansätzen können. 
<br />
Mit dieser Formulierung meine ich Datenbanksysteme, die einerseits per Dienst betrieben
werden (MySQL, PostgreSQL, MSSQL Server). Oder als reines "Ein-Datei"-System, wie
beispielsweise SQLite. 
<br /><br /><br />
k00ni<br /></div>
        <p>
        </p>
        <img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=b0e44763-c21a-4949-bc24-34aebd536b88" />
      </body>
      <title>Unterstützte Datenbanksysteme</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=b0e44763-c21a-4949-bc24-34aebd536b88</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=b0e44763-c21a-4949-bc24-34aebd536b88</link>
      <pubDate>Fri, 06 Oct 2006 16:20:12 GMT</pubDate>
      <description>&lt;div align="justify"&gt;Ich habe mir lange Gedanken darüber gemacht. Und ich denke, wir
sollten am Anfang 2-gleisig fahren. Einseits sollten wir die Open-Source-Datenbanksysteme
unterstützten. Andererseits auch die komerziellen, speziell aber die, die auch von
den "kleinen Leuten" genutzt werden. 
&lt;br&gt;
&lt;br&gt;
Deshalb würde ich MySQL und MS Access angehen. MySQL deshalb, weil ich damit schon
seit fast 3 - 4 Jahren mehr oder weniger gearbeitet habe, meist in Verbindung mit
PHP. Ich kenne mich dort so aus, das ich schnell und effektiv administrative Aufgaben
lösen kann. MS Access wegen der starken Verwendung in privaten Haushalten und in sehr
kleinen Firmen. 
&lt;br&gt;
&lt;br&gt;
Später würde ich dann auf MS SQL Server und SQLite gehen, je nachdem, was der Floyd
dazu sagt.&lt;br&gt;
&lt;br&gt;
Dieser Post ist nur ein Vorschlag und noch nicht endgültig, es darf also diskutiert
werden.&lt;br&gt;
&lt;br&gt;
&lt;u&gt;Noch eine Anmerkung:&lt;/u&gt; Wir sollten versuchen jetzt am Anfang viele "verschiedene"
Datenbanksysteme zu integrieren. Liegt daran, dass wir dann später Muster haben, wo
wir bei gleichartigen System ansätzen können. 
&lt;br&gt;
Mit dieser Formulierung meine ich Datenbanksysteme, die einerseits per Dienst betrieben
werden (MySQL, PostgreSQL, MSSQL Server). Oder als reines "Ein-Datei"-System, wie
beispielsweise SQLite. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
k00ni&lt;br&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=b0e44763-c21a-4949-bc24-34aebd536b88" /&gt;</description>
      <comments>http://blog.freakfabrik.net/CommentView.aspx?guid=b0e44763-c21a-4949-bc24-34aebd536b88</comments>
      <category>Projekte / equal</category>
    </item>
    <item>
      <trackback:ping>http://blog.freakfabrik.net/Trackback.aspx?guid=0826e764-1865-4a46-9f30-2bfedf8b18e4</trackback:ping>
      <pingback:server>http://blog.freakfabrik.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.freakfabrik.net/PermaLink.aspx?guid=0826e764-1865-4a46-9f30-2bfedf8b18e4</pingback:target>
      <dc:creator>k00ni</dc:creator>
      <wfw:comment>http://blog.freakfabrik.net/CommentView.aspx?guid=0826e764-1865-4a46-9f30-2bfedf8b18e4</wfw:comment>
      <wfw:commentRss>http://blog.freakfabrik.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0826e764-1865-4a46-9f30-2bfedf8b18e4</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <b>Zu meiner Abwesenheit</b>
        <br />
        <br />
Es ist schon eine Weile her, dass ich hier etwas gebloggt habe. Das lag daran, dass
ich bei der Bundeswehr meine AGA (Allgemeine Grundausbildung) absolviert habe. Nächste
Woche Donnerstag wechsele ich dann den Standort von Bremen (Schwanewede) nach Leipzig
(Delitzsch). Während dieser Zeit ist mir kaum möglich gewesen etwas am Quellcode zu
basteln. Einerseits hatte ich die ersten Wochen so gut wie keine Zeit. Andererseits
war ich so geschafft, dass mir in freien Minuten, die selten waren, einfach die Kraft
fehlte, etwas zu programmieren. Da habe ich mich lieber mal ein paar Stunden aufs
Ohr gehauen.<br /><br />
Wie dem auch sei, die AGA ist vorbei und nun beginnt das "normale" Soldatenleben.
Wie es da mit meiner Zeit aussieht weiß ich nicht. Aber die letzten 2 Wochen habe
ich langsam wieder angefangen und am equal-Projekt weitergearbeitet. Ich hoffe, dass
ich dass den Rest meiner Wehrdienstzeit auch kann. 
<br /><br /><br /><b>Zur Entwicklung des Projektes<br /><br /></b>In dieser Richtung hat sich einiges getan. Schon vor 3 Monaten konnte man sich
aus einer ausgwählten Datenbank alle Tabellen anzeigen lassen, sowie den Inhalt einer
bestimmten dazu. Nun arbeite ich daran, dass man neue Tabellen anlegen kann. Dazu
habe ich die Bibliothek equal.Objects überarbeitet und neue Objekte hinzugefügt bzw.
bestehende modifiziert oder gelöscht. 
<br /><br />
2 Punkte sind sehr markant bis jetzt:<br /><br />
Einerseits habe ich das Verhalten des Providers geändert. Es sind nun nicht mehr alle
Funktionen in einer Klasse zu finden, sondern sind auf 3 aufgeteilt wurden: ConnectionFunctions,
TableFunctions und DatabaseFunctions. Damit wird die ganze Sache ressourcenschonender,
da bei der Arbeit mit Tabellen nicht unbedingt auch Funktionen für Datenbanken oder
Verbindungen braucht. Diese würden nämlich sonst zusätzlich mitgeladen werden. 
<br />
Andererseits habe ich mich dazu entschlossen, den Kern des Projektes komplett in C#
zu schreiben. Dazu gehört der Namespace equal, als auch equal.Objects. Letzteres war
erst in Visual Basic verfasst wurden, um dem Floyd etwas entgegen zukommen. Wenn man
aber bei der Entwicklung ständig zwischen den Sprachen springen muss, dass bremst
dass unnötig. Zusätzlich dazu schreibe ich auch den MySQL 5.0 Povider in C#. 
<br /><br />
Bei der Portierung des Quellcodes sind mir viele kleine Fehler aufgefallen (inkonsistente
Variablennamen, aufgeblähte Klassen etc.), welche ich gleich behoben habe. Ich denke
mit diesem Schritt fahre ich bei der Entwicklung besser. Ich hoffe, dass der Floyd
es versteht :)<br /><br /><b><br />
Ein Blick in die Glaskugel</b><br /><br />
Ich werde die nächsten Stunden damit verbringen, das Anlegen, Modifizieren und Löschen
von MySQL 5.0 Tabellen zu implementieren. Als nächster Punkt ist das Anlegen und Löschen
von Datenbanken dran. Ist das komplett geschafft, so werde ich dies in Visual Basic
.NET für den MS SQL Server portieren. Der Floyd drängte schon am Anfang, dass wir
den MS SQL Server mit reinnehmen. Ich werde aber erstmal den 2000er nehmen, da ich
denke, dass die 2005er Version noch nicht sehr verbreitet ist. 
<br /><br />
Vom Projektmäßigen her wars das erstmal von meiner Seite. Ich schätze in ein bis 2
Wochen wird das erledigt sein, je nachdem wie es der Bund zulässt. Stehen die Grundfunktionen
des Frameworks, dann wird es auch endlich mal einen Download dazu geben. Aber dazu
später mehr, denn im jetzigen Zustand zerballert ihr euch eure Datenbanksysteme nur
damit, statt was vernünftiges damit anzustellen.<br /><br /><br />
k00ni<br /><br />
PostSkriptum: Ich spiele mit dem Gedanken, ein Add-In für das VS.NET 2005 zu schreiben,
welches das Entwickeln von Anwendungen für das equal-Framework erlaubt.<p></p><img width="0" height="0" src="http://blog.freakfabrik.net/aggbug.ashx?id=0826e764-1865-4a46-9f30-2bfedf8b18e4" /></body>
      <title>equal Reloaded</title>
      <guid isPermaLink="false">http://blog.freakfabrik.net/PermaLink.aspx?guid=0826e764-1865-4a46-9f30-2bfedf8b18e4</guid>
      <link>http://blog.freakfabrik.net/PermaLink.aspx?guid=0826e764-1865-4a46-9f30-2bfedf8b18e4</link>
      <pubDate>Sat, 23 Sep 2006 20:36:58 GMT</pubDate>
      <description>&lt;b&gt;Zu meiner Abwesenheit&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Es ist schon eine Weile her, dass ich hier etwas gebloggt habe. Das lag daran, dass
ich bei der Bundeswehr meine AGA (Allgemeine Grundausbildung) absolviert habe. Nächste
Woche Donnerstag wechsele ich dann den Standort von Bremen (Schwanewede) nach Leipzig
(Delitzsch). Während dieser Zeit ist mir kaum möglich gewesen etwas am Quellcode zu
basteln. Einerseits hatte ich die ersten Wochen so gut wie keine Zeit. Andererseits
war ich so geschafft, dass mir in freien Minuten, die selten waren, einfach die Kraft
fehlte, etwas zu programmieren. Da habe ich mich lieber mal ein paar Stunden aufs
Ohr gehauen.&lt;br&gt;
&lt;br&gt;
Wie dem auch sei, die AGA ist vorbei und nun beginnt das "normale" Soldatenleben.
Wie es da mit meiner Zeit aussieht weiß ich nicht. Aber die letzten 2 Wochen habe
ich langsam wieder angefangen und am equal-Projekt weitergearbeitet. Ich hoffe, dass
ich dass den Rest meiner Wehrdienstzeit auch kann. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Zur Entwicklung des Projektes&lt;br&gt;
&lt;br&gt;
&lt;/b&gt;In dieser Richtung hat sich einiges getan. Schon vor 3 Monaten konnte man sich
aus einer ausgwählten Datenbank alle Tabellen anzeigen lassen, sowie den Inhalt einer
bestimmten dazu. Nun arbeite ich daran, dass man neue Tabellen anlegen kann. Dazu
habe ich die Bibliothek equal.Objects überarbeitet und neue Objekte hinzugefügt bzw.
bestehende modifiziert oder gelöscht. 
&lt;br&gt;
&lt;br&gt;
2 Punkte sind sehr markant bis jetzt:&lt;br&gt;
&lt;br&gt;
Einerseits habe ich das Verhalten des Providers geändert. Es sind nun nicht mehr alle
Funktionen in einer Klasse zu finden, sondern sind auf 3 aufgeteilt wurden: ConnectionFunctions,
TableFunctions und DatabaseFunctions. Damit wird die ganze Sache ressourcenschonender,
da bei der Arbeit mit Tabellen nicht unbedingt auch Funktionen für Datenbanken oder
Verbindungen braucht. Diese würden nämlich sonst zusätzlich mitgeladen werden. 
&lt;br&gt;
Anderersei