1

最近、MySQL のバージョンを 5.6.10 (Linux のコミュニティ エディション) にアップグレードしました。その後、MySQL ODBC ドライバー 3.5.1 経由で MySQL 5.0.24a と正常に通信する Crystal Report を正しく実行できません。

レポートは SQL コマンドから作成されており、手動でクエリと日付 ala 2013-05-15 を MySQL クライアントに入力すると正常に動作しますが、パラメータを ODBC 経由で渡すと (クエリの日付を { として再フォーマットします) d '2013-05-15'} MySQL はランダムな結果を返します。つまり、ある実行では負の値のない結果が返され、別の実行では負の値だけが返され、別の実行では結果が返されません。実際に完全なレポートを取得する場合もあります。しかし、それは予測できません。

特に日付パラメーターに絞り込みましたが、Crystal Reports 2011 と MySQL ODBC 5.2 の両方にアップグレードした後、問題は解決しません。「日付」パラメーターを「文字列」パラメーターに変更することで回避しましたが、それは理想的ではありません。

MySQL 5.6.10 サーバーの他のすべては正常に動作しているように見えます。ODBC の処理方法に関して 5.0 と 5.6 の間で変更があったかどうかをまだ判断しようとしていますが、これまでのところ、うまくいきませんでした。なぜこれがとても奇妙に振る舞っているのか。

関連するパラメーターを含むクエリの一部を次に示します...

    select sql_no_cache
    if(CCT.creditCardTypeName is not null, CCT.creditCardTypeName, if(OPBML.orderPaymentBMLID is not null, 'Bill Me Later', 'Cash/Check')) as theType,
    'orderPayment               ' as source,
    date_format(OP.authorizationDate, '%Y-%m-%d') as theDate,
    if (OPC.checkNumber is not null, OPC.checkNumber, '') as checkNum,
    if (OPWT.wireTransferDate is not null, OPWT.wireTransferNumber, '') as wtNum,
    concat(C.lastName, ', ', C.firstName) as custName,
    O.orderNumber,
    OP.amount
from
    orders O
    inner join orderPayment OP on (O.ordersID=OP.ordersID)
    inner join paymentMethod PM on (PM.paymentMethodID=OP.paymentMethodID)
    inner join customer C on (C.customerID=O.customerID)
    inner join partner P on (C.partnerID = P.partnerID and P.businessUnit = {?businessUnit})
    left outer join orderPaymentBML OPBML on (OP.orderPaymentID=OPBML.orderPaymentID)
    left outer join orderPaymentCheck OPC on (OP.orderPaymentID=OPC.orderPaymentID)
    left outer join orderPaymentCreditCard OPCC on (OP.orderPaymentID=OPCC.orderPaymentID)
    left outer join orderPaymentWireTransfer OPWT on (OP.orderPaymentID=OPWT.orderPaymentID)
    left outer join creditCardType CCT on (CCT.creditCardTypeID=OPCC.creditCardTypeID)
where
    OP.authorizationDate between date_add({?date},INTERVAL "3:0:01" HOUR_SECOND) and 
    date_add( date_add({?date}, INTERVAL 1 DAY), INTERVAL "3:0:00" HOUR_SECOND) and
    PM.paymentMethodAbbreviation in ('BM', 'CC', 'CH', 'WT')

ありがとう、 --SJ

4

1 に答える 1

1

最後のコメントは解決策です:

「わかりました - 問題は解決したと思います。5.6.4 の副作用は、キーワードがリテラルにどのように影響するかを変更することで、ODBC ドライバーで文字セットを指定する必要があることが判明しました。DB に正しい文字セットを指定し、現在、正しい結果が得られています。」

ほとんどの人はすでにそれを指定していると思いますが、私たちの場合は指定されておらず、「ただうまくいった」だけです。

于 2013-05-28T19:13:53.697 に答える