Index: trunk/mapbender/http/nav/alkisnav_grd.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_grd.php	(revision 315)
+++ trunk/mapbender/http/nav/alkisnav_grd.php	(revision 330)
@@ -10,4 +10,5 @@
 	2013-05-14  Hervorhebung aktuelles Objekt. Title "Nachweis" auch auf Icon.
 	2013-12-12	Limit in EinBlatt von 200 weit hoch gesetzt (bis BlÃ€ttern mÃ¶glich wird)
+	2014-09-03  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
 */
 $cntget = extract($_GET);
@@ -52,12 +53,13 @@
 	global $debug;
 	$linelimit=40;
-	$sql ="SELECT a.stelle, a.bezeichnung AS ag FROM ax_dienststelle a ";
-	$sql.="WHERE a.stelle IN (".$liste_ag.") AND a.stellenart = 1000 "; // Amtsgerichte aus Liste
-	$sql.="ORDER BY a.bezeichnung LIMIT $1 ;";
+
+	$sql ="SELECT stelle, bezeichnung AS ag FROM ax_dienststelle ";
+	$sql.="WHERE stelle IN (".$liste_ag.") AND stellenart = 1000 AND endet IS NULL "; // AG aus Liste
+	$sql.="ORDER BY bezeichnung LIMIT $1 ;";
 	$res = pg_prepare("", $sql);
 	$res = pg_execute("", array($linelimit));
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Amtsgerichte</p>";
-		#if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
 		return 0;
 	}
@@ -93,7 +95,7 @@
 	$sql ="SELECT g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g ";
 	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle ";
-	$sql.="WHERE a.stelle = $1 AND a.stellenart = 1000 ";
+	$sql.="WHERE a.stelle = $1 AND a.stellenart = 1000 AND a.endet IS NULL AND g.endet IS NULL ";
 	// Diese Subquery stellt sicher, dass nur Bezirke aufgelistet werden, die auch BlÃ€tter enthalten:
-	$sql.="AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land and b.bezirk=g.bezirk LIMIT 1) IS NULL ";
+	$sql.="AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land AND b.bezirk=g.bezirk AND b.endet IS NULL LIMIT 1) IS NULL ";
 	$sql.="ORDER BY g.bezeichnung LIMIT $2 ;";
 	$v = array($agkey, $linelimit);
@@ -128,5 +130,5 @@
 	#global $debug;
 	$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g ";
-	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 LIMIT 1;";
+	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 AND g.endet IS NULL AND a.endet IS NULL LIMIT 1;";
 	$v=array($gbbez);
 	$res=pg_prepare("", $sql);
@@ -159,5 +161,5 @@
 	$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g ";
 	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle ";
-	$sql.="WHERE g.bezeichnung ILIKE $1 "; //	"AND a.stellenart=1000 " // Amtsgericht
+	$sql.="WHERE g.bezeichnung ILIKE $1 AND g.endet IS NULL AND a.endet IS NULL "; // "AND a.stellenart=1000 " Amtsgericht
 	$sql.="ORDER BY a.bezeichnung, g.bezeichnung LIMIT $2 ;";
 	if ( $gbkennz == "") {
@@ -219,5 +221,5 @@
 	// Body
 	$sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b ";
-	$sql.="WHERE b.bezirk= $1 ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
+	$sql.="WHERE b.bezirk= $1 AND b.endet IS NULL ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
 	$v=array($zgbbez, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -253,5 +255,5 @@
 	global $debug, $zgbbez, $zblatt, $zblattn, $zblattz;
 	$sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b "; 
-	$sql.="WHERE b.bezirk= $1 AND b.buchungsblattnummermitbuchstabenerweiterung ";
+	$sql.="WHERE b.bezirk= $1 AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung ";
 
 	if ($zblattz == "") { // Ohne Buchstabenerweiterung: Formate '123','000123 ','0000123'
@@ -290,7 +292,6 @@
 	}
 	// Body
-	// 2013-12-12 Limit von ursprÃŒnglich 200 weit hoch gesetzt
 	GB_Buchung_FS(1000, $zgbbez."-".$zblatt); // Blatt -> Buchung -> Flurstueck (Limitiert)
-	// ++ besser Limit wieder runter und "BlÃ€ttern"-Funktion einfÃŒhren
+	// ++ besser Limit runter und "BlÃ€ttern"-Funktion einfÃŒhren
 	return; 
 }
@@ -300,10 +301,10 @@
 	// Dazu die gml_id der Buchungsstelle ermitteln, um "function EinGrundstueck" benutzen zu kÃ¶nnen.
 	global $debug, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr;
+
 	// Blatt ->  B u c h u n g s s t e l l e
 	$sql ="SELECT s.gml_id FROM ax_buchungsstelle s ";
-	$sql.="JOIN alkis_beziehungen v ON s.gml_id=v.beziehung_von "; 
-	$sql.="JOIN ax_buchungsblatt b ON b.gml_id=v.beziehung_zu "; 
-	$sql.="WHERE v.beziehungsart='istBestandteilVon' ";
-	$sql.="AND b.bezirk= $1 AND b.buchungsblattnummermitbuchstabenerweiterung ";
+	$sql.="JOIN ax_buchungsblatt b ON s.istbestandteilvon = b.gml_id "; 
+	$sql.="WHERE b.bezirk= $1 AND s.endet IS NULL AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung ";
+
 	if ($zblattz == "") { // Ohne Buchstabenerweiterung
 		//Formate '123','000123 ','0000123'
@@ -351,13 +352,15 @@
 		zeile_buchung($buchunggml, $zbvnr, $zgbbez."-".$zblattn.$zblattz, false, true);
 	}
-// SQL-Bausteine
+
 // dienend $1 gml_id von
-//         Buchungsstelle  <vs/an<  Buchungsstelle sh
+//         Buchungsstelle  <an<  Buchungsstelle sh
 //         (dienend)                (herrschend)
+
 // direkt  $1 gml_id von 
-//         Buchungsstelle                              <vs/istGebucht< FlurstÃŒck > Gemarkung
+//         Buchungsstelle                           <istGebucht< FlurstÃŒck >> Gemarkung
+
 // Recht   $1 gml_id von 
-//         Buchungsstelle  >vs/an>  Buchungsstelle sd  <vf/istGebucht< FlurstÃŒck > Gemarkung
-//         (herrschend)             (dienend)      sd  >vd/istBestandteilVon> bd > gd
+//         Buchungsstelle  >an>  Buchungsstelle sd  <istGebucht< FlurstÃŒck >> Gemarkung
+//         (herrschend)             (dienend)   sd  >istBestandteilVon> bd >> gd
 
 	// Body
@@ -373,15 +376,13 @@
 	// Filter gleich
 	switch ($gfilter) { // Filter Gemeinde
-		case 1: // Einzelwert
-			$sqlfitler="AND g.gemeinde=".$gemeinde." "; break;
+		case 1: // Einzel
+			$sqlfitler="AND g.gemeinde='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sqlfilter="AND g.gemeinde in (".$gemeinde.") "; break;
-	}
-
-	// Abfrage: Direkte Buchungen (FlurstÃŒcke)
-	$sql =$sqlanf."FROM alkis_beziehungen vs JOIN ax_flurstueck f ON vs.beziehung_von = f.gml_id ";
-	$sql.="JOIN pp_gemarkung  g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
-	$sql.="WHERE vs.beziehung_zu= $1 AND vs.beziehungsart='istGebucht' ";
-	$sql.=$sqlfilter."ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+			$sqlfilter="AND g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
+	}
+
+	// Direkte Buchungen (Flurst.)
+	$sql =$sqlanf."FROM ax_flurstueck f JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
+	$sql.="WHERE f.istgebucht = $1 AND f.endet IS NULL ".$sqlfilter."ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
 
 	$v=array($buchunggml);
