0

ODBC コネクタ経由で Sage 50 アカウントから製品データを取得するシステムを開発しました。同期はうまく機能しますが、製品価格が切り上げ/切り下げされることに非常に苦労しており、その理由がわかりません。私はこれを広範囲に調査しましたが、私が知る限り、それは一般的な出来事ではありません.

Sage からデータを取得するコード:

$sql = "SELECT STOCK_CODE, DESCRIPTION, SALES_PRICE, QTY_IN_STOCK FROM stock";  
$r = odbc_exec($conn, $sql);  
$x = 0;  
$ignores=array('',);  
while ($row = odbc_fetch_row($r)) {  
for ($i = 1; $i <= odbc_num_fields($r); $i++)  
$results[$x][odbc_field_name($r, $i)] = odbc_result($r, $i);  
$x++;  
}

私は Sage に0.0886の価格の製品を 1 つ持っていますが、MySQL データに挿入すると0.09になります。私は Sage から得ているものを確認しましたが、それは0.09であるため、図をいじっているのは挿入ではありません。

PHPマニュアル内のODBCページで見つけた関数から、問題の列で次のことを発見しました。

odbc_field_type = DOUBLE  
odbc_field_scale = 4  
odbc_field_len = 15

したがって、Sage 内のこのフィールドの精度は小数点以下 4 桁であることがわかります。これは、製品価格として 0.1234 を格納できるため驚くことではありませんが、なぜ0.0886ではなく0.09を取得しているのかわかりません。

Sage 内の製品データベースには約 5500 のレコードがあり、50% 以上に小数点以下 4 桁の形式の価格が含まれています。価格を手動で入力するのは理想的とは言えず、同期の価値も低くなります。

誰かが助けてくれるように、この問題を十分に詳しく説明できたことを願っています。

4

1 に答える 1

0

上記の問題に対する答えはありませんが、問題は解決しました。

同じ ODBC コネクタを使用して、Sage から Excel に同じデータを取り込みました。これを行うことで、正しい価格が得られました。PHP コードをもう一度確認しましたが、丸めの問題を引き起こしている可能性のあるものは見つかりませんでした。

上記のコードを修正するのではなく、私の解決策はかなり複雑ですが、機能します。Excel にエクスポートし、MySQL の一時テーブルにアップロードしてから、更新クエリを実行して、テーブルに既に保存されている価格を更新します。

于 2018-04-24T15:35:46.290 に答える