Announcement

Collapse
No announcement yet.

Konsolenanwendung SQL Umlaute

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Konsolenanwendung SQL Umlaute

    Mein Programm kann gelinkt als Konsolenanwendung keine Umlaute. Sie gehen beim Eintrag in die Datenbank MSSQL verloren.
    Beispiele, wie man die Ausgabe im DOS-Fenster richtet, habe ich gefunden.
    Aber wie sag ichs der SQL-Datenbank, damit meine nicht-Konsolen-Oberfläche wieder die ÄÖÜs zeigt?
    Gruss Wolfgang Dümchen

  • #2
    Hallo,

    wie das folgende Beispiel demonstriert, ist im Fall einer Consolenanwendung der Entwickler selbst für das Übersetzen des OEM- und ANSI-Zeichensatzes verantwortlich, indem zum Beispiel die Win32-API-Funktionen <b>CharToOem</b> (Ausgabe) oder <b>OemToChar</b> (Eingabe) genutzt werden:

    Vorbereitung in der MS SQL Server-Datenbank tempdb
    <pre>

    <b>USE</b> tempdb
    <b>GO</b>
    <b>CREATE</b> <b>TABLE</b> HORATIO (
    RecID <b>INTEGER</b> <b>NOT</b> <b>NULL</b> <b>IDENTITY</b> <b>PRIMARY</b> <b>KEY</b>,
    Wert <b>VARCHAR</b>(9) <b>NOT</b> <b>NULL</b>)
    <b>GO</b>
    <b>INSERT</b> <b>INTO</b> HORATIO (Wert) <b>VALUES</b>(<font color="#9933CC">'a'</font>)
    <b>INSERT</b> <b>INTO</b> HORATIO (Wert) <b>VALUES</b>(<font color="#9933CC">'ä'</font>)
    <b>INSERT</b> <b>INTO</b> HORATIO (Wert) <b>VALUES</b>(<font color="#9933CC">'Ü'</font>)
    <b>INSERT</b> <b>INTO</b> HORATIO (Wert) <b>VALUES</b>(<font color="#9933CC">'Ö'</font>)
    <b>INSERT</b> <b>INTO</b> HORATIO (Wert) <b>VALUES</b>(<font color="#9933CC">'ß'</font>)
    <b>GO</b>

    </pre>
    Consolenanwendung
    <pre>

    <b>program</b> ADOConsole;

    <font color="#003399"><i>{$APPTYPE CONSOLE}</i></font>

    <b>uses</b>
    SysUtils, ActiveX, Windows, ADOInt;

    <b>resourcestring</b>
    cCS = <font color="#9933CC">'Provider=SQLOLEDB.1;Integrated Security=SSPI;'</font> +
    <font color="#9933CC">'Persist Security Info=False;'</font> +
    <font color="#9933CC">'Initial Catalog=tempdb;Data Source=(local)'</font>;
    <b>var</b>
    aRS : _Recordset;
    iRecCount : Integer;
    swData : WideString;
    szANSI : <b>array</b>[0..199] <b>of</b> Char;
    szOEM : <b>array</b>[0..199] <b>of</b> Char;

    <b>begin</b>
    CoInitialize(<b>nil</b>);
    aRS := CoRecordSet.Create;
    aRS.CursorLocation := adUseClient;
    <b>try</b>
    aRS.Open(<font color="#9933CC">'SELECT * FROM dbo.HORATIO'</font>, cCS,
    adOpenStatic, adLockReadOnly, adCmdText);
    iRecCount := aRS.RecordCount;
    swData := aRS.GetString(adClipString, iRecCount, <font color="#9933CC">'; '</font>, #13#10,<font color="#9933CC">'(NULL)'</font>);
    StrPCopy(szANSI, swData);
    CharToOem(szANSI, szOEM);
    WriteLn(szOEM);
    ReadLn;
    <b>finally</b>
    aRS.Close;
    <b>end</b>;
    CoUninitialize;
    <b>end</b>.
    </pre&gt

    Comment


    • #3
      Danke für das ausführliche Beispiel (ADO kann ich so endlich mal angehen).
      Die Rückkonvertierung mit chartooem hatte ich schon gefunden.
      Mein Problem entsteht aber beim Eintragen durch die Konsolenanwendung.
      Das Auslesen geschieht mit Nicht-Konsolenanwendungen.
      Es wäre schade, wenn ich dort den Fehler des falsch Eintrages beim Auslesen beheben müsste.

      Hintergrund ist übrigens, dass ich einfach eine Konsole brauche, um meine Meldungen dort dem Tool UC4 zurückzugeben (Ein universelles Steuerungsprogramm für beliebige Anwendungen über Netzwerke)
      Vielleicht kann man das ja einfacher lösen:
      Keine Konsolenanwengung, aber mit konsolenfenster..

      Comment

      Working...
      X