@@ -415,19 +416,15 @@
 	}
 
-	// Abfrage: Rechte an (dienende Buchungen und ihre FlurstÃŒcke)
-	$sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, ";		// Stelle dienend
+	// Recht "an" (dienende Buchungen und ihre Flurst.)
+	$sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, "; // Stelle dienend
 	$sql.="bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt, "; // Blatt dienend
-	$sql.="gd.stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez ";	// AG und Bezirk dazu
-	$sql.="FROM alkis_beziehungen vs ";
-	$sql.="JOIN ax_buchungsstelle sd ON vs.beziehung_zu=sd.gml_id ";
-	$sql.="JOIN alkis_beziehungen vf ON vf.beziehung_zu=sd.gml_id "; // sd=Stelle dienend
-	$sql.="JOIN ax_flurstueck f ON vf.beziehung_von = f.gml_id ";
+	$sql.="gd.stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez "; // AG und Bezirk dazu
+	$sql.="FROM ax_buchungsstelle sh "; // herrschend
+	$sql.="JOIN ax_buchungsstelle sd ON sd.gml_id = ANY(sh.an) "; // dienend
+	$sql.="JOIN ax_flurstueck f ON f.istgebucht = sd.gml_ID ";
 	$sql.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
-
-	// Blatt und Bezirk (dienend)
-	$sql.="JOIN alkis_beziehungen vd ON vd.beziehung_von=sd.gml_id ";
-	$sql.="JOIN ax_buchungsblatt bd ON vd.beziehung_zu=bd.gml_id ";	// Blatt dienend
+	$sql.="JOIN ax_buchungsblatt bd ON sd.istbestandteilvon = bd.gml_id ";	// Blatt dienend
 	$sql.="JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk "; // GB-Bez. dienend
-	$sql.="WHERE vs.beziehung_von = $1 AND vs.beziehungsart='an' AND vf.beziehungsart='istGebucht' AND vd.beziehungsart='istBestandteilVon' ";
+	$sql.="WHERE sh.gml_id = $1 AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND bd.endet IS NULL ";
 	$sql.=$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
 
