Roman Pfarrhofer: Portieren auf D-sprachigen Server "True-»Wahr"

Hallo Leute!

Wir haben in den letzten 3/4 Jahr eine sehr umfangreiche und komplexe Kunjunktur-Umfrage-Application in ASP geschrieben (Von Frabebogen erstellen über Auswertungen bishin zu Benutzerverwaltung). Entwickelt haben wir das ganze in einer komplett englischen Entwicklerumgebung. Als wir fertigen waren sind wir daraufgekommen, daß der Kunde nur deutsche Server einsetzt (Haben das nicht einmal in Erwägung gezogen, daß eine große Firma deutschprachige Produkte verwendet, aber was solls!).

Haben dann alle DLLs auf deutsch besorgt und die eigenen neue Kompilliert -  soweit so gut.

Nun ist aber ein Problem in den ASP-Seiten selbst aufgetreten. Der IIS 4.0 Deutsch behandelt die bol'schen Operatoren (True/False) auf Deutsch! also Wahr und Falsch. Das wäre ja noch zu verkraften, aber spätestens bei der DB-Anbindung gibt es ärgste troubles, denn (obwohl auch deutsch und nach außen hin auch mit D arbeitetend) verlangt diese im SQL-Statment unbedint die englischen Ausdrücke.

Habe bis jetzt erfolglos im MSDN, auf der HP von Stefan Falz und im Archiv gesucht, das einzige was ich fand hatte mit CodePage zu tun, aber da kann man nur den verwendeten Zeichensatz in den ASP-Files umstellen :(.

Wenn jemand eine Idee hat wie man das Problem lösen könnte, wäre ich sehr dankbar. Vielleicht Access dazu zu bringen sowohl Englisch als auch Deutsch zu akzeptieren (oder wenigstens D), IIS dazu zu bringen auf englisch zu arbeiten (beste Lösung) oder sonst was.

CU Roman

P.S.: <flehendZuM$>Bitte nur noch Englische Server auszuliefern</flehend>.
PP.S.: Was ich nicht verstehen kann, ist warum Firmen mit erstklassigen Personal (können auch Englisch) auf deutschprachige Server setzen, obwohl sie später verfügbar (inkl. ServicePacks) und fehlerhafter durch die Übersetzung? Vielleicht was da auch einer eine plausible Erklärung - mir ist es schleierhaft.

  1. Nun ist aber ein Problem in den ASP-Seiten selbst aufgetreten. Der IIS 4.0 Deutsch behandelt die bol'schen Operatoren (True/False) auf Deutsch! also Wahr und Falsch. Das wäre ja noch zu verkraften, aber spätestens bei der DB-Anbindung gibt es ärgste troubles, denn (obwohl auch deutsch und nach außen hin auch mit D arbeitetend) verlangt diese im SQL-Statment unbedint die englischen Ausdrücke.

    ' -------------------------------
    ' --- Beginn des ersten Teils ---
    ' -------------------------------

    Hallo Roman,

    so ganz genau verstehe ich zwar Dein Problem nicht, aber ich versuche mal, daß was ich denke was es ist, zu erklären.
    IIS (meinst Du damit Deine ASP-Applikation ???) verlangt eigentlich immer die englischen Schlüsselwörter True/False, auch bei einer DB-Anbindung einer deutschen Datenbank (Access, und dann beschwerst Du Dich, daß die Firma einen deutschen Server benutzt, ...).
    Zum Beispiel frage ich in ASP (egal, ob D oder E) eine bool'sche Variable so ab:
    <%
    ' --- Abfrage auf True
    If blnVar1 Then
       ...
    End if

    If blnVar1 = True Then
       ...
    End if

    ' --- Abfrage auf False
    If Not blnVar1 Then
       ...
    End if

    If blnVar1 = False Then
       ...
    End if
    %>

    Das Ergebnis ist jeweils gleich. Im SQL-String sieht das ähnlich aus:
    <%
    ' --- Abfrage auf True
    strSQL = "SELECT * FROM tblTabelle1 WHERE BoolscheVar"
    strSQL = "SELECT * FROM tblTabelle1 WHERE BoolscheVar = TRUE"

    ' --- Abfrage auf False
    strSQL = "SELECT * FROM tblTabelle1 WHERE NOT BoolscheVar"
    strSQL = "SELECT * FROM tblTabelle1 WHERE BoolscheVar = FALSE"
    %>

    Wenn das nicht Dein Problem ist, wäre es vielleicht ganz gut, einen Teil des Quelltexts zu posten oder ihn per Mail an o.g. Adresse zu schicken. Evtl. kann ich Dir dann weiterhelfen.

    ' -----------------------------
    ' --- Ende des ersten Teils ---
    ' -----------------------------

    Wenn jemand eine Idee hat wie man das Problem lösen könnte, wäre ich sehr dankbar. Vielleicht Access dazu zu bringen sowohl Englisch als auch Deutsch zu akzeptieren (oder wenigstens D), IIS dazu zu bringen auf englisch zu arbeiten (beste Lösung) oder sonst was.

    ' --------------------------------
    ' --- Beginn des zweiten Teils ---
    ' --------------------------------

    Wie oben schon erwähnt, SQL ist immer englisch. Lediglich in Access lassen sich deutsche Wörter eingeben, allerdings werden auch die in die englischen SQL-Begriffe umgesetzt. (Schau Dir doch mal eine Abfrage in der SQL-Ansicht an, ...)

    Tschau, Stefan

    1. Hallo Stefan!

      ' -------------------------------
      ' --- Beginn des ersten Teils ---
      ' -------------------------------

      IIS (meinst Du damit Deine ASP-Applikation ???) verlangt eigentlich immer die englischen Schlüsselwörter True/False, auch bei einer DB-Anbindung einer deutschen Datenbank

      ASP-Applikation: Jein. DEr Source ist englisch ist shcon klar (ist ja nicht mein erstes projekt *lol*), aber der IIS verwendet anscheinend intern die deutschen Wörter, wenn er das ASP-File parst (um zu es in HTML auszugeben, habe ich ja schon alles verstanden *fG*).

      (Access, und dann beschwerst Du Dich, daß die Firma einen deutschen Server benutzt, ...).

      Leider die vorgabe des Kunden - würde ja nie was anderes als SQL oder Oracle verwenden um was größeres als eine Guestbook zu machen.

      OK also noch einen beispielsource damit es klarer wird:

      <%
      ...
      if blabla = "irgendwas" then
        xy = true
      else
        xy = false
      end if
      ...
      Response.Write xy
      %>

      das würde dann Wahr bzw Falsch ausgeben und wenn ich das ganze dann ein ein SQL-STatment

      zB SQL-Text = "SELECT * FROM tbl_irgendwo WHERE xy = " & xy  --> dann wird daraus SELECT * FROM tbl_irgendwo WHERE xy = Wahre bzw Falsch!

      einbauen will schreit mri dann die DB - eh klar, aber was dagegen machen

      ' --------------------------------
      ' --- Beginn des zweiten Teils ---
      ' --------------------------------

      Wie oben schon erwähnt, SQL ist immer englisch. Lediglich in Access lassen sich deutsche Wörter eingeben, allerdings werden auch die in die englischen SQL-Begriffe umgesetzt. (Schau Dir doch mal eine Abfrage in der SQL-Ansicht an, ...)

      Ist schon klar und daß hasse ich am D-Access wenn man in "Entwurf" die E-Befehle eingiebt übersetzt der sie in D *würg* aber in dem SQL-STatment ist es wieder E!

      Danke für die schnelle Antwort und hoffe du weißt jetzt genauer mein Problem

      CU Roman

      1. OK also noch einen beispielsource damit es klarer wird:

        <%
        ...
        if blabla = "irgendwas" then
          xy = true
        else
          xy = false
        end if
        ...
        Response.Write xy
        %>

        das würde dann Wahr bzw Falsch ausgeben und wenn ich das ganze dann ein ein SQL-STatment

        zB SQL-Text = "SELECT * FROM tbl_irgendwo WHERE xy = " & xy  --> dann wird daraus SELECT * FROM tbl_irgendwo WHERE xy = Wahre bzw Falsch!

        Hallo Roman,

        wenn die Variablen in Access als Bool deklariert sind (und nicht als Zahl mit den Werten 0 und 1) solltest Du in der Datenbank auch eine Checkbox in der Tabelle sehen. Wenn dem so ist, kannst Du den SQL-String ganz ohne True/Falsch/Wahr/... abfragen, indem Du einfach "SELECT * FROM Tabelle WHERE [NOT] FELD" eingibst. "NOT " sollte dann als String mit in den SQL-String eingebaut werden.

        <%
        If blabla <> "irgendwas" Then
           strBool = "NOT "
        End if

        strSQL = "SELECT * FROM tblTabelle WHERE " & strBool & "Feldname"
        %>

        Abgesehen davon entwickle ich auf einem deutschen NT-Server (manchmal sogar unter Win98 D), aber gehostet werden die Seiten auf verschiedenen Servern (NT -> D, E). Ich habe diese Probleme noch nie gehabt. Dafür aber jede Menge andere (MDAC 2.x und mehr als 50 Objekte)

        Vielleicht nützt Die das obiger Beispiel was fürs nächste Projekt, da Du ja geschrieben hast, daß das Problem derzeit schon behoben wurde.

        Tschau, Stefan

        1. Hallo Stefan!

          Nochmals danke Stefan! Wir hatten auch am Anfang die Probleme zB mit den ADOs wie der Kunde das Installationsscript eingespielt hat - sind dann hingefahren und sind nach einer halben STunde draufgekommen das sie Server Englisch sind - uuppps *g*

          Hatten dann aber keine weiteren Probleme, da wir relativ viel Wissen über Internationalisierung hatten und das ganze zusätzlich auf einem nachgebauten deutschen Server das Installationsscript neu gemacht haben. Hatten aber auf der Maschine nur einen Teil der Funktionalität durchgespielt (das ganze testen dauert zu zweit ca. einen halben Tag) und keine Fehler enthalten, nur der Kunde hat welche gefunden *G*.

          Auf jeden Fall hat er heute das Update installiert und jetzt funktioniert alles und können endlich die Rechnung schreiben *freu*

          CU Roman der daran jetzt ein 3/4 Jahr gearbeitet hat ohne einen Groschen zu sehen (war aber auch nur ein Nebenjob zur Schule)

  2. Hi Roman,

    *lol* das Problem kommt mir recht bekannt vor ;-) Als ich noch mit Visual Basic programmierte, lieferte es auch immer ein "Wahr" zurück. Trozdem konnte ich es mit "True" abfragen. Der Einfachkeit halber bin ich aber auf 1 und 0 umgestiegen. denn "1" und "0" bleiben im engl. und deutsch gleich ;-). Proiers doch mal aus...1=True/Wahr 0=False/Falsch....

    MfG Olli *g*

    1. Hi Olli!

      *lol* das Problem kommt mir recht bekannt vor ;-) Als ich noch mit Visual Basic programmierte, lieferte es auch immer ein "Wahr" zurück. Trozdem konnte ich es mit "True" abfragen. Der Einfachkeit halber bin ich aber auf 1 und 0 umgestiegen. denn "1" und "0" bleiben im engl. und deutsch gleich ;-). Proiers doch mal aus...1=True/Wahr 0=False/Falsch....

      Ja danke, daß ist mir als Lösung auch schon eingefallen, aber habe ich als letztmögliche Lösung aufgeschoben, weil wir dann den Termin nicht halten können (Der Kunde will für das letzte Quartal aller spätestens Do mit der Konjunkturumfrage anfangen, damit sie Mo raus kann)

      Hoffentlich kommt noch eine andere Lösung, wo ich nicht gleich alles umprogrammieren muß - da kauf ich lieber eine alte Maschine und stell sie ihnen als neuen Webserver hin, für die erste Umfrage, kommt billiger als meine Überstunden *G*.

      CU Roman

      1. Ja danke, daß ist mir als Lösung auch schon eingefallen, aber habe ich als letztmögliche Lösung aufgeschoben, weil wir dann den Termin nicht halten können (Der Kunde will für das letzte Quartal aller spätestens Do mit der Konjunkturumfrage anfangen, damit sie Mo raus kann)

        Hm, dann kommt wohl auch nicht in Frage, den gesamten Quelltext zu durchsuchen und "true" durch einen Funktionsaufruf zu ersetzen, der entweder "true" oder "wahr" zurückgibt?
        (Das wäre dann etwa ein Zweizeiler, und die Sprachabhängigkeit wäre dann auf diese Funktion beschränkt.)

        1. Hallo Michael!

          Hm, dann kommt wohl auch nicht in Frage, den gesamten Quelltext zu durchsuchen und "true" durch einen Funktionsaufruf zu ersetzen, der entweder "true" oder "wahr" zurückgibt?
          (Das wäre dann etwa ein Zweizeiler, und die Sprachabhängigkeit wäre dann auf diese Funktion beschränkt.)

          Danke für die Antwort, aber was du beschreibst war es nicht ganz. Inzwischen haben wir alles geändert und zwar haben wir bei den Varialbenzuweisungen (zB xy = true) die bool'sche VAriable mit double-Quotes (also xy = "true") ersetzt, durch die "lasche" Variabledeklartion von VBScript, kann man dann sogar noch sowas wie if NOT xy then abfragen. DAmit war das Problem gelöst. Aber wie du es vorschlägst hätten wir nicht auslahmslos alles ersetzen könen weil die bool'sche VAriablen zB auch in Querystrings drinstehen oder hardcodiert in SQL-STatments. DAs PRogramm wäre dann etwas länger als 2 Zeilen geworden und jetzt hat das ganze ohne fehlererkennung, austesten und fehlerkontrolle eine h gebraucht.

          Danke an alle

          CU Roman