Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 10 09:53 #1702

  • Szőrös
  • Szőrös profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 5
  • Köszönetek: 0
Orékliben tárolva az adatod a legtöbb esetben (ha másként nem rendelkezel) AL32UTF8
Nem szoktak ettől eltérni. A kliens, mint fentebb írtam mindig elvégzi a megfelelő konverziókat, alkalmazkodva ahhoz a szerephez, amit az adott kliens gépen levő oprendszer megkíván, valahogy így:
kliens gép oprendszer charset <-> oracle kliens <-> adatbázis charset
Amikor gáz van az oréklis karakterekkel, akkor két hiba fordulhat elő:
1./ az történik, hogy az orékli kliens nem a kliens gép oprendszer charset szerinti kódolásban kapja az adatot
2./ a szerver közvetlenül, nem az orékli kliensen keresztül kap adatot a saját beállításától eltérő charset szerint

Itt most az első eset van fennforgásilag, és a folyamatos oda vissza konvertálást egy általános beállítással kerülném el, már ha lehet olyat...

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 08 08:10 #1675

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Azt írtad, hogy az adatbázis "valahogy tárolja" a karakterkódolást, de ez nem elég információ. Meg kell tudnod milyen kódolással vannak tárolva az adatbázisban az adatok (esetenként az egyes táblák eltérőek lehetnek). Mivel úgy értelmeztem, hogy magyar nyelvű windows-ról dolgozol ezért feltételezem, hogy az adatbázis kódolása ennek megfelelő: 'EE8MSWIN1250'.

Használd a CONVERT(adat, célkódolás, eredetikódolás) függvényt az SQL lekérdezésekben...

A SELECT lekérdezésekben kérd a kiszolgálótól az adatok karakterkódolásának átalakítását, hogy az alkalmazásod UTF8 kódolással kapja a karaktereket 1250 helyett. Ez nagyjából így néz ki:
SELECT CONVERT(NemUTF8Oszlop, 'UTF8', 'EE8MSWIN1250') FROM NemUTF8Tabla;

UPDATE és INSERT esetén is használható a küldött értékek kódolásának átalakítására, de értelemszerűen a kódolások megadása fordított sorrendben történik:
INSERT INTO NemUTF8Tabla (NemUTF8Oszlop) VALUES CONVERT ('utfszöveg', 'EE8MSWIN1250', 'UTF8');

(Nem vagyok az Oracle SQL dialektusában túl járatos ezért lehet hiba abban amit írtam.)
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 07 17:12 #1672

  • Szőrös
  • Szőrös profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 5
  • Köszönetek: 0
Frissítettem, nincs változás.
A kapcsolat a teszt programban:
TOracleConnection használatával
OracleConnection1.Databasename := e_szerver.text;
OracleConnection1.Username := e_sema.text;
OracleConnection1.connected := OracleConnection1.connected = False;
Az OracleConnection.CharSet változtatására nem reagál a jelenség.

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 07 15:00 #1671

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
A lazarus-od nagyon régi. Frissítsd! Utána tudjuk folytatni...

Hogyan és milyen komponensekkel valósítod meg az adatbázishoz csatlakozást?
Előfordulhat, hogy a csatlakozáshoz/lekérdezéshez megadott beállításokat kell felülvizsgálni...

Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 07 14:18 #1669

  • Szőrös
  • Szőrös profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 5
  • Köszönetek: 0
Igen a karakterkódolásról van szó. Oracle XE az adatbázis szerver, centos6 a szerver gép OPrendszere, de ezeknek nincs jelentőségük. Az Oracle-hez csatlakozik win7 oprendszerrel a kliens. Az ott telepített oracle kliens értelemszerűen a win7 karakterkódolását használja, ami esetünkben 1250. Itt a PL/SQL Developer és SQL+ normálisan jelenítik meg az ékezetes betűket, az általuk elmentett adatokat is normálisan lehet visszakapni, és ugyanezeket a szerveren SQL parancssorban szintén normálisan lehet megjeleníteni. Ezeket a Lazarus viszont nem jól jeleníti meg, az ékezetes betűk helyén kérdőjel(?) látható. Amit a Lazarus ment el adat, az a Lazarussal jól olvasható, míg a többi programmal már elrondulnak. Ez azért gáz, mert ha egy másik gépen egy riportoló eszközzel jelenítik meg, akkor is el van rondulva a Lazarus által rögzített adat, és ugyanez a probléma akkor is, ha ezt az adatot egy másik szervernek átadom.
A problémát az okozza, hogy az oracle a kliensen keresztül az oprendszer beállítása szerinti karakterkódolásban várja az adatot, de a Lazarusól UTF8-at kap...
Vagy az egész windózt átállítom UTF8-ra, de ez a BOM (EF BB BF) miatt egy kissé gáz, mert a BOM sok helyen kiveri a biztosítékot, vagy a Lazarust próbálom beállítani arra hogy használja az oprendszer kódolását.
Kérdés, hogy ez utóbbit hol tudom beállítani?
Lazarus verzió 1.2.6
FPC verzió 2.6.4

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 07 07:03 #1665

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Milyen adatbázist használsz?
Milyen operációs rendszerekről van szó?
Biztos, hogy ezek az operációs rendszerek ténylegesen eltérő karakterkódolást (nem karakterkészlet) használnak?