@@ -444,5 +441,5 @@
 	$gwblatt="";
 	while($row = pg_fetch_array($res)) {
-		$dienstelle=$row["stelle"];		// Stelle (AG) des dienenden GrundstÃŒcks
+		$dienstelle=$row["stelle"];	// Stelle (AG) des dienenden GrundstÃŒcks
 		$dienbezgml=$row["dienbezgml"];	// Bezirks des dien. GS: gml, Nr. und Bezeichnung
 		$diengbbez=$row["diengbbez"];	// Bezeichnung
@@ -450,6 +447,6 @@
 		$dienbltgml=$row["dienbltgml"];	// dienendes Blatt, gml und Nr
 		$dienblatt=$row["dienblatt"];
-		$diengml=$row["diengml"];		// gml_id des dienenden GrundstÃŒcks
-		$dienlfd=$row["dienlfd"];		// BVNR (laufendNr) des dien. GS
+		$diengml=$row["diengml"];	// gml_id des dienenden GrundstÃŒcks
+		$dienlfd=$row["dienlfd"];	// BVNR (laufendNr) des dien. GS
 		if ($gwblatt != $dienblatt) { // Gruppierung Blatt - dienend
 			$gwblatt = $dienblatt; // Steuerg GW Blatt
@@ -471,7 +468,6 @@
 	}
 
-// Teil 3
-// ++  Wenn nur 1 GrundstÃŒck untersucht wird, dann dazu auch die 
-//     berechtigten (herrschenden) GrundbÃŒcher anzeigen und verlinken (ohne FS))
+// Teil 3 - noch nicht umgesetzt
+// ToDo: Wenn nur 1 GrundstÃŒck untersucht wird, dann dazu auch die berechtigten (herrschenden) GrundbÃŒcher anzeigen und verlinken (ohne FS)
 
 	// Foot
@@ -499,4 +495,5 @@
 } else {
 	$gfilter = 2; // Liste
+//	$gemeinde = "'".str_replace(",", "','", $gemeinde)."'"; // Jedes Element in ''
 }
 
Index: trunk/mapbender/http/nav/alkisnav_fkt.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 315)
+++ trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 330)
@@ -4,14 +4,10 @@
 	2013-05-14  Hervorhebung aktuelles Objekt, Title auch auf Icon, IE zeigt sonst alt= als Title dar.
 	2013-05-15  Function verlegt
-    2014-02-06  Korrektur zeile_person
+	2014-02-06  Korrektur zeile_person
+	2014-09-03  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
 */
 
-// function Typ "zeile_**"  = Ausgabe eines Knotens
-// - Icon,  ggf. mit Link zur Buchauskunft
-// - Zeile, ggf. mit Link zur weiteren AuflÃ¶sung untergeordneter Knoten
-// Hierin die Encodierung fÃŒr url und HTML.
-
 function is_ne_zahl($wert) {
-	// Prueft, ob ein Wert ausschlieÃlich aus den Zahlen 0 bis 9 besteht
+	// PrÃŒft, ob ein Wert ausschlieÃlich aus den Zahlen 0 bis 9 besteht
 	if (trim($wert, "0..9") == "") {return true;} else {return false;}
 }
@@ -74,4 +70,9 @@
 }
 
+// function Typ "zeile_**"  = Ausgabe eines Knotens
+// - Icon,  ggf. mit Link zur Buchauskunft
+// - Zeile, ggf. mit Link zur weiteren AuflÃ¶sung untergeordneter Knoten
+// Hierin die Encodierung fÃŒr url und HTML.
+
 function zeile_ag ($ag, $anr, $aktuell) {	// Zeile  A m t s g e r i c h t
 	global $gkz, $gemeinde, $epsg, $auskpath;
@@ -235,5 +236,5 @@
 
 	// SQL-Bausteine vorbereiten
-	// SQL vorne gleich
+	// vorne gleich
 	$sql1 ="SELECT s1.laufendenummer AS lfd, s1.gml_id AS bsgml, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
 	if($epsg == "25832") { // Transform nicht notwendig
@@ -244,24 +245,22 @@
 		$sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y, ";			
 	}
-	$sql1.="g.gemarkung, g.gemarkungsname ";
-	$sql1.="FROM alkis_beziehungen vbg ";
-	$sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von = s1.gml_id "; 
-
-	// Zwischen-JOIN verschieden
-	$sqlz1 ="JOIN alkis_beziehungen vfb ON s1.gml_id = vfb.beziehung_zu ";
+	$sql1.="g.gemarkung, g.gemarkungsname FROM ax_buchungsstelle s1 "; 
+
+	// 2 Varianten zwischen
+    $sqlz1="JOIN ax_flurstueck f ON f.istgebucht = s1.gml_id ";
 	
-	$sqlz2 ="JOIN alkis_beziehungen vss ON vss.beziehung_von = s1.gml_id ";
-	$sqlz2.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu = s2.gml_id ";
-	$sqlz2.="JOIN alkis_beziehungen vfb ON s2.gml_id = vfb.beziehung_zu ";
-
-	// SQL hinten gleich
-	$sql2 ="JOIN ax_flurstueck f ON vfb.beziehung_von = f.gml_id ";
+	$sqlz2 ="JOIN ax_buchungsstelle s2 ON s2.gml_id = ANY(s1.an) "; // nur an oder "an" und "zu" ?
+// Test: SELECT * FROM ax_buchungsstelle WHERE NOT zu IS NULL;  // keine Treffer fÃŒr "zu"
+//	$sqlz2 ="JOIN ax_buchungsstelle s2 ON (s2.gml_id = ANY(s1.an) OR s2.gml_id = ANY(s1.zu)) "; 
+    $sqlz2.="JOIN ax_flurstueck f ON f.istgebucht = s2.gml_id ";
+
+	// hinten gleich
 	$sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
-	$sql2.="WHERE vbg.beziehung_zu= $1 AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
+	$sql2.="WHERE s1.istbestandteilvon = $1 ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql2.="AND g.gemeinde=".$gemeinde." "; break;
+			$sql2.="AND g.gemeinde='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sql2.="AND g.gemeinde in (".$gemeinde.") "; break;
+			$sql2.="AND g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
 	}
 	$sql2.="ORDER BY cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
