Page 1 of 3
Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Wed Apr 10, 2024 8:54 am
by lagraf
Hallo,
ich bin beim Testen einer von VO nach X# transportierten App mit DBF Files. In VO habe ich folgende initial settings:
Code: Select all
SetAnsi (FALSE)
SetCollation (#CLIPPER)
SetInternational (#CLIPPER)
SetDateCountry (GERMAN)
SetNatDLL ("GERMAN.DLL")
Wenn ich mit X# die DBF Daten auslese, bekomme ich falsche Umlaute bei Daten aus den DBFs angezeigt.
Korrigiere ich die Umlaute in X# sind sie in VO wieder falsch.
Welche Einstellungen brauche ich in X#, damit die Umlaute korrekt angezeigt und eingegeben werden?
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Wed Apr 10, 2024 9:13 am
by Chris
Hi Franz,
Can you please send the dbf to have a look? Need to check its ansi setting.
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Wed Apr 10, 2024 9:38 am
by lagraf
Hi Chris,
the attached Dbf from Topic "Beim Öffnen einer DBF steht EOF auf .t." is one of these Dbfs.
Franz
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Thu Apr 11, 2024 8:25 am
by Chris
Hi Franz,
Thanks for the report, it is indeed a bug in X# with handling OEM (SetAnsi(FALSE)) dbfs, I opened a report here:
https://github.com/X-Sharp/XSharpPublic/issues/1449
In the meantime, can't you use SetAnsi(TRUE) instead (both for opening and creating the dbfs)? I think the only reason for using OEM dbfs is for compatibility with old clipper dbfs.
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Thu Apr 11, 2024 9:15 am
by lagraf
Hi Chris,
Code: Select all
CLASS dbStandard INHERIT dbServer
CONSTRUCTOR (cFileName, lDbShared, lReadOnly)
LOCAL cDbf AS STRING
SetAnsi(TRUE) // Umlaute in DBF
Default (@lReadOnly, FALSE)
Default (@lDbShared, TRUE)
cDbf := dbFileSpec{cFileName + ".DBF"}:FullPath
SUPER:init (cDbf, lDbShared, lReadOnly)
SELF:concurrencyControl := CCNONE
IF File(StrTran(cDbf, ".DBF", ".CDX"))
SELF:setIndex (StrTran(cDbf, ".DBF", ".CDX"))
ENDIF
SELF:GoTop() // In X# steht Server nach dem Öffnen auf EOF
RETURN SELF
This SetAnsi(TRUE) does not have any effect, Umlauts are still wrong!
Franz
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Thu Apr 11, 2024 9:17 am
by Chris
Hi Franz,
Yes, that's because the dbf must also be (re)generated with having SetAnsi(TRUE) first (from either X# or VO). Then it will work the same from both X# and VO.
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Thu Apr 11, 2024 9:22 am
by lagraf
Hi Chris,
that means that I have to
- rename all DBFs (about 30)
- create all DBFs new with SetAnsi(TRUE)
- copy all recs from renamed DBFs to new DBFs
- delete renames DBFs
Or another way maybe?
- Run through all DBFs, update char fields with replaced Umlauts
Many things to do!
Franz
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Thu Apr 11, 2024 9:38 am
by Chris
Hi Franz,
The dbfs need to be recreated with the new ANSI setting, so you need the first option. Of course you can write a small utility app to do it automatically, if you want I can create one for you.
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Thu Apr 11, 2024 10:18 am
by lagraf
Hi Chris,
thank you, but I can do this by myself. I already have some DBF upgrade routines in this app which do similar.
Franz
Re: Umlaute aus DBF von VO nach X# nicht korrekt
Posted: Fri May 31, 2024 6:49 am
by lagraf
Hi Chris,
I tried to convert DBFs with following code in VO to convert it from OEM to ANSI:
Code: Select all
SetAnsi(TRUE)
FRename(GetDefault()+"KGR.DBF", GetDefault()+"KGR.TMP") // Rename old OEM DBF
odb := dbKgr{} // Create new ANSI DBF
odb:AppendDB(GetDefault()+"KGR.TMP") // Append all recs
// odb:GoTop()
// DO WHILE !odb:Eof
// IF odb:RLOCK()
// odb:FIELDPUT("TXT", Oem2Ansi(odb:FIELDGET("TXT")))
// ENDIF
// odb:Skip()
// ENDDO
odb:Close()
But Umlauts in textfields remain wrong. Then I uncommented DO WHILE block to update textfield manually, but also no effect. What is wrong in my code?
Franz