and the find
Open Manage | Database and check the field type. My guess is that this field is defined as number when it should be defined as text.
That works for the sort -- great - simple mistake thanks
Find matching records returns anything that contains Wheat 14 rather than just "Wheat 14" see screen shot is there a way to make the find more precise ?
Don't use find matching records. Use a script so that your script can copy the value of the field to a variable, enter find mode and then combine the search text with the exact match operator ==
Set Variable [$CropCode ; Value: YourTable::Crop Code ]
Enter Find Mode 
Set Field [YourTable::Crop Code ; "==" & $CropCode ]
This will probably require that you do this with a list view layout rather than table view. In List view, you can put a button next to this field to click to perform this script.
Finally came back to this and cracked it !
I was having trouble with writing the script (the bit below) I couldn't get using the specify result pop up using the "operators"
the only way I could do it was to copy your code manually letter by letter.
; "==" & $CropCode ]
I got there in the end
Many Thanks Phil