Szőrös írta: Az adatbázis valahogy tárolja, ezt szinte soha nem állítja át senki, az adatbázis kliens mindig alkalmazkodik az adott oprendszerben érvényes karakterkészlethez.

Alkalmazkodni az adott operációs rendszeren érvényes karakterkódoláshoz (nem karakterkészlet) csak úgy tud egy ügyfélprogram (kliens), hogy átalakítja a karakterkódolást ha az nem egyezik a helyi elvárással...

A karakterkészlet és a karakterkódolás nem ugyanaz:
  • A karakterkódolás az a mód ahogy a szövegben egy (speciális) karaktert azonosítunk, ez mutatja hogy az éppen használt karakterkészletből melyik jelet kell használni. Többnyelvű környezetben (ilyen a Lazarus is) jelenleg a legjobb és legelterjedtebb módszer az UTF-8. A windows-ok többnyire egynyelvűek és ezért a grafikus felületen az adott nyelvhez igazított kódolást használnak (pl. 852 a dos ablakban, 1250 vagy másképp ISO-8859-2 a grafikus felületen a magyar nyelvhez)
  • A karakterkészlet vagy másképp (félrevezető nevén) betűtípus egy másik dolog: a használt karakterkészlet/betűtípus (pl. ttf vagy otf fájl) vagy tartalmazza az összes kívánt karaktert ábráját vagy nem.

Hogyan és milyen komponensekkel valósítod meg az adatbázishoz csatlakozást?
Előfordulhat, hogy a csatlakozáshoz megadott beállításokat kell felülvizsgálni...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 06 23:59 #1664

  • Szőrös
  • Szőrös profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 5
  • Köszönetek: 0
Az adatbázis valahogy tárolja, ezt szinte soha nem állítja át senki, az adatbázis kliens mindig alkalmazkodik az adott oprendszerben érvényes karakterkészlethez. Ezzel biztosítja azt, hogy az adott adatbázis szervert mindenki ugyanúgy lássa, a megfelelő ékezetes karakterekkel.
DE a Lazarus nem az oprendszer karakterkészletéhez igazodik, hanem a sajátjához, ami UTF8, és ha ezt nekem minden egyes adatbázis olvasáskor, illetve íráskor konvertálnom kell az nem túl biztató. Nem vagyok gyakorlott Lazarus programozó, így nem tudom azt se, hogy hol tudom a DBGrid-nek a konvertálását biztosítani.
Nekem az lenne a tutti, ha be tudnám állítani valahol, hogy a konverzió automatikus és rendszerszintű legyen, ne kelljék minden alkalommal, minden új ojjektummal pöcsmötölni, hogy normálisan megjelenjen az "árvíztűrőtükörfúrógép" :)

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 04 23:41 #1649

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Vess egy pillantást ezekre:
Utf8ToSys
SysToUtf8
LCL Unicode Support

Az adatbázis karakterkódolásának nem állítható be az utf8?
Ez lenne az igazán helyes megoldás... 1k oka is van, hogy miért...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Oracle XE - Lazarus - Win7 furán működő karakter konverzió 2015 dec. 04 21:48 #1648

  • Szőrös
  • Szőrös profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 5
  • Köszönetek: 0
A probléma a következő:
Ha a lazarussal készült progival mentek ékezetes szöveget az adatbázisba, akkor azokat az adatokat ugyanazzal a progival visszaolvasva jól látszanak az ékezetes betűk.
Ha más progival mentek az adatbázisba ékezetes betűs szövegeket, ugyanazzal visszaolvasva szintén jól látszanak az ékezetes betűk.
DE ha a másik progival olvasom a lazarus által mentett szövegeket, akkor szétesik az egész, és ha lazarussal olvasom a másik által mentett szöveget, akkor az ékezetes betűk helyén kérdőjel (?) látható.

Valahogy arra kellene rávennem a lazarust, hogy használja az oprendszeren beállított karakterkódolást, ne erőltesse az UTF8-at mindenáron.

  • Oldal:
  • 1