Most of the time, the trick to getting a good relational database design is eliminating redundant information, using a process called "normalization". When you eliminate the redundancy, you maximize efficiency and minimize errors.
Unfortunately, in this case you have eliminated too much apparent redundancy. Your system ties each product on each order with the current price. That's fine when you're creating an order, but once the prices are locked in they shouldn't change; the order document now becomes historical fact, not current data.
In this case - when data changes from current to historical usage - you should have the price redundantly stored. In the historical order it represents the price at some point in the past. In the pricing table it represents the current price for new orders.
Now, you can't "lock" a record the way you're talking about. I think you don't understand that your "record" isn't a single record at all, but is built up from data in several tables, at the time you want to look at it. One of those tables is the current price, and you certainly don't want to lock that from being changed.
But certainly it is possible to design the tables and the application to make it possible to store the historical price. The only trouble is, it may not be practical to do so. It might require redesigning your order processing system to a large degree, or it might require having source code that whoever wrote your system has locked up out of your reach. So I wouldn't accuse your computer guy of lying about it, or being ignorant. He may just be telling you that you can't get there from here. Rick Sprague