Kbase P25010: Error (1896) when running code on a DataServer.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  12/18/2003 |
|
Status: Unverified
FACT(s) (Environment):
DataServers
SYMPTOM(s):
Error (1896) when running code on a DataServer.
** CRC for <table-name> does not match CRC in <procedure>. Try recompiling. (1896)
CAUSE:
Although the reasons for CRC values being different when using a non-Progress database via the DataServer still remain the same as when using a Progress database, there is an area that is different for DataServers that could be the cause.
This usually occurs after upgrading your non-Progress database's schema. In this example I will refer to Oracle as being the non-Progress database.
The cause is the _field._fld-stoff field, which is used in the Progress table CRC calculation. The _fld-stoff field is a physical position of the field in the non-Progress database.
The problem occurs when you do something like this:
Create a table Called T1, and a field F1 in a Progress database and push the schema to Oracle. The field order would look like this in the Oracle Database, remember that the PROGRESS_RECID is always created when creating a table:
F1
PROGRESS_RECID
Now you add an additional field called F2, the resulting order will be:
F1
PROGRESS_RECID
F2
If you then compiled a Progress 4GL program against the schema holder the table CRC values would be different than if you created both F1 and F2 fields at the same time, which would cause the order to be like this:
F1
F2
PROGRESS_RECID
FIX:
The most simple solution is to recompile the code against the new schema. However, if that's not possible due to wanting to keep one set of code for all customers then you may need to start playing with field orders.
It might be possible to write some sql code which in effect moves the Oracle fields to be in the order expected by the 4GL program. Progress Technical Support cannot help you create this sql code, however if you contact your Progress Sales Representative they 'might' be able to have a consultant assist you with this.
You will also need to check the database that the 4GL program was compiled against and find out the order that is required. Most likely, the _order field will also be incorrect. Code like this should be able to achieve that:
FIND _File WHERE _File._File-name = "<Your tablename>".
FOR EACH _Field OF _File:
DISPLAY _Field-name _Order _Fld-physpos WITH 3 COLUMNS.
END.