xsharp.eu • Umlaute aus DBF von VO nach X# nicht korrekt
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