Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Lazarus-Anbindung an PG-Datenbank

  1. #1
    Pegasus0211 ist offline Benutzer
    Registriert seit
    05.09.2006
    Ort
    Scheeßel
    Beiträge
    53

    Standard Lazarus-Anbindung an PG-Datenbank

    Guten Tag,

    seit der Installation der Postgres-Version 8.3.4 habe ich folgendes Problem:

    Wir haben ein Lazarus(Pascal)-Programm geschrieben, welches unter Windows automatisch eine Datenbank installiert; als Vorlage dient ein Postgis-Template (template_postgis).

    Vom Programm werden einzelne SQL-Befehle aus einem Script an Postgres gesendet; unter 8.2 funktioniert das auch prima.

    Unter 8.3.4 gibt es bei folgender Zeile (unterstrichen):

    CREATE TABLE public.befundprofil (
    id bigserial NOT NULL,
    "name" varchar(128),
    CONSTRAINT befundprofil_pkey PRIMARY KEY (id)) WITHOUT OIDS;

    ALTER TABLE public.befundprofil OWNER TO "Administrator";

    INSERT INTO Befundprofil (ID,Name) VALUES (1,'unbekannt');
    INSERT INTO Befundprofil (ID,Name) VALUES (2,'Sandbodenprofile der Geest');
    INSERT INTO Befundprofil (ID,Name) VALUES (3,'Sand mehr als 20 dm');


    eine Fehlermeldung:
    Ungültige Bytesequenz für Kodierung "UTF8" 0xfc

    Im PGADMIn wird das Script komplett verarbeitet, die Daten werden eingetragen.

    Hat Jemand eine Idee?

    Danke für Eure Hilfe.

    Gruß Bernd

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von Pegasus0211 Beitrag anzeigen
    eine Fehlermeldung:
    Ungültige Bytesequenz für Kodierung "UTF8" 0xfc

    Im PGADMIn wird das Script komplett verarbeitet, die Daten werden eingetragen.

    Hat Jemand eine Idee?

    Danke für Eure Hilfe.

    Gruß Bernd
    Setze im Script/Client das Client-Encoding passend.

    Beispiel:

    Code:
    test=# show client_encoding;
     client_encoding
    -----------------
     LATIN1
    (1 row)
    
    test=*# set client_encoding ='UTF8';
    SET
    test=*# show client_encoding;
     client_encoding
    -----------------
     UTF8
    (1 row)
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Pegasus0211 ist offline Benutzer
    Registriert seit
    05.09.2006
    Ort
    Scheeßel
    Beiträge
    53

    Standard

    Danke, Andreas,

    kannst Du mir sagen, warum die Fehlermeldung erst beim 3. Eintrag auftritt; die ersten beiden Einträge werden in die Datenbank eingefügt.

    Erst die unterstrichene Zeile liefert die Fehlermeldung.

    Gruß Bernd

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von Pegasus0211 Beitrag anzeigen
    Danke, Andreas,

    kannst Du mir sagen, warum die Fehlermeldung erst beim 3. Eintrag auftritt; die ersten beiden Einträge werden in die Datenbank eingefügt.

    Erst die unterstrichene Zeile liefert die Fehlermeldung.

    Gruß Bernd
    Vielleicht ist da noch irgend ein Sonderzeichen drin?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    Pegasus0211 ist offline Benutzer
    Registriert seit
    05.09.2006
    Ort
    Scheeßel
    Beiträge
    53

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Vielleicht ist da noch irgend ein Sonderzeichen drin?
    Andreas

    Nein, es sind keine Sonderzeichen drin; der emfohlene Eintrag hat auch keine Abhilfe gebracht.

    Kann es daran liegen, dass der Server mit win1252-Encoding läuft; das Postgis-Template wird bei der Postgis-Installation automatisch als UTF8 installiert und somit auch als Vorlage verwendet?

    Wenn ich die Vorlage ignoriere und einfach eine gleichnamige Datenbank ohne die Postgis-Einträge erstelle, dann wird das Script komplett verarbeitet.

    Danke für Deine Mühe

    Gruß aus Scheeßel

    Bernd

  6. #6
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Zitat Zitat von Pegasus0211 Beitrag anzeigen
    Nein, es sind keine Sonderzeichen drin
    Es ist ein Sonderzeichen drin, das ist die Stelle an der diese Fehlermeldung auftritt.

    Übrigens sind Sonderzeichen je nach eingestelltem Encoding unterschiedlich. Wenn du also Latin1 hast werden jede Menge "normaler" Zeichen Probleme machen wenn diese aus UTF8 kommen. Deine Daten sind anscheinend Latin1 oder Windows 8 Bit oder so und du versuchst diese, in eine UTF8 Verbindung zu schreiben. Dann interpretiert UTF8 diverse Bits anders und versucht, aus dem aktuellen und einigen Folgebytes ein Zeichen zu lesen. Wenn das nicht funktioniert weil es das Zeichen nicht gibt ... dann löst das genau diesen Fehler aus.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  7. #7
    Pegasus0211 ist offline Benutzer
    Registriert seit
    05.09.2006
    Ort
    Scheeßel
    Beiträge
    53

    Standard

    Guten Morgen,

    heute kommt mein Kollege aus dem Urlaub; er meinte, wir sollten es mal mit dem Befehl

    set client_encoding = 'win1252' (statt 'utf8')

    und siehe da; das ganze Script wird abgearbeitet.

    Aber WARUM ist es so? Ich möchte gern PostgreSQL verstehen...


    Lieben Gruß

    Bernd

  8. #8
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

    Daten können in unterschiedlichen Encodings vorliegen, deine sind Windows Encoding, die Datenbank verlangt UTF8 Encoding. Glücklicherweise kann die Datenbank das automatisch umwandeln (solange sich das eine in dem anderen abbilden lässt), du musst der DB nur sagen, in welchen Encoding deine Daten vorliegen. Der Rest passiert automatisch.

    Deine Daten stehen jetzt in UTF8 in der Datenbank. Wenn du sie wieder im Windows Encoding zurückhaben möchtest, setzt du client_encoding wieder passend und die DB liegert die Daten dann in deinem gewünschten Encoding zurück.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  9. #9
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    Zitat Zitat von Pegasus0211 Beitrag anzeigen
    heute kommt mein Kollege aus dem Urlaub; er meinte, wir sollten es mal mit dem Befehl

    set client_encoding = 'win1252' (statt 'utf8')

    und siehe da; das ganze Script wird abgearbeitet.

    Aber WARUM ist es so? Ich möchte gern PostgreSQL verstehen...

    PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Character Set Support

    Und hier noch etwas zum spielen: UTF Converter





    mfg

    fristo

  10. #10
    Clericer ist offline Neuer Benutzer
    Registriert seit
    07.06.2009
    Beiträge
    3

    Standard

    Danke für die schnelle Antwort

    Mit dem Primary key habe ich keine ahnung is das wenn ich auf design tabel gehe ob da ein Schlüssel ist oder nicht?

    Und der Ahnhang ist nett, dass mit der Verschlüsselung weis ich schon nur kann ich mit set client_encoding = 'win1252' nichts anfangen da ich nicht weis wozu das ist, soll ich das im query analyzer compilieren oder was?

    Und wenn ich das mache dann kommt außerdem diese Fehlermeldung
    Line 1: Incorrect syntax near '='.

    Also wenn das möglich wäre und jemand weis wie das stupide für Idioten zu lösen ist dann wäre ich sehr dankbar.

    Auch wenn ich selbst ungerne Skript Kiddys unterstütze aber sql ist ne Nummer für sich.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum