Page 1 of 1

crash with UDF-Index when ADD new Record

Posted: Sun Sep 01, 2024 10:41 am
by AUGE_OHR
hi,

i use a UDF-Index and it crash when add new Record
Application Internal Error - C:\hmg.3.4.4\1\HBTEL\HBTEL.exe
Terminated at: 2024-09-01 12:17:25
Nicht zu behebender Fehler 9201: hb_cdxPageKeyIntBalance: index corrupted.
Called from ORDFOR(0)
Called from SETDATAGRIDRECNO(2204) in source\h_grid.prg
Called from SETPROPERTY(7969) in source\h_controlmisc.prg
Called from ADDNEWREC(2497) in C:\hmg.3.4.4\1\HBTEL\HBTEL.PRG
Called from (b)MAIN(321) in C:\hmg.3.4.4\1\HBTEL\HBTEL.PRG
Called from _DOCONTROLEVENTPROCEDURE(6033) in source\h_windows.prg
Called from EVENTS(1794) in source\h_windows.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5694) in source\h_windows.prg
Called from MAIN(404) in C:\hmg.3.4.4\1\HBTEL\HBTEL.PRG

Code: Select all

2482 STATIC PROCEDURE AddNewRec()
2483
2484 LOCAL nRecNo
2485
2486   SELECT 1
2487   ORDSETFOCUS(0)
2488   APPEND BLANK
2489 *  nRecNo := RECNO()
2490
2491   XPPTEL_Store()
2492   nRecNo := RECNO()
2493  
2494   IF SP_Browse() = "BROWSE"
2495      SetProperty( "XPPTEL", "Browse_1", "value", nRecNo )
2496   ELSE
->2497      SetProperty( "XPPTEL", "Browse_1", "RecNo", nRecNo )
2498   ENDIF

Code: Select all

FUNCTION TNR2STR( value )

LOCAL RETVAR := ""
LOCAL nLen   := LEN( value )
LOCAL nSoll  := nLen
LOCAL i, nDiff
LOCAL cStr

   FOR i = 1 TO nLen
      cStr := SUBSTR( value, i, 1 )
      IF cStr == CHR( 32 )
      ELSE
         RETVAR := RETVAR + cStr
      ENDIF
   NEXT

   nDiff := nSoll - LEN( RETVAR )
   FOR i = 1 TO nDiff
      RETVAR := RETVAR + CHR( 32 )
   NEXT

RETURN RETVAR

Code: Select all

PROCEDURE CreateCDX( cCodepage )

LOCAL _tagname, _keyfeld, _cdxname

   USE XPPTEL.DBF VIA "DBFCDX" EXCLUSIVE CODEPAGE (cCodepage)

   _cdxname := "XPPTEL.CDX"                                           // "TELINDEX"

   _tagname := "KDNAME"                                               //zkdname   1
   _KEYFELD := "UPPER(NAME1+NAME2)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "STADT"                                                //zkdort    2
   _KEYFELD := "UPPER(STADT+STRASSE)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "STRASSE"                                              //zstrasse  3
   _KEYFELD := "UPPER(STRASSE+STADT)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "GESCHTEL"                                             //ztelefon  4
   _KEYFELD := "TNR2STR(TELGES)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "FAX"                                                  //ztelfax   5
   _KEYFELD := "TNR2STR(TELFAX)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "1_HANDY"                                              //          6
   _KEYFELD := "TNR2STR(HANDY1)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "2_HANDY"                                              //          7
   _KEYFELD := "TNR2STR(HANDY2)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "3_HANDY"                                              //          8
   _KEYFELD := "TNR2STR(ANHANDY)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "4_HANDY"                                              //          9
   _KEYFELD := "TNR2STR(PVHANDY)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "ANSPVOR"                                              //zansprech 10
   _KEYFELD := "UPPER(ANSPVOR+ANSPNACH)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "ANSPNACH"                                             //zansprech 11
   _KEYFELD := "UPPER(ANSPNACH+ANSPVOR)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "BRANCHE"                                              //zbranche  12
   _KEYFELD := "TKSEL+UPPER(NAME1)"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "KUNDENNO"                                             //zkdnr     13
   _keyfeld := "TKDNR"
   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   _tagname := "ALLETELNO"                                            //zkdnr     14
   _keyfeld := "TNR2STR(VORTELE)+" + ;
               "TNR2STR(TELGES) +" + ;
               "TNR2STR(VORFAX) +" + ;
               "TNR2STR(TELFAX) +" + ;
               "TNR2STR(VORPRIV)+" + ;
               "TNR2STR(TELPRI) +" + ;
               "TNR2STR(HANDY1) +" + ;
               "TNR2STR(HANDY2) +" + ;
               "TNR2STR(ANHANDY)+" + ;
               "TNR2STR(PVVORT1)+" + ;
               "TNR2STR(PVTEL1) +" + ;
               "TNR2STR(PVVORF1)+" + ;
               "TNR2STR(PVFAX1) +" + ;
               "TNR2STR(PVHANDY)"

   ORDCREATE( _cdxname, _tagname, _keyfeld )
   CLOSE INDEX

   CLOSE

RETURN
why it CRASH :?:
i have try to disable CDX-Index using ORDSETFOCUS(0) when ADD new Record but it does now help.
what can i do :?:

Re: crash with UDF-Index when ADD new Record

Posted: Sun Sep 01, 2024 5:02 pm
by edk
Maybe try using #translate directive instead of TNR2STR UDF.

Code: Select all

#translate TNR2STR( <cString> ) => Pad( StrTran ( <cString>, " " ), Len( <cString> ) 
If you use a UDF in an index key, other programs that do not contain the used UDF will not be able to retrieve the index key.

Re: crash with UDF-Index when ADD new Record

Posted: Sun Sep 01, 2024 6:31 pm
by AUGE_OHR
hi Edward,
edk wrote: Sun Sep 01, 2024 5:02 pm If you use a UDF in an index key, other programs that do not contain the used UDF will not be able to retrieve the index key.
thx i will try #translate Directive instead of Function.

Yes i know that other programs that do not contain the used UDF will not be able to use it.
it is Part of my Protection like my Crypt Function.