@@ -276,5 +275,5 @@
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
-		#if ($debug >= 3) {echo "\n<p class='err'>".$sql1.$sqlz1.$sql2."</p>";}
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql1.$sqlz1.$sql2."</p>";}
 		return;
 	}
Index: trunk/mapbender/http/nav/alkisnav_fls.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fls.php	(revision 315)
+++ trunk/mapbender/http/nav/alkisnav_fls.php	(revision 330)
@@ -2,11 +2,12 @@
 /* Version vom
 	2013-04-16	"import_request_variables" entfÃ€llt in PHP 5.4, 
-					Fehlerkorrektur Komma in SQL bei FS-Suche.
+				Fehlerkorrektur Komma in SQL bei FS-Suche.
 	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung"
-					ZurÃŒck-Link, Titel der Transaktion anzeigen
+				ZurÃŒck-Link, Titel der Transaktion anzeigen
 	2013-04-29	Test mit IE
 	2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
 	2013-05-14  Variablen-Namen geordnet, Hervorhebung aktuelles Objekt, Title auch auf Icon, IE zeigt sonst alt= als Title dar.
 	2013-10-15  missing Parameter
+	2014-09-03  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
 */
 $cntget = extract($_GET);
@@ -114,5 +115,5 @@
 		$sqlk.="y(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS y ";			
 	}
-   $sqlk.="FROM ax_flurstueck WHERE gml_id= $1 ";
+	$sqlk.="FROM ax_flurstueck WHERE gml_id= $1 AND endet IS NULL;";
 	$v=array($gml);
 	$resk=pg_prepare("", $sqlk);
@@ -125,8 +126,8 @@
 
 function zeile_gemarkung($gkgnr, $gkgname, $aktuell) {
-	// Eine Zeile zu Gemarkung ausgeben
+// Eine Zeile zu Gemarkung ausgeben
 	global $con, $gkz, $gemeinde, $epsg, $gfilter;
 	if ($gkgname == "") { // Falls Gem.-Name fehlt, in DB nachschlagen
-		$sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 LIMIT 1;";
+		$sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 AND endet IS NULL LIMIT 1;";
 		$v=array($gnr);
 		$res=pg_prepare("", $sql);
@@ -225,10 +226,11 @@
 	global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
 	$linelimit=60;
+
 	$sql ="SELECT gemeinde, gemeindename FROM pp_gemeinde ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="WHERE gemeinde=".$gemeinde." "; break;
+			$sql.="WHERE gemeinde='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sql.="WHERE gemeinde in (".$gemeinde.") "; break;
+			$sql.="WHERE gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
 		default: break;
 	}
@@ -311,7 +313,7 @@
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="AND g.gemeinde = ".$gemeinde." "; break;
+			$sql.="AND g.gemeinde='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sql.="AND g.gemeinde in (".$gemeinde.") "; break;
+			$sql.="AND g.gemeinde in ("."'".str_replace(",", "','", $gemeinde)."'".") "; break;
 	}
 	$sql.=" ORDER BY s.gemeindename, g.gemarkungsname LIMIT $2 ;";
@@ -379,5 +381,5 @@
 	// Body
 	$sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f ";
-	$sql.="WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;"; //WHERE f.land=?
+	$sql.="WHERE gemarkung= $1 AND endet IS NULL ORDER BY gemarkungsteilflur LIMIT $2 ;"; //WHERE f.land=?
 	$v=array($zgemkg, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -419,5 +421,5 @@
 		$sql.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
 	}
-   $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 ";
+   $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND endet IS NULL ";
 	$sql.="ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; // WHERE f.land=?
 	$v=array($zgemkg, $zflur, $linelimit);
@@ -457,10 +459,10 @@
 
 	// Body
-	$whcl.="WHERE flurstueckskennzeichen like $1 ";
+	$whcl.="WHERE flurstueckskennzeichen like $1 AND endet IS NULL ";
 	$sql ="SELECT 'h' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
 	$sql.="UNION SELECT 'o' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
 	$sql.="ORDER BY zaehler, nenner LIMIT $2 ;"; 
 	$fskzwhere =$land.$zgemkg.str_pad($zflur, 3, "0", $STR_PAD_LEFT)."%";
-	$v=array($fskzwhere,   $linelimit);
+	$v=array($fskzwhere, $linelimit);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
@@ -506,8 +508,8 @@
 		$sql.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
 	}
-   $sql.="FROM ax_flurstueck f ";
+	$sql.="FROM ax_flurstueck f ";
 	$sql.="WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
 	If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared?
-	$sql.="ORDER BY f.zaehler, f.nenner;";
+	$sql.="AND endet IS NULL ORDER BY f.zaehler, f.nenner;";
 	$v=array($zgemkg, $zflur, $zzaehler);
 	$res=pg_prepare("", $sql);
