Avatar billede hrc Mester
15. marts 2006 - 13:42 Der er 5 kommentarer og
1 løsning

Sætte karaktersættet (character set) i databasen

Jeg har ÆØÅ-problemer i mit dll som forbinder til Interbase og Firebird-databaser hvor det behandler data oprettet af "moderprogrammet". Da dll-et også skriver til tabellerne skal karaktersættet passe.

Moderprogrammet tilslutter til via BDE (det er et ældre program og BDE forsvinder forhåbentligt snart). I BDE-aliaserne kan LangDriver være: (tom, WEurope (ansi) og Nordan40). Det er noget rod, men det skal mit dll altså håndtere.

Jeg har haft et bøvl med at finde de rette parametre at tilslutte til databasen med, men er nået frem til at det er CT_CTYPE jeg skal bruge. Dette overføres fra moderprogrammet og sættes.
Jeg kan se forskel når jeg, i testprogrammet, sætter karaktersættet til nordan40 i en database der kører 8859_1 (default), mens der i en database med nordan40 intet sker. Her er dll’ets ÆØÅ’er er fine, mens moderprogrammets er ”grimme”.

Er der nogen der kan fortælle hvad jeg gør forkert?

Jeg forbinder til databasen med TIBDatabase (følger med i Delphi-pakken (2006)), men er det mon den rette komponent at bruge?
Avatar billede pellelil Nybegynder
15. marts 2006 - 14:46 #1
Både når du opretter databasen og når du connect'er til den SKAL du benytte samme charset. Normalt anvender jeg altid "ISO8859_1" og har således hverken problemer med at benytte Danske bogstaver eller at få den rigtige sortering (husk envidere at sætte dine VARCHAR's "collate" til "DA_DA").
Avatar billede hrc Mester
15. marts 2006 - 15:40 #2
Hej Pelle. Jeg håbede du "bed" på :-)

Det er bare ikke sådan min verden ser ud, desværre. Alle de nye databaser genereres på den måde. De gamle gør ikke og den bedste løsning er sikkert, at hente kundernes databaser når de skal opgradere og så DataPump'e det til en korrekt database. Det er ret store databaser, men vi har en god linie til vores ftp-server, så det kan lade sig gøre. Medmindre brugerene benytter en delt-BDE konfigurationsfil skal n brugere derefter have rettet deres indstillinger. Man slipper nok ikke uden om at rette det.

Er den korrekte mapning for BDE's LangDriver indstilling "WEurope ANSI", at bruge ISO8859_1?

Jeg troede at man kunne angive "character set" via LS_CType, så det passede med programmets og så slippe for problemer, men sådan ser det ikke ud. Via BDE er LangDriver Nordan40, men det ændrer ikke noget i mit program selvom jeg sætter den der.

Skal alle mine VarChars have en COLLATE (nå, det er der man sætter den)?
Avatar billede pellelil Nybegynder
16. marts 2006 - 06:42 #3
Det er for lang tid siden jeg har anvendt BDE til at jeg kan huske hvilke muligheder du har, men mon ikke at du kan specificere charsettet via det component du connecter til databasen (TDatabase)!?

Ja i princippet skal alle dine VARCHAR sættes med en COLLATE der hedder "DA_DA", med mindre du har anvendt DOMAINs.
Avatar billede hrc Mester
16. marts 2006 - 08:45 #4
Det er det der er problemet. Moderprogrammet bruger BDE og TDatabase til at koble til databasen, mens jeg gerne vil skippe gammelt skrammel og gå direkte til TIBDatabase.

Nu er jeg kommet for langt med transaktioner og sessioner til at kunne få det over på TDatabase m.v. så vi løser problemet ved at konvertere alle databaserne til vesteuropæisk tegnsæt. Det er også noget skrammel det andet.

En opdatering af programmet vil automatisk modificere BDE-aliaset når det starter. På den måde slipper vi for at have en mand rundt til alle maskiner.

Dine forslag gjorde mig klogere men løste ikke problemet. Jeg tøver dog ikke med at give points, da dine svar her på eksperten (og sikkert også andre steder :-)) altid er gode.
Avatar billede pellelil Nybegynder
17. marts 2006 - 09:51 #5
Glæder mig at du påskønner svarene selv om de ikke løste problemet :-)

At du anvender TIBDatabase i stedet for TDatabase skulle gøre det hele meget nemmere, da du således ikke har behov for at gå igennem BDE'en. Når du dobbeltklikker på dit TIBDatabase komponent kan du direkte sætte den op til hvilket charset du vil benytte. Havde du i stedet bruge TDatabase så skulle du manualt have sat charset via "Params" propertien.
Avatar billede hrc Mester
17. marts 2006 - 14:12 #6
Nå ja, men det der sker når man dobbeltklikker på TIBDatabase-ikonet er det samme: Der indsættes parametre i param.

Det har jeg gjort og det virker ikke. En database der kører Nordan40 og med parameteren sat til samme, giver mig ikke de danske tegn.

Nu konverterer vi de databaser der vil financiere den efterhånden ret horrible udviklingstid.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester