http://bugs.winehq.org/show_bug.cgi?id=5754
Summary: oleaut32: MS Dao 3.5 fails to evalutate "SELECT <CurrencyField> - <Currencyield> FROM ..." sql Product: Wine Version: 0.9.17. Platform: Other OS/Version: other Status: UNCONFIRMED Severity: normal Priority: P2 Component: wine-ole AssignedTo: wine-bugs@winehq.org ReportedBy: paolo.salvan@xvision.it
Using DAO 3.5 (the engine for MS Access 97 databases) and Wine 0.9.17 I've got a trouble:
when I launch a query that does a subtraction between two currency field (ie: "SELECT InvoiceTotal - Taxes AS Revenue FROM ...."
the query fails, lamenting some incorrect types...
The console log says: ---- fixme:variant:VarSub can't expand vt 6 vs 6 to a target type. ---- Replacing the builtin OLEAUT32.DLL with the native DLL everything works ok.
The attached minimal project reproduce the problem; before starting it, install standard Dao 3.5 setup from MS or install http://download.danea.it/demo/def2006demo09b.exe (that is my SW, it install a minimal Dao3.5)
BTW, this is the minimal bit of Delphi code to reproduce the problem:
procedure TForm1.Button2Click(Sender: TObject); var daodbeng: DAODBEngine; daodb: DAODatabase; daors: DAORecordset; iType: integer; begin try daodbeng:= OpDAO35.CreateEngine; daodb:= daodbeng.OpenDatabase(ChangeFileExt(Application.ExeName, '.mdb'), false, false, ''); // Note: TotDoc and TotNetto are CURRENCY fields daors:= daodb.OpenRecordset('SELECT TotDoc - TotNetto AS Iva FROM TDocTestate', dbOpenDynaset, _, _);
// Under windows, it shows "5", under Wine "0" // log: fixme:variant:VarSub can't expand vt 6 vs 6 to a target type. iType:= daors.Fields[0]._Type; if iType = 5 then showmessage('OK') else showmessage('Wrong type: ' + inttostr(iType));
daors.Free; daodb.Free; daodbeng.Free; except on e: Exception do ShowMessage('Exception: ' + e.ClassName + '; Msg: ' + e.Message); end; end;