@@ -553,28 +555,31 @@
 	if ($znenner == "") {	// Wenn kein Nenner angegeben wurde, 
 		//wird mit Wildcard und like nach allen Nennern gesucht.
-		$fskzwhere.="____\_\_";	// fÃŒr like 
-		// Das Wildcard-Zeichen "_" ist dummerweise mit FÃŒllzeichen im Feldinhalt identisch
+		$fskzwhere.="____\_\_";	// fÃŒr like
 		$whereop=" like ";
+		// Das Wildcard-Zeichen "_" ist mit Zeichen im Feldinhalt identisch
+		// "___" = hier kann auch ein Nenner stehen, "\_\_" hier mÃŒssen tatsÃ€chlich __ stehen.
+		// WARNUNG:  nicht standardkonforme Verwendung von Escape in Zeichenkettenkonstante
+		// z.B.: like '05265600400145____\_\_'
 	} else { // Ein Nenner wurde angegeben
 		$fskzwhere.=str_pad($znenner, 4, "0", $STR_PAD_LEFT)."__";
 		$whereop=" = ";
 	}
-	$whcl.="WHERE flurstueckskennzeichen ".$whereop." $1 ";
-	
+	$whcl.="WHERE flurstueckskennzeichen ".$whereop." $1 AND endet IS NULL ";
 	$fldlist=" AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, ";
 
 	// NICHT in aktuell suchen wenn explizit historisch gesucht wird
-	#$sql ="SELECT 'a'".$fldlist."null as nachf FROM ax_flurstueck ".$whcl." UNION ";
 	$sql ="SELECT 'h'".$fldlist."nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
 	$sql.="UNION SELECT 'o'".$fldlist."nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
 
 	$v=array($fskzwhere);
-	#echo "<p class='dbg'>SQL=".$sql."<br>WHERE=".$fskzwhere."</p>";  // ++++ TEST
-
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
-	if (!$res) {echo "\n<p class='err'>Fehler bei hist. Flurst&uuml;ck.</p>";}
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei historischem Flurst&uuml;ck.</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<br>Parameter: ".$fskzwhere."<p>";}
+		return;
+	}
+
 	$zfs=0;
-
 	while($row = pg_fetch_array($res)) { // Schleife Hist-FS
 		$ftyp=$row["ftyp"];
@@ -585,10 +590,4 @@
 		$nachf=$row["nachf"];
 		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
-
-		#if ($ftyp == "a") { // als aktuelles FS gefunden, das "h" war also unnÃ¶tig!
-		#	$koor=flurstueckskoordinaten($fs_gml);
-		#	echo "\n<p>Flurst&uuml;ck ".$fskenn." ist aktuell, nicht historisch</p>";	
-		#	zeile_flurstueck ($fs_gml, $fskenn, $koor["x"], $koor["y"], $gknr, $flur, true);
-		#} else { // Historisches FS gefunden (h oder o)
 
 		zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur, true);
@@ -604,5 +603,5 @@
 			$stri="'".str_replace(",", "','", $stri)."'";
 
-			$nawhcl="WHERE flurstueckskennzeichen IN ( ".$stri." ) ";
+			$nawhcl="WHERE flurstueckskennzeichen IN ( ".$stri." ) AND endet IS NULL ";
 
 			$nasql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$nawhcl;
@@ -613,5 +612,31 @@
 			$nares=pg_prepare("", $nasql);
 			$nares=pg_execute("", $v);
-			if (!$nares) {echo "\n<p class='err'>Fehler bei Nachfolger.</p>";}
+			if (!$nares) {
+				echo "\n<p class='err'>Fehler bei Nachfolger.</p>";
+				if ($debug > 2) {echo "<p class='dbg'>SQL = '".$nasql."'<p>";}
+				return;
+			}
+
+/*
+
+ SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner 
+ FROM ax_flurstueck 
+ WHERE flurstueckskennzeichen IN ( '05265600400296______' ) 
+   AND endet IS NULL 
+UNION 
+ SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner 
+ FROM ax_historischesflurstueck 
+ WHERE flurstueckskennzeichen IN ( '05265600400296______' ) 
+    AND endet IS NULL 
+UNION 
+ SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner 
+ FROM ax_historischesflurstueckohneraumbezug 
+ WHERE flurstueckskennzeichen IN ( '05265600400296______' ) 
+   AND endet IS NULL '
+
+==> UNION-Typen character varying und integer passen nicht zusammen  gemarkungsnummer
+
+*/
+
 			$zfsn=0;
 			// inner Body
Index: trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_eig.php	(revision 315)
+++ trunk/mapbender/http/nav/alkisnav_eig.php	(revision 330)
@@ -12,4 +12,5 @@
 	2013-05-14  Hervorhebung aktuelles Objekt, Parameter "gbkennz" auswerten,
 				Title auch auf Icon, IE zeigt sonst alt= als Title dar.
+	2014-09-09  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
 */
 $cntget = extract($_GET);
