CLEAR CLOSE DATABASES all SET COLLATE TO "MACHINE" SET ANSI ON ?CPCURRENT() IF .T. _screen.FontCharSet=204 cRussian1251=0hE0E1E2E3E4E5B8E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FCFAFBFDFEFFC0C1C2C3C4C5A8C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DCDADBDDDEDF CREATE TABLE T1251 CODEPAGE=1251 (f0 I,f1 C(66) NOCPTRANS) *CREATE TABLE T1251 CODEPAGE=1251 (f0 I,f1 Q(66)) INSERT INTO T1251 VALUES (1,cRussian1251) LIST CREATE TABLE TCurr CODEPAGE=1252 (f2 I, f3 C(66) NOCPTRANS) *CREATE TABLE TCurr CODEPAGE=1252 (f2 I, f3 Q(66)) INSERT INTO TCurr VALUES (2,cRussian1251) LIST ELSE USE T1251 DELETE TAG all USE TCurr IN 0 SELECT TCurr DELETE TAG all ENDIF SYS(3054,12) SELECT f0,f2 FROM FORCE T1251 JOIN TCurr ON f1=f3 INTO CURSOR res list ?RECCOUNT() ? SELECT f0,f2 FROM FORCE TCurr JOIN T1251 ON f1=f3 INTO CURSOR res list ?RECCOUNT() ? select T1251 INDEX ON f1 TAG f1 select TCurr INDEX ON f3 TAG f3 SELECT f0,f2 FROM FORCE T1251 JOIN TCurr ON f1=f3 INTO CURSOR res list ?RECCOUNT() ? SELECT f0,f2 FROM FORCE TCurr JOIN T1251 ON f1=f3 INTO CURSOR res list ?RECCOUNT() SYS(3054,0) RETURNIt actually works fine if fields are not using NOCPTRANS and values can be translated back and forth without any loss. For example, the following code produces correct result with CPCURRENT()==1251 and CPCURRENT()==866.
CLEAR CLOSE DATABASES all SET COLLATE TO "MACHINE" SET ANSI ON ?CPCURRENT() IF .T. _screen.FontCharSet=204 cRussian1251=0hE0E1E2E3E4E5B8E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FCFAFBFDFEFFC0C1C2C3C4C5A8C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DCDADBDDDEDF if(CPCURRENT()=866) cRussian1251=CPCONVERT(1251,866,cRussian1251) ENDIF CREATE TABLE T1251 CODEPAGE=1251 (f0 I,f1 C(66)) INSERT INTO T1251 VALUES (1,cRussian1251) LIST CREATE TABLE T866 CODEPAGE=866 (f2 I, f3 C(66)) INSERT INTO T866 VALUES (2,cRussian1251) LIST ELSE USE T1251 DELETE TAG all USE T866 IN 0 SELECT T866 DELETE TAG all ENDIF GO TOP IN T1251 GO TOP IN T866 ?T1251.f1==T866.f3 SYS(3054,12) SELECT f0,f2 FROM FORCE T1251 JOIN T866 ON f1=f3 INTO CURSOR res list ?RECCOUNT() ? SELECT f0,f2 FROM FORCE T866 JOIN T1251 ON f1=f3 INTO CURSOR res list ?RECCOUNT() ? select T1251 INDEX ON f1 TAG f1 select T866 INDEX ON f3 TAG f3 SELECT f0,f2 FROM FORCE T1251 JOIN T866 ON f1=f3 INTO CURSOR res list ?RECCOUNT() ? SELECT f0,f2 FROM FORCE T866 JOIN T1251 ON f1=f3 INTO CURSOR res list ?RECCOUNT() SYS(3054,0) RETURNThanks,