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

<channel>
	<title>entwicklungsgedanken &#187; Verschiedenes</title>
	<atom:link href="http://www.entwicklungsgedanken.de/category/verschiedenes/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.entwicklungsgedanken.de</link>
	<description>Verschiedene Gedanken rund um die Softwareentwicklung</description>
	<lastBuildDate>Thu, 29 Jul 2010 11:09:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>WITH-Klausel</title>
		<link>http://www.entwicklungsgedanken.de/2010/04/15/with-klausel/</link>
		<comments>http://www.entwicklungsgedanken.de/2010/04/15/with-klausel/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 09:52:00 +0000</pubDate>
		<dc:creator>clausbajor</dc:creator>
				<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Verschiedenes]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2010/04/15/with-klausel/</guid>
		<description><![CDATA[In der Praxis trifft man von Zeit zu Zeit auf aufgeblaehte SQL-Queries, die ausserordentlich kostenintensiven und langwierigen Ausfuehrungsplaenen folgen. Zeigt eine weitergehende Analyse, dass die komplexe Abfrage eine oder mehrere Subqueries enthaelt, die mehrfach ausgefuehrt werden, dann besteht eine sehr gute Chance durch Verwendung der sogenannten WITH-Klausel, die Performance der Abfrageausfuehrung erheblich zu steigern. Im [...]]]></description>
			<content:encoded><![CDATA[<p>In der Praxis trifft man von Zeit zu Zeit auf aufgeblaehte SQL-Queries, die ausserordentlich kostenintensiven und langwierigen Ausfuehrungsplaenen folgen.    <br />Zeigt eine weitergehende Analyse, dass die komplexe Abfrage eine oder mehrere Subqueries enthaelt, die mehrfach ausgefuehrt werden, dann besteht eine sehr     <br />gute Chance durch Verwendung der sogenannten WITH-Klausel, die Performance der Abfrageausfuehrung erheblich zu steigern. </p>
<p>Im Kern wird die schnellere Ausfuehrung der Query dadurch realisiert, dass mittels der WITH-Klausel die Ergebnismenge der Subquery vorab materialisiert, mit einem Namen versehen und schliesslich in der Hauptquery abgegriffen wird.    <br />Hier lohnt sich auch ein Vergleich und Gebrauch von &quot;global temporary tables&quot;, die in Ihrer Funktions- und Wirkungsweise durchaus ähnlich sind:     <br />Durch Entkopplung geeigneter Subqueries, die urspruenglich als Bestandteile einer komplexen Abfrage fungierten, wird dieses SQL-Statement vereinfacht.</p>
</p>
<div class="wp_syntax" style="padding-bottom: 0px">
<div class="code">
<pre style="font-family: monospace">
WITH   SQ1 AS (SELECT...FROM...WHERE...),
       SQ2 AS (SELECT...FROM...WHERE...)
SELECT...
  FROM Q1, SQ1, SQ2 WHERE…</pre>
</p></div>
</div>
<p>Interessanter Nebeneffekt:</p>
<p>Durch die Verwendung der WITH-Klausel wird anscheinend in einer Systemumgebung mit voreingestelltem CURSOR_SHARING=FORCE offensichtlich fuer die Query-Ausfuehrung diese systemweit gueltige Einstellung auf CURSOR_SHARING=EXACT zurueckgenommen (vergleichbar dem Einsatz des Hint /*+ cursor_sharing_exact */).</p>
<p>Zeigen die QEPs vorher noch eine allgemeine Ersetzung von Konstanten durch Parameter, so weisen die QEPs nachher die direkte Verwendung der Konstanten auf.</p>
<p>Somit orientiert sich der Optimizer auch grundsaetzlich an anderen Zugriffsstrategien.</p>
<p>Was in einer Umgebung mit problematischem Parseverhalten per Bindvariablen-Peeking einen &quot;flüssigen&quot; Anwendungsbetrieb ermöglichen kann, wird im Einzelfall einer komplexen Query unter Verwendung von Attributen mit stark ungleicher Werteverteilung zu relativ kostenintensiven QEPs führen. </p>
<p>Es empfiehlt sich dann für alle entsprechenden Konstanten/Parameter einen separaten und speziellen QEP zu erzwingen. </p>
<p>Vorraussetzung: </p>
<p>SQL-99 Standard bzw. Oracle9i Release 2</p>
<p>Links:</p>
<p><a title="SQLStandards.html" href="http://www.wiscorp.com/SQLStandards.html" target="_blank">SQLStandards.html</a> </p>
<p>to be continued….</p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2010/04/15/with-klausel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blockierende SQL-Session</title>
		<link>http://www.entwicklungsgedanken.de/2010/04/05/blockierende-sql-session/</link>
		<comments>http://www.entwicklungsgedanken.de/2010/04/05/blockierende-sql-session/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 07:59:00 +0000</pubDate>
		<dc:creator>Sven Thämar</dc:creator>
				<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[Blockierende SQL Session]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2010/01/24/blockierende-sql-session/</guid>
		<description><![CDATA[Folgendes SQL-Statement kann man verwenden wenn man prüfen möchte ob es blockierende Sitzungen gibt. SELECT , b.username blocking_username , b.osuser blocking_osuser , b.machine blocking_machine , b.program blocking_program , w.sid waiting_sid , w.username waiting_username , w.osuser waiting_osuser , w.machine waiting_machine , w.seconds_in_wait FROM v$SESSION w , v$SESSION b WHERE w.blocking_session is not NULL AND b.sid = [...]]]></description>
			<content:encoded><![CDATA[<p>Folgendes SQL-Statement kann man verwenden wenn man prüfen möchte ob es blockierende Sitzungen gibt.</p>
<p> </br>
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;">
SELECT
     , b.username blocking_username
     , b.osuser blocking_osuser
     , b.machine blocking_machine
     , b.program blocking_program
     , w.sid waiting_sid
     , w.username waiting_username
     , w.osuser waiting_osuser
     , w.machine waiting_machine
     , w.seconds_in_wait
  FROM v$SESSION w
     , v$SESSION b
 WHERE w.blocking_session is not NULL
   AND b.sid = w.blocking_session
 ORDER BY w.sid
</pre>
</div>
</div>
<p>Das Statement kann jederzeit um weitere Spalten erweitert werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2010/04/05/blockierende-sql-session/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing &#8220;error while loading shared libraries: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory.&#8221;</title>
		<link>http://www.entwicklungsgedanken.de/2009/12/15/fixing-error-while-loading-shared-libraries-libgssapi_krb5-so-2-cannot-open-shared-object-file-no-such-file-or-directory/</link>
		<comments>http://www.entwicklungsgedanken.de/2009/12/15/fixing-error-while-loading-shared-libraries-libgssapi_krb5-so-2-cannot-open-shared-object-file-no-such-file-or-directory/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 13:50:45 +0000</pubDate>
		<dc:creator>Eric Bartels</dc:creator>
				<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[libgssapi_krb5.so.2]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2009/12/15/fixing-error-while-loading-shared-libraries-libgssapi_krb5-so-2-cannot-open-shared-object-file-no-such-file-or-directory/</guid>
		<description><![CDATA[One of my development systems is running on Debian Lenny (no this one does not host SharePoint). After update the system via apt-get update something went wrong and “core services” (samba, ssh) were out of order. It seems this is a bug in the packages provided by Debian. After struggling for a while a simple [...]]]></description>
			<content:encoded><![CDATA[<p>One of my development systems is running on Debian Lenny (no this one does not host SharePoint). After update the system via apt-get update something went wrong and “core services” (samba, ssh) were out of order.</p>
<p>It seems this is a bug in the packages provided by Debian. After struggling for a while a simple</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libkrb53 <span style="color: #660033;">--reinstall</span></pre></div></div>

<p>fixed the problem and everything works again. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2009/12/15/fixing-error-while-loading-shared-libraries-libgssapi_krb5-so-2-cannot-open-shared-object-file-no-such-file-or-directory/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using WinMerge for file-diffs of local and remote-files within WinSCP</title>
		<link>http://www.entwicklungsgedanken.de/2009/06/03/using-winmerge-for-file-diffs-of-local-and-remote-files-within-winscp/</link>
		<comments>http://www.entwicklungsgedanken.de/2009/06/03/using-winmerge-for-file-diffs-of-local-and-remote-files-within-winscp/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 17:20:22 +0000</pubDate>
		<dc:creator>Eric Bartels</dc:creator>
				<category><![CDATA[Tools and Helpers]]></category>
		<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[compare]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[winmerge]]></category>
		<category><![CDATA[winscp]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/?p=273</guid>
		<description><![CDATA[I use WinSCP for connections to remote linux-servers. WinSCP has a nice feature which allows the user to define custom commands. One pre-defined command is &#8220;File Compare&#8221;. It allows the comparision of local and remote files. The default-setting is not very comfortable. I simply added the following &#8220;code&#8221; as custom command. &#34;C:\Program Files (x86)\WinMerge\WinMergeU.exe&#34; /u [...]]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://winscp.net/">WinSCP</a> for connections to remote linux-servers. WinSCP has a nice feature which allows the user to define custom commands. One pre-defined command is &#8220;File Compare&#8221;. It allows the comparision of local and remote files. The default-setting is not very comfortable. I simply added the following &#8220;code&#8221; as custom command.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #ff0000;">&quot;C:\Program Files (x86)\WinMerge\WinMergeU.exe&quot;</span> <span style="color: #000000; font-weight: bold;">/</span>u <span style="color: #ff0000;">&quot;!&quot;</span> <span style="color: #ff0000;">&quot;!^!&quot;</span></pre></div></div>

<p>Now WinSCP uses <a href="http://winmerge.org/">WinMerge</a> for every file comparison of local and remote files. Just set the path to WinMerge to <strong>your</strong> install path of WinMerge and you get comfortable and powerful file comparison. Additional command line arguments for WinMerge can be found <a href="http://winmerge.org/docs/manual/CommandLine.html">here</a>.</p>
<p>Here are two screen shots of WinSCP where you set the custom command.</p>
<p><a style="margin-right:10px" href="http://www.entwicklungsgedanken.de/wp-content/uploads/2009/06/winscp.png"><img class="alignnone size-thumbnail wp-image-272" title="winscp" src="http://www.entwicklungsgedanken.de/wp-content/uploads/2009/06/winscp-150x150.png" alt="winscp" width="150" height="150" /></a><a href="http://www.entwicklungsgedanken.de/wp-content/uploads/2009/06/winscp-winmerge.png"><img class="alignnone size-thumbnail wp-image-271" title="winscp-winmerge" src="http://www.entwicklungsgedanken.de/wp-content/uploads/2009/06/winscp-winmerge-150x150.png" alt="winscp-winmerge" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2009/06/03/using-winmerge-for-file-diffs-of-local-and-remote-files-within-winscp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementierung einer Zugriffssteuerung in Forms</title>
		<link>http://www.entwicklungsgedanken.de/2008/07/19/implementierung-einer-zugriffssteuerung-in-forms/</link>
		<comments>http://www.entwicklungsgedanken.de/2008/07/19/implementierung-einer-zugriffssteuerung-in-forms/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 11:34:42 +0000</pubDate>
		<dc:creator>Sven Thämar</dc:creator>
				<category><![CDATA[Verschiedenes]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2008/07/19/implementierung-einer-zugriffssteuerung-in-forms/</guid>
		<description><![CDATA[Dieser Beitrag soll einen Leitfaden zur Implementierung einer Zugriffssteuerung f&#252;r Tabellen sein. Zugriffssteuerung hei&#223;t dabei, das der Anwender in der Regel keine Rechte auf eine Tabelle bekommt. Diese Zugriffsteuerung kann auch innerhalb von Forms verwendet werden. Die gesamten Transaktionen einer Tabelle laufen &#252;ber ein Interface welches sich aufteilt in View Instead-Of-Trigger des Views Routinen zur [...]]]></description>
			<content:encoded><![CDATA[<p>Dieser Beitrag soll einen Leitfaden zur Implementierung einer Zugriffssteuerung f&#252;r Tabellen sein.    </p>
<p>Zugriffssteuerung hei&#223;t dabei, das der Anwender in der Regel keine Rechte auf eine Tabelle bekommt. Diese Zugriffsteuerung kann auch innerhalb von Forms verwendet werden. Die gesamten Transaktionen einer Tabelle laufen &#252;ber ein Interface welches sich aufteilt in</p>
<ul>
<li>View </li>
<li>Instead-Of-Trigger des Views </li>
<li>Routinen zur Steuerung der Transaktionen      <br />- doValidate       <br />- doInsert       <br />- doUpdate       <br />- doDelete       <br />- getNewID       <br />- getDefaultTableValues </li>
</ul>
<p>Dar&#252;ber hinaus sollten auch alle Datensatzgruppen und sonstige Zugriffe innerhalb von Forms ausschlie&#223;lich &#252;ber Views erfolgen. Dadurch ist ein Zugriff auf die Tabellen ausschlie&#223;lich &#252;ber das Interface gew&#228;hrleistet.   </p>
<p>Das folgende Schaubild soll die zusammenh&#228;nge Veranschaulichen</p>
<p><a href="http://www.entwicklungsgedanken.de/wp-content/uploads/2008/07/dbinterface001.jpg"><img height="244" alt="DBInterface001" src="http://www.entwicklungsgedanken.de/wp-content/uploads/2008/07/dbinterface001-thumb.jpg" width="591" border="0" /></a></p>
<p>Um eine optimale Zugriffssteuerung zu bekommen, sollten alle Tabellen einen Prim&#228;rschl&#252;ssel aufweisen. Am idealsten &#252;ber eine fortlaufende Nummer. Eine Eindeutigkeit eines Datensatzes kann auch zus&#228;tzlich &#252;ber einen Unique-Key realisiert werden.</p>
<h3>View</h3>
<p>Der View selber sorgt zu allererst f&#252;r die Bereitstellung der Daten aus der Tabelle. Im einfachsten Fall ist der View ein 1:1 Abbild der Tabelle.</p>
<h3>Instead-Of-Trigger</h3>
<p>&#220;ber den Instead-Of-Trigger wird gesteuert welche Aktion gegen die Tabelle ausgef&#252;hrt werden soll. &#220;ber die Routine doValidate kann zus&#228;tzlich noch eine Business-Logik eingebaut werden.</p>
<h3>Routinen</h3>
<h4>getNewID</h4>
<p>Mit dieser Funktion wird die n&#228;chste ID (i.d.R. &#252;ber eine Sequence) ermittelt. Aus diesem Grund (Sequence) sollte eine Tabelle immer einen einfachen (Typ Number) Prim&#228;rschl&#252;ssel aufweisen.&#160; Diese Funktion kann sowohl in Forms (Pre-Insert) als auch beim doInsert eingebunden werden.</p>
<h4>getDefaultTableValues</h4>
<p>Diese Funktion liefert die Defaultwerte der zugrundeliegenden Tabelle und sollte in Forms im Trigger &quot;When-Create-Record&quot; eingebunden werden.</p>
<h4>doValidate</h4>
<p>Mit dieser Routine kann eine ben&#246;tigte Gesch&#228;ftslogik abgebildet werden. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2008/07/19/implementierung-einer-zugriffssteuerung-in-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dateien aus einer &#8220;Working-Copy&#8221; ohne die SVN-Metainformationen kopieren</title>
		<link>http://www.entwicklungsgedanken.de/2008/02/13/dateien-aus-einer-working-copy-ohne-die-svn-metainformationen-kopieren/</link>
		<comments>http://www.entwicklungsgedanken.de/2008/02/13/dateien-aus-einer-working-copy-ohne-die-svn-metainformationen-kopieren/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 15:07:23 +0000</pubDate>
		<dc:creator>Eric Bartels</dc:creator>
				<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[kopieren]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[xcopy]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2008/02/13/dateien-aus-einer-working-copy-ohne-die-svn-metainformationen-kopieren/</guid>
		<description><![CDATA[Es kann passieren, dass man lediglich die Dateien aus der &#8220;Working-Copy&#8221; des Repositories benötigt und zwar gänzlich ohne die Subversion-Metainformationen. svn export Ein svn export kommt nicht in Frage. Die Änderungen wurden noch nicht ins Repository übertragen und dies ist auch nicht mehr möglich, denn das Repository ist nicht mehr vorhanden. xcopy xcopy /E /C [...]]]></description>
			<content:encoded><![CDATA[<div class="lang-de"></div>
<p>Es kann passieren, dass man lediglich die Dateien aus der &#8220;Working-Copy&#8221; des Repositories benötigt und zwar gänzlich ohne die Subversion-Metainformationen.</p>
<h4>svn export</h4>
<p>Ein <code>svn export</code> kommt nicht in Frage. Die Änderungen wurden noch nicht ins Repository übertragen und dies ist auch nicht mehr möglich, denn das Repository ist nicht mehr vorhanden.</p>
<h4>xcopy</h4>

<div class="wp_syntax"><div class="code"><pre class="batch" style="font-family:monospace;">xcopy /E /C /EXCLUDE:c:\exclude-svn.txt c:\working-copy c:\ziel</pre></div></div>

<p>Die Datei <strong>exclude-svn.txt</strong> enthält genau eine Zeile: .svn</p>
<p>Das Verzeichnis <strong>c:\ziel </strong> enthält nach dem Ausführen des Befehls alle Dateien aus <strong>c:\working-copy</strong>, jedoch ohne die Subversion-Metainformationen (.svn).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2008/02/13/dateien-aus-einer-working-copy-ohne-die-svn-metainformationen-kopieren/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Oracle Forms &#124; Datenbl&#246;cke (Stored Procedure vs. Base Table (View))</title>
		<link>http://www.entwicklungsgedanken.de/2008/02/03/oracle-forms-datenblcke-stored-procedure-vs-base-table-view/</link>
		<comments>http://www.entwicklungsgedanken.de/2008/02/03/oracle-forms-datenblcke-stored-procedure-vs-base-table-view/#comments</comments>
		<pubDate>Sun, 03 Feb 2008 18:11:04 +0000</pubDate>
		<dc:creator>Sven Thämar</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[Base Table]]></category>
		<category><![CDATA[Oracle Forms]]></category>
		<category><![CDATA[Stored Procedure]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2008/02/03/oracle-forms-datenblcke-stored-procedure-vs-base-table-view/</guid>
		<description><![CDATA[Allgemein In Oracle-Forms hat man die M&#246;glichkeit, sich die Daten f&#252;r die Bildschirmmasken &#252;ber verschiedene Wege anzeigen zu lassen. Diese Wege sollen hier unter zwei Gesichtspunkten kurz erl&#228;utert und gegen&#252;bergestellt werden.&#160; Der erste Gesichtspunkt widmet sich der allgemeinen Unterst&#252;tzung des Programmierers durch Oracle-Forms. Der zweite Gesichtspunkt befasst sich mit dem Zusammenspiel von Oracle-Forms bez&#252;glich des [...]]]></description>
			<content:encoded><![CDATA[<h3>Allgemein</h3>
<p>In Oracle-Forms hat man die M&#246;glichkeit, sich die Daten f&#252;r die Bildschirmmasken &#252;ber verschiedene Wege anzeigen zu lassen. Diese Wege sollen hier unter zwei Gesichtspunkten kurz erl&#228;utert und gegen&#252;bergestellt werden.&#160; </p>
<p>Der erste Gesichtspunkt widmet sich der allgemeinen Unterst&#252;tzung des Programmierers durch Oracle-Forms. Der zweite Gesichtspunkt befasst sich mit dem Zusammenspiel von Oracle-Forms bez&#252;glich des Konzeptes des <b>Model-View-Controller</b> (MVC). Also mit der Trennung zwischen der Pr&#228;sentation, der Steuerung und der Haltung (inkl. Gesch&#228;ftslogik) der Daten.&#160;&#160; </p>
<h3>Allgemeinen Unterst&#252;tzung des Programmierers durch Oracle-Forms</h3>
<h6>1. Zugriff &#252;ber Tabellen</h6>
<p align="justify">Dies ist wohl der am Besten unterst&#252;tzte Zugriff auf die Daten. Oracle-Forms regelt alle Zugriffe, inkl. dem Sperren von Datens&#228;tzen, als auch die notwendigen Transaktionen im Hintergrund automatisch. Der Programmierer kann sich um das Wesentlich k&#252;mmern. </p>
<table cellspacing="0" cellpadding="2" width="595" border="1">
<tbody>
<tr>
<td valign="top" width="276">Vorteil</td>
<td valign="top" width="317">Nachteil</td>
</tr>
<tr>
<td valign="top" width="277">Automatische Regelung aller Transaktionen</td>
<td valign="top" width="316">erh&#246;hte Netzbelastung durch POST-QUERY Aktionen</td>
</tr>
<tr>
<td valign="top" width="278">Unterst&#252;tzung der RETURNING-Klausel</td>
<td valign="top" width="316">&#160;</td>
</tr>
<tr>
<td valign="top" width="278">Direkter Zugriff auf die Tabellen</td>
<td valign="top" width="316">&#160;</td>
</tr>
<tr>
<td valign="top" width="278">Automatische Steuerung bei Master-Detail-Beziehungen</td>
<td valign="top" width="316">&#160;</td>
</tr>
<tr>
<td valign="top" width="278">Zugriff bei der Suche auf alle Tabellen gebundenen Feldern</td>
<td valign="top" width="316">&#160;</td>
</tr>
<tr>
<td valign="top" width="278">&#160;</td>
<td valign="top" width="316">&#160;</td>
</tr>
</tbody>
</table>
<h6>2. Zugriff &#252;ber Views</h6>
<p>Dieser Zugriff ist, neben dem direkten Tabellenzugriff, der zweitbeste unterst&#252;tze Weg. Hierbei hat der Entwickler jedoch die M&#246;glichkeit mit INSTEAD-OF-Triggern die Daten auf Ebene der Datenbank weiter zu verarbeiten. Letztendlich wird der Zugriff &#252;ber Views genau so unterst&#252;tzt als wenn der Zugriff direkt auf der Tabelle erfolgt. Allerdings sperrt Forms das Bearbeiten von Daten wenn der View &#252;ber mehr als eine Tabelle erfolgt.</p>
<table cellspacing="0" cellpadding="2" width="592" border="1">
<tbody>
<tr>
<td valign="top" width="276">Vorteil</td>
<td valign="top" width="314">Nachteil</td>
</tr>
<tr>
<td valign="top" width="277">Automatische Regelung aller Transaktionen</td>
<td valign="top" width="314">Keine Unterst&#252;tzung der RETURNING-Klausel</td>
</tr>
<tr>
<td valign="top" width="277">Automatische Steuerung bei Master-Detail-Beziehungen</td>
<td valign="top" width="314">H&#246;herer Verwaltungsaufwand. Tabellen und Views m&#252;ssen verwaltet werden.</td>
</tr>
<tr>
<td valign="top" width="277">Zugriff bei der Suche auf alle View gebundenen Feldern</td>
<td valign="top" width="314">&#160;</td>
</tr>
<tr>
<td valign="top" width="277">Reduzierung der Netzbelastung durch Minimierung der POST-QUERY Aktionen</td>
<td valign="top" width="314">&#160;</td>
</tr>
<tr>
<td valign="top" width="277">Transaktionsregeln k&#246;nnen erweitert bzw. angepasst werden (INSTEAD-OF-Triggern)</td>
<td valign="top" width="314">&#160;</td>
</tr>
<tr>
<td valign="top" width="277">&#160;</td>
<td valign="top" width="314">&#160;</td>
</tr>
</tbody>
</table>
<h6>3. Zugriff &#252;ber Stored-Procedures</h6>
<p>Dieser Zugriff ist zwar sehr interessant, hat aber kaum Vorteile. </p>
<h3>Zusammenspiel von Oracle-Forms bez&#252;glich des Konzept des <b>Model-View-Controller</b> (MVC)</h3>
<h6>1. Zugriff &#252;ber Tabellen</h6>
<p align="justify">Dieser Zugriff unterst&#252;tzt das MVC-Modell sicherlich am Schlechtesten. Hier wird sowohl die Pr&#228;sentation als auch die Manipulation und Haltung der Daten zusammengelegt. </p>
<table cellspacing="0" cellpadding="2" width="593" border="1">
<tbody>
<tr>
<td valign="top" width="276">Vorteil</td>
<td valign="top" width="315">Nachteil</td>
</tr>
<tr>
<td valign="top" width="277">Bez&#252;glich des MVC-Konzept KEINE</td>
<td valign="top" width="315">keine Unterst&#252;tzung des MVC-Konzept</td>
</tr>
<tr>
<td valign="top" width="277">&#160;</td>
<td valign="top" width="315">&#160;</td>
</tr>
</tbody>
</table>
<h6>2. Zugriff &#252;ber Views</h6>
<p align="justify">Dieser Zugriff unterst&#252;tzt das MVC-Modell sehr gut, fast sogar perfekt. Durch die M&#246;glichkeit von INSTEAD-OF-Triggern kann das Manipulieren von Daten sehr gut gegen&#252;ber der Pr&#228;sentation gekapselt werden. Die Daten innerhalb der Tabelle wird durch einen View dar&#252;ber hinaus schon optimal gesch&#252;tzt.</p>
<table cellspacing="0" cellpadding="2" width="595" border="1">
<tbody>
<tr>
<td valign="top" width="271">Vorteil</td>
<td valign="top" width="322">Nachteil</td>
</tr>
<tr>
<td valign="top" width="271">sehr gute Unterst&#252;tzung des MVC-Konzeptes</td>
<td valign="top" width="322">Doppelte Verwaltung von Tabellen und Views</td>
</tr>
<tr>
<td valign="top" width="271">&#160;</td>
<td valign="top" width="322">ggf. Anpassen der INSTEAD-OF-Triggern</td>
</tr>
<tr>
<td valign="top" width="271">&#160;</td>
<td valign="top" width="322">&#160;</td>
</tr>
</tbody>
</table>
<p><em>Hinweis:      <br />Seit Oracle9i kann man das Einf&#252;gen (INSERT) bzw. &#196;ndern (UPDATE) von Daten als Parameter via ROWTYPE weiter optimieren. Siehe hierzu den Blog &quot;INSERT INTO via ROWTYPE&quot;</em></p>
<h6>3. Zugriff &#252;ber Stored-Procedures</h6>
<table cellspacing="0" cellpadding="2" width="595" border="1">
<tbody>
<tr>
<td valign="top" width="272">Vorteil</td>
<td valign="top" width="321">Nachteil</td>
</tr>
<tr>
<td valign="top" width="272">Saubere Unterst&#252;tzung des MVC-Konzeptes</td>
<td valign="top" width="321">Standardfunktionen (Query, Insert, Update, Delete) muss nachgebildet und angepasst werden.</td>
</tr>
<tr>
<td valign="top" width="272">Zugriff der Daten &#252;ber mehrere verkn&#252;pfte Tabellen</td>
<td valign="top" width="321">Unn&#246;tiger Mehraufwand (Anpassen aller Prozeduren und Forms-Module) beim Erweitern von Tabellen.</td>
</tr>
<tr>
<td valign="top" width="272">&#160;</td>
<td valign="top" width="321">&#160;</td>
</tr>
</tbody>
</table>
<h5>Fazit</h5>
<p align="justify">Wenn man gezwungen ist nach dem Konzept des MVC zu arbeiten, ist sicherlich der Zugriff und die Beschaffung bzw. Manipulation der Daten &#252;ber Views zu empfehlen. Ansonsten sollte man entweder den direkten Zugriff suchen oder eine gesunde Mischung aus direktem Tabellenzugriff und Zugriff &#252;ber Views suchen.</p>
<p>Den Zugriff &#252;ber Stored-Procedures ist in manchen F&#228;llen sicherlich hilfreich, aber in der Regel (ca. 90%) nicht zu empfehlen. Hier steht der Aufwand der Programmierung in keinem Verh&#228;ltnis zum evtl. Mehrwert.    </p>
<h5>Meinung der Autors</h5>
<p align="justify">Ich selber arbeite seit mehr als 10 Jahren mit Oracle-Forms und wei&#223; dieses Werkzeug zu sch&#228;tzen. Mann sollte allerdings auch bedenken, dass es sich um ein 4GL-Werkzeug handelt; deshalb nicht unbedingt in das Konzept eines MVC passt. Mann sollte das Werkzeug&#160; so benutzt, wof&#252;r es entwickelt worden ist, und zwar als Rapid-Development-Tool. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2008/02/03/oracle-forms-datenblcke-stored-procedure-vs-base-table-view/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Reminder] Disable output-buffering when sending a download to the browser</title>
		<link>http://www.entwicklungsgedanken.de/2008/01/19/reminder-disable-output-buffering-when-sending-a-download-to-the-browser/</link>
		<comments>http://www.entwicklungsgedanken.de/2008/01/19/reminder-disable-output-buffering-when-sending-a-download-to-the-browser/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 09:24:35 +0000</pubDate>
		<dc:creator>Eric Bartels</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[file-download]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[output-buffering]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2008/01/19/reminder-disable-output-buffering-when-sending-a-download-to-the-browser/</guid>
		<description><![CDATA[If you want to &#8220;send a file&#8221; to the browser (even if you do it in chunks) and your output-buffering is on you will get a fatal error when having large files. Fatal error: Allowed memory size of 0815 bytes exhausted It makes sense. The data of the file gets buffered. And after a while [...]]]></description>
			<content:encoded><![CDATA[<div class="lang-en"></div>
<p>If you want to &#8220;send a file&#8221; to the browser (even if you do it in chunks) and your <a href="http://de.php.net/manual/en/ref.outcontrol.php">output-buffering</a> is on you will get a fatal error when having large files.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">Fatal error<span style="color: #339933;">:</span> Allowed memory size of <span style="color:#800080;">0815</span> bytes exhausted</pre></div></div>

<p>It makes sense. The data of the file gets buffered. And after a while the buffer is full.</p>
<p>
<strong>Always</strong> disable your <a href="http://de.php.net/manual/en/ref.outcontrol.php">output-buffering</a> before you start sending chunks of data (which represent a file download).
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">ob_end_clean</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2008/01/19/reminder-disable-output-buffering-when-sending-a-download-to-the-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Reminder] How-to add a custom usercontrol with the SharePoint Designer</title>
		<link>http://www.entwicklungsgedanken.de/2008/01/13/reminder-how-to-add-a-custom-usercontrol-with-the-sharepoint-designer/</link>
		<comments>http://www.entwicklungsgedanken.de/2008/01/13/reminder-how-to-add-a-custom-usercontrol-with-the-sharepoint-designer/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 11:44:07 +0000</pubDate>
		<dc:creator>Eric Bartels</dc:creator>
				<category><![CDATA[SharePoint-Development]]></category>
		<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[ascx]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[register]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[usercontrol]]></category>

		<guid isPermaLink="false">http://www.entwicklungsgedanken.de/2008/01/13/reminder-how-to-add-a-custom-usercontrol-with-the-sharepoint-designer/</guid>
		<description><![CDATA[Open the desired page (e.g. DispForm.aspx) with the SharePoint Designer and add the following code below the initial &#8220;&#60;%@ statements&#8221;: &#60;%@ Register TagPrefix=&#34;MyNamePrefix&#34; TagName=&#34;MyNameForTheControl&#34; Src=&#34;~/_controltemplates/MyCustomControls/MyCurrentlyUsedControl.ascx&#34; %&#62; Now add this code where the control should appear in the final rendered page: &#60;MyNamePrefix:MyNameForTheControl ID=&#34;MyNameForTheControl&#34; runat=&#34;server&#34; /&#62; Thats it! Of course your user control must be placed in [...]]]></description>
			<content:encoded><![CDATA[<div class="lang-en"></div>
<p>Open the desired page (e.g. DispForm.aspx) with the SharePoint Designer and add the following code below the initial &#8220;&lt;%@ statements&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="asp" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;%</span><span style="color: #006600; font-weight: bold;">@</span> Register TagPrefix<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;MyNamePrefix&quot;</span> TagName<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;MyNameForTheControl&quot;</span>
Src<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;~/_controltemplates/MyCustomControls/MyCurrentlyUsedControl.ascx&quot;</span> <span style="color: #000000; font-weight: bold;">%&gt;</span></pre></div></div>

<p>Now add this code where the control should appear in the final rendered page:</p>

<div class="wp_syntax"><div class="code"><pre class="asp" style="font-family:monospace;"><span style="color: #006600; font-weight: bold;">&lt;</span>MyNamePrefix<span style="color: #006600; font-weight: bold;">:</span>MyNameForTheControl ID<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;MyNameForTheControl&quot;</span> runat<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;server&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span></pre></div></div>

<p>Thats it!</p>
<p>
Of course your user control must be placed in the <em>TEMPLATE/CONTROLTEMPLATES</em> folder (<em>TEMPLATE/CONTROLTEMPLATES/MyCustomControls</em> in this case) of your frontend server.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.entwicklungsgedanken.de/2008/01/13/reminder-how-to-add-a-custom-usercontrol-with-the-sharepoint-designer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