@@ -60,8 +61,11 @@
 function personendaten() { // Adresse und Geburtsdatum der aktuellen Person ausgeben
 	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug
+
 	$sql ="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil, ";
 	$sql.="a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer ";
-	$sql.="FROM ax_person p LEFT JOIN alkis_beziehungen b ON p.gml_id=b.beziehung_von ";
-	$sql.="LEFT JOIN ax_anschrift a ON a.gml_id=b.beziehung_zu WHERE p.gml_id= $1 ;";	
+	$sql.="FROM ax_person p LEFT JOIN ax_anschrift a ON a.gml_id = ANY(p.hat) ";
+	$sql.="WHERE p.gml_id= $1 AND p.endet IS NULL AND a.endet IS NULL LIMIT 1;";	
+	// Es wird nur eine Zeile ausgewertet
+
 	$v=array($person);
 	$res=pg_prepare("", $sql);
@@ -126,8 +130,8 @@
 		$sql.="JOIN gemeinde_person g ON p.gml_id = g.person WHERE ";
 		switch ($gfilter) {
-			case 1: // Einzelwert
-				$sql.="g.gemeinde=".$gemeinde." AND "; break;
+			case 1: // Einzel
+				$sql.="g.gemeinde='".$gemeinde."' AND "; break;
 			case 2: // Liste
-				$sql.="g.gemeinde in (".$gemeinde.") AND "; break;
+				$sql.="g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') AND "; break;
 		}
 	} else {
@@ -189,15 +193,12 @@
 	// Suche nach GrundbÃŒchern der Person
 	$sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam ";
-	$sql.="FROM alkis_beziehungen bpn ";
-	$sql.="JOIN ax_namensnummer n ON bpn.beziehung_von=n.gml_id ";
-	$sql.="JOIN alkis_beziehungen bng ON n.gml_id=bng.beziehung_von ";
-	$sql.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
+	$sql.="FROM ax_namensnummer n JOIN ax_buchungsblatt gb ON n.istbestandteilvon = gb.gml_id ";
 	$sql.="JOIN ax_buchungsblattbezirk b ON gb.land = b.land AND gb.bezirk = b.bezirk ";
-	$sql.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
+	$sql.="WHERE n.bennennt = $1 AND n.endet IS NULL AND gb.endet IS NULL AND b.endet IS NULL ";
 
 	// Parameter $gbkennz, z.B. nach Klick auf Zeile "Bezirk"
 	if ($kennztyp > 1) { // 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
 		#if ($debug > 0) {echo "<p class='dbg'>Filter Bezirk '".$zgbbez."'<p>";}
-		$sql.="AND b.bezirk = ".$zgbbez." ";
+		$sql.="AND b.bezirk='".$zgbbez."' ";
 		$bezirkaktuell = true;
 	} else {
@@ -308,4 +309,5 @@
 // Stufe 2 und 3 nacheinander verwendet werden. Dies ist wahrscheinlich ÃŒbersichtlicher, 
 // weil "ungefiltert" in "2+3" zu lange Listen entstehen wÃŒrden, die durchblÃ€ttert werden mÃŒssen. 
+
 	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $gfilter, $debug, $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht, $kennztyp, $zgbbez;
 	$linelimit=80; // als Limit "Anzahl FlurstÃŒcke" in den beiden folgenden Abfragen
@@ -314,16 +316,16 @@
 	personendaten();
 
-	// Wenn das Limit ÃŒberschritten wurde: zusÃ€tzliche Parameter "blt"=BlÃ€ttern
-	// $bltbez   = Bezirk-Name  
-	// $bltblatt = BlattMitBuchstabe
-	// $bltbvnr  = lfd.Nr der Buchungsstelle
-	// $bltseite = fortlaufende Seiten-Nr
-	// $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung 
+	// Wenn das Limit ÃŒberschritten wurde: zusÃ€tzliche Parameter "blt"=BlÃ€ttern:
+	// - $bltbez   = Bezirk-Name  
+	// - $bltblatt = BlattMitBuchstabe
+	// - $bltbvnr  = lfd.Nr der Buchungsstelle
+	// - $bltseite = fortlaufende Seiten-Nr
+	// - $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung 
 
 	// SQL-Bausteine vorbereiten
-	//  Direkte Buchungen suchen mit:  $sql1 +         $sqla1 + $sql2
-	//  SonderfÃ€lle suchen mit:        $sql1 + $sqlz + $sqla2 + $sql2
-
-	// Baustein: SQL-Anfang fuer beide Varianten
+	//  Direkte Buchungen suchen mit:  $sql1 + $sqla1 + $sql2
+	//  SonderfÃ€lle suchen mit:        $sql1 + $sqla2 + $sql2
+
+	// Baustein 1: SQL-Anfang fuer beide Varianten
 	$sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam, ";
 	$sql1.="s1.gml_id as bsgml, s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemarkung, ot.gemarkungsname, ";
@@ -335,25 +337,23 @@
 		$sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
 	}
-	$sql1.="FROM alkis_beziehungen bpn ";
-	$sql1.="JOIN ax_namensnummer nn ON bpn.beziehung_von=nn.gml_id ";
-	$sql1.="JOIN alkis_beziehungen bng ON nn.gml_id=bng.beziehung_von ";
-	$sql1.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
-   $sql1.="JOIN alkis_beziehungen vbg ON gb.gml_id=vbg.beziehung_zu ";
-	$sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von=s1.gml_id ";
-	$sql1.="JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk "; // quer-ab
-
-	// Baustein: Zwischen-JOIN (nur bei zweiter Abfrage)
-	$sqlz ="JOIN alkis_beziehungen vss ON vss.beziehung_von=s1.gml_id ";
-	$sqlz.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu=s2.gml_id ";
-
-	// Baustein: Auswahl 1 oder 2
-	$sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id=vfb.beziehung_zu ";
-	$sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id=vfb.beziehung_zu ";
-
-	// Baustein: SQL-Ende fuer beide Varianten
-	$sql2.="JOIN ax_flurstueck f ON vfb.beziehung_von=f.gml_id ";
-   $sql2.="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil
-	$sql2.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
-	$sql2.="AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
+
+	// NamenNummer >istbestandteilvon> buchungsblatt <istbestandteilvon< buchungsstelle-1
+	$sql1.="FROM ax_namensnummer nn ";
+	$sql1.="JOIN ax_buchungsblatt gb ON gb.gml_id = nn.istbestandteilvon ";
+	$sql1.="JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk ";
+	$sql1.="JOIN ax_buchungsstelle s1 ON gb.gml_id = s1.istbestandteilvon ";
+
+	// Baustein A: Auswahl 1 oder 2
+	// buchungsstelle-1 <istGebucht< FS
+	$sqla1 ="JOIN ax_flurstueck f ON s1.gml_id = f.istgebucht ";
+
+	// buchungsStelle1 (herr.) >an> buchungsStelle2 (dien.) <istGebucht< FS
+	$sqla2 ="JOIN ax_buchungsstelle s2 ON s2.gml_id = ANY(s1.an) ";
+	$sqla2.="JOIN ax_flurstueck f ON s2.gml_id = f.istgebucht ";
+
+	// Baustein 2: SQL-Ende fuer beide Varianten
+	$sql2 ="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil
+	$sql2.="WHERE nn.benennt = $1 AND nn.endet IS NULL AND gb.endet IS NULL AND s1.endet IS NULL AND f.endet IS NULL ";
+	// AND s2.endet IS NULL
 
 	// Parameter $gbkennz nach Klick auf Zeile "Bezirk"
@@ -368,7 +368,7 @@
 	switch ($gfilter) { // Gemeinde-Filter
 		case 1: // Einzelwert
-			$sql2.="AND ot.gemeinde=".$gemeinde." "; break;
+			$sql2.="AND ot.gemeinde='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sql2.="AND ot.gemeinde in (".$gemeinde.") "; break;
+			$sql2.="AND ot.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
 	}
 	$sql3 ="ORDER BY b.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
@@ -400,5 +400,5 @@
 	// FÃ€lle ohne "Rechte an"
 	if ($bltrecht != "nur") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
-		// Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck.
+		// Blatt <istBestandteilVon<  Buchungsstelle <istGebucht< Flurstck.
 		$sql=$sql1.$sqla1.$sql2.$bltwhere.$sql3; // Direkte Buchungen
 		$v=array($person, $linelimit);
@@ -407,6 +407,8 @@
 		if (!$res) {
 			echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
+			if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<p>";}
 			return;
 		}
+
 		$zfs1=0;
 		$gwbez="";
@@ -446,4 +448,5 @@
 			if ($bltseite > 1) {echo "weitere ";}
 			echo $zfs1." Flurst&uuml;cke";
+
 			// B l Ã€ t t e r n  (eine Folgeseite anbieten)
 			$nxtbltbez=urlencode($beznam);
@@ -473,6 +476,6 @@
 	if ($bltrecht != "ohne") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung 
 		// Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
-		// buchungsStelle2 < an < buchungsStelle1
-		$sql=$sql1.$sqlz.$sqla2.$sql2.$bltwhere.$sql3; // Rechte an
+		// buchungsStelle2 <an< buchungsStelle1
+		$sql=$sql1.$sqla2.$sql2.$bltwhere."AND s2.endet IS NULL ".$sql3; // Rechte an
 		$v=array($person, $linelimit);
 		$res=pg_prepare("", $sql);
@@ -484,5 +487,4 @@
 		$zfs2=0;
 		$gwbez="";
-		#gwgb="";
 		while($row = pg_fetch_array($res)) {	
 			$bezirk=$row["bezirk"];
@@ -505,5 +507,5 @@
 				$gwbv = $bvnr;
 				$bsgml=$row["bsgml"];
-				zeile_buchung($bsgml, $bvnr, "", true, false); // Recht an ...  // ohne Link!
+				zeile_buchung($bsgml, $bvnr, "", true, false); // Recht an ... // ohne Link!
 			#	zeile_buchung($bsgml, $bvnr, $bezirk."-".$blatt, true, false); // Recht an ...
 			}
@@ -577,5 +579,5 @@
 } elseif($person != "") { // GrundbÃŒcher zur Person
 	// Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
-	if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
+	//if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
 
 	// Die Filtereinstellung beeinflusst die Such-Strategie:
Index: trunk/mapbender/http/nav/alkisnav_adr.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_adr.php	(revision 315)
+++ trunk/mapbender/http/nav/alkisnav_adr.php	(revision 330)
@@ -8,4 +8,6 @@
 	2013-05-15  Gruppierung nach Gemeinde, mehrfache HsNr (ap_pto.advstandardmodell) unterdrÃŒcken, Icon f. StraÃe
 	2014-01-23	Link zum Auskunft-Modul fÃŒr StraÃe
+	2014-09-03  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
+
 	ToDo:
 	-	Gruppierung (mit Zeile) der StraÃenliste nach Gemeinde
@@ -62,13 +64,13 @@
 	}
 	$sql ="SELECT g.gemeinde, g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage ";
-	$sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
+	$sql.="FROM ax_lagebezeichnungkatalogeintrag k ";
 	$sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
-	$sql.="WHERE k.bezeichnung ILIKE $1 ";
+	$sql.="WHERE k.bezeichnung ILIKE $1 AND k.endet IS NULL AND g.endet IS NULL ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="AND k.gemeinde=".$gemeinde." ";
+			$sql.="AND k.gemeinde='".$gemeinde."' ";
 			break;
 		case 2: // Liste
-			$sql.="AND k.gemeinde in (".$gemeinde.") ";
+			$sql.="AND k.gemeinde in (".str_replace(",", "','", $gemeinde).") ";
 			break;
 		default: // kein Filter
@@ -79,5 +81,11 @@
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
-	if (!$res) {return "\n<p class='err'>Fehler bei Name</p>";}
+
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Name</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<p>";}
+		return;
+	}
+
 	$cnt = 0;
 	$gwgem="";
@@ -134,15 +142,19 @@
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="AND k.gemeinde=".$gemeinde." ";
+			$sql.="AND k.gemeinde='".$gemeinde."' ";
 			break;
 		case 2: // Liste
-			$sql.="AND k.gemeinde in (".$gemeinde.") ";
+			$sql.="AND k.gemeinde in ('".str_replace(",", "','", $gemeinde)."') ";
 			break;
 	}
 	$sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;";
+
  	$v=array($match,$linelimit);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
-	if (!$res) {return "\n<p class='err'>Fehler bei Schl&uuml;ssel</p>";}
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Schl&uuml;ssel</p>";
+		return;
+	}
 	$cnt = 0;
 	while($row = pg_fetch_array($res)) {
@@ -173,4 +185,5 @@
 		echo "</div>";
 // function ende
+
 		$cnt++;
 	}
@@ -196,7 +209,14 @@
 	$sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
 	$sql.="WHERE k.schluesselgesamt = $1 LIMIT 1"; 
+
   	$v=array($str_schl);	// Schluessel-Gesamt ..
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Name zum Stra&szlig;enschl&uuml;ssel</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<p>";}
+		return;
+	}
+
 	if($row = pg_fetch_array($res)) { // .. gefunden
 		$kgml=$row["kgml"]; // ID aus Katalog
@@ -220,8 +240,7 @@
 			}
 			$sqlko.="FROM ax_lagebezeichnungohnehausnummer o ";
-			$sqlko.="JOIN alkis_beziehungen v ON o.gml_id=v.beziehung_zu "; 
-			$sqlko.="JOIN ax_flurstueck f ON v.beziehung_von=f.gml_id ";
+			$sqlko.="JOIN ax_flurstueck f ON o.gml_id = ANY(f.zeigtauf) ";
 			$sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 ";	
-			$sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;"; // die erstbeste Koordinate
+			$sqlko.="LIMIT 1;"; // die erstbeste Koordinate
 			$v=array($land,$regb,$kreis,$gemnd,$nr);
 			$resko=pg_prepare("", $sqlko);
@@ -277,8 +296,6 @@
 			$sql.="avg (st_y(st_transform(p.wkb_geometry,".$epsg."))) AS y ";		
 		}
-		$sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von ";
-		$sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id ";
-		$sql.="WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' ";
-		$sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 ";
+		$sql.="FROM ap_pto p JOIN ax_lagebezeichnungmithausnummer h ON h.gml_id = ANY(p.dientzurdarstellungvon) ";
+		$sql.="WHERE p.art = 'HNR' AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 ";
 		$sql.="GROUP BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2) ";
 		$sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);";
@@ -293,5 +310,9 @@
 		$resh=pg_prepare("", $sql);
 		$resh=pg_execute("", $v);
-		#echo "<p class='dbg'>SQL='".$sql."'<br>Array=".$v[]."</p>"; // TEST
+		if (!$resh) {
+			echo "\n<p class='err'>Fehler bei H&auml;user zum Stra&szlig;enschl&uuml;ssel</p>";
+			if ($debug > 2) {echo "<p class='dbg'>SQL='".$sql."'<br>Array=".$v."</p>";}
+			return;
+		}
 
 		$cnt=0;
@@ -347,5 +368,5 @@
 
 // +++	Zerlegung Eingabe aus "Balken" von Buchauskunft "Lage":
-//			Numerisch: Gem-Str-Haus-lfd
+//		Numerisch: Gem-Str-Haus-lfd
 
 if ($str_schl != "") { // aus Link
Index: trunk/mapbender/conf/alkisnav_conf.php
===================================================================
--- trunk/mapbender/conf/alkisnav_conf.php	(revision 315)
+++ trunk/mapbender/conf/alkisnav_conf.php	(revision 330)
@@ -1,7 +1,7 @@
 <?php
-/* Einstellungen fuer Mapbender-Navigation mit ALKIS-Daten
-	ALKIS-PostGIS-Datenbank aus Konverter PostNAS 0.7
+/*	Einstellungen fuer Mapbender-Navigation mit ALKIS-Daten
+	ALKIS-PostGIS-Datenbank aus Konverter PostNAS 0.8
 	krz Mi.-Ra./Li.
-	2013-04-26 ALKIS 07
+	2014-09-10 PostNAS 0.8: ohne "alkis_beziehungen"
 */
 
@@ -10,5 +10,5 @@
 	$port="5432";
 	$dbname="alkis";	// .$dbvers.$gkz - Mandant
-	$dbvers="07";		// 05 oder 06 (steuert Format von .lage)
+	$dbvers="08";		// 05 oder 06 (steuert Format von .lage)
 	$user="***";
 	$password="***";
@@ -24,5 +24,5 @@
 
 #	default-Koordinatensystem der GUI
-	$gui_epsg=31467;
+	$gui_epsg=25832;
 
 #	Landes-Kennung
