Page 1 of 1

Bug in Smartquery SQL generator

Posted: Tue 13 Mar 2012 08:34
by sbslavonac
Hi,
Delphi XE2, ODAC 8.1.5 has bug when generating INSERT, UPDATE, REFRESH... sql.
Case 1, compound primary key
query : SELECT com,
kasa,
provider,
prodaja_na_rate,
ecr_id,
auto_send
FROM pos_kasa pk

where "com,kasa,provider" is primary key.
Primary key is correctly recognized.

"Generate SQL" create error
Accces violation .....
[0CC20AE5]{dac160.bpl } Dbaccess.TDASQLGenerator.SQLInfo + $9 [0CC2168D]{dac160.bpl } Dbaccess.TDASQLGenerator.AddFieldToInsertSQL + $61 [0CD46974]{odac160.bpl } Oraservices.TCustomOraSQLGenerator.AddFieldToInsertSQL + $16C [0CC21757]{dac160.bpl } Dbaccess.TDASQLGenerator.GenerateInsertSQL + $6B [0CD46BBB]{odac160.bpl } Oraservices.TCustomOraSQLGenerator.GenerateInsertSQL + $1A7 [0CC22453]{dac160.bpl } Dbaccess.TDASQLGenerator.GenerateSQLforUpdTable + $C7 [0CB10A8A]{dcldac160.bpl} Dasqlgeneratorframe.TDASQLGeneratorFrame.GenerateSQLforUpdTable + $36 [0CE0E5F0]{dclodac160.bpl} Orasqlgeneratorframe.TOraSQLGeneratorFrame.GenerateSQLforUpdTable + $64 [0CB10DAE]{dcldac160.bpl} Dasqlgeneratorframe.TDASQLGeneratorFrame.btGenerateClick + $31A [0CE0E6C1]{dclodac160.bpl} Orasqlgeneratorframe.TOraSQLGeneratorFrame.btGenerateClick + $85 [50332EEB]{vcl160.bpl } Vcl.Controls.TControl.Click (Line 7320, "Vcl.Controls.pas" + 9) + $8 [50357392]{vcl160.bpl } Vcl.StdCtrls.TCustomButton.Click (Line 5160, "Vcl.StdCtrls.pas" + 3) + $2 [50357EC0]{vcl160.bpl } Vcl.StdCtrls.TCustomButton.CNCommand (Line 5621, "Vcl.StdCtrls.pas" + 1) + $D [50332995]{vcl160.bpl } Vcl.Controls.TControl.WndProc (Line 7204, "Vcl.Controls.pas" + 91) + $6 [0AAAE176]{AQtime7BDS9.bpl} Aqdockutils.ShowDockForm + $302 [503372F3]{vcl160.bpl } Vcl.Controls.TWinControl.WndProc (Line 9976, "Vcl.Controls.pas" + 152) + $6 [5035705C]{vcl160.bpl } Vcl.StdCtrls.TButtonControl.WndProc (Line 5002, "Vcl.StdCtrls.pas" + 13) + $4 [503325D0]{vcl160.bpl } Vcl.Controls.TControl.Perform (Line 6982, "Vcl.Controls.pas" + 10) + $8 [50337443]{vcl160.bpl } Vcl.Controls.DoControlMsg (Line 10045, "Vcl.Controls.pas" + 12) + $11 [50337ED7]{vcl160.bpl } Vcl.Controls.TWinControl.WMCommand (Line 10320, "Vcl.Controls.pas" + 1) + $5 [50332995]{vcl160.bpl } Vcl.Controls.TControl.WndProc (Line 7204, "Vcl.Controls.pas" + 91) + $6 [503372F3]{vcl160.bpl } Vcl.Controls.TWinControl.WndProc (Line 9976, "Vcl.Controls.pas" + 152) + $6 [50336948]{vcl160.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 9689, "Vcl.Controls.pas" + 3) + $6 [500B6890]{rtl160.bpl } System.Classes.StdWndProc (Line 13878, "System.Classes.pas" + 8) + $0 [503373F0]{vcl160.bpl } Vcl.Controls.TWinControl.DefaultHandler (Line 10017, "Vcl.Controls.pas" + 30) + $17 [50333340]{vcl160.bpl } Vcl.Controls.TControl.WMLButtonUp (Line 7453, "Vcl.Controls.pas" + 1) + $6 [50332995]{vcl160.bpl } Vcl.Controls.TControl.WndProc (Line 7204, "Vcl.Controls.pas" + 91) + $6 [19A56920]{rbIDE1416.bpl} Ppsynuedit.TSynEditPlugin + $70 [50336B3B]{vcl160.bpl } Vcl.Controls.TWinControl.IsControlMouseMsg (Line 9745, "Vcl.Controls.pas" + 1) + $9 [503372F3]{vcl160.bpl } Vcl.Controls.TWinControl.WndProc (Line 9976, "Vcl.Controls.pas" + 152) + $6 [1ACD3F51]{cxLibraryRS16.bpl} Dxhooks. + $0 [5035705C]{vcl160.bpl } Vcl.StdCtrls.TButtonControl.WndProc (Line 5002, "Vcl.StdCtrls.pas" + 13) + $4 [50336948]{vcl160.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 9689, "Vcl.Controls.pas" + 3) + $6 [500B6890]{rtl160.bpl } System.Classes.StdWndProc (Line 13878, "System.Classes.pas" + 8) + $0 [50454598]{vcl160.bpl } Vcl.Forms.TApplication.CancelHint (Line 10993, "Vcl.Forms.pas" + 6) + $7 [50453213]{vcl160.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 10164, "Vcl.Forms.pas" + 23) + $1 [50453256]{vcl160.bpl } Vcl.Forms.TApplication.HandleMessage (Line 10194, "Vcl.Forms.pas" + 1) + $4 [5044EA75]{vcl160.bpl } Vcl.Forms.TCustomForm.ShowModal (Line 7035, "Vcl.Forms.pas" + 33) + $5 [0CB1717B]{dcldac160.bpl} Daqueryeditor.TDAQueryEditorForm.SetComponent + $17 [0CB2A05C]{dcldac160.bpl} Crdesign.TCRComponentEditor.ShowEditorEx + $8C [0CB29FAA]{dcldac160.bpl} Crdesign.TCRComponentEditor.ShowEditor + $32 [0CB2A373]{dcldac160.bpl} Crdesign.TCRComponentEditor.Edit + $B

Generated INSERT SQL is OK.
UPDATE/LOCK & DELETE SQL is completely wrong :
UPDATE POS_KASA
SET
AUTO_SEND = :AUTO_SEND, ECR_ID = :ECR_ID, PRODAJA_NA_RATE = :PRODAJA_NA_RATE, PROVIDER = :PROVIDER, KASA = :KASA, COM = :COM WHERE
AUTO_SEND = :Old_AUTO_SEND AND ECR_ID = :Old_ECR_ID AND PRODAJA_NA_RATE = :Old_PRODAJA_NA_RATE should be reversed as where clause is not using primary key but all other fields.

CASE 2, single field as primary key does not generate error but though recognize correctly primary key, generated SQL uses field that is not primary . Could not find the logic as tried few times to generate SQL but each time different field is used as primary key.


Best regards,
Boris

Posted: Tue 13 Mar 2012 09:52
by AlexP
Hello,

Thank you for the information, we know about this problem, we are working on it.

Posted: Fri 23 Mar 2012 12:00
by sbslavonac
Any news regarding this, starting new project and bug is slowing me down.
Discovered another "bug", when removing field from sql with already created fields in smart query and not deleting it from smart query fields list there is no error raised in apllication when I try to open it, only IDE reports that field is mising then query is set to active
Best regards
Boris

Posted: Fri 23 Mar 2012 14:27
by AlexP
Hello,

We have already fixed the problem with the generation of INSERT, UPDATE, REFRESH... sql, this fix will be includeв шт the next build planned for the next week.
We have checked the situation with deleting fields from a query when correspondent persistent fields created, and when trying to set the Active property to true, the correct "XXXX field is not found" error message occurs. Perhaps, you have some third-party programs installed like EurekaLog, that disable such error messages.

Posted: Fri 23 Mar 2012 14:54
by sbslavonac
Hi.
Found out what I've done.
I commented out raise exception within try except block when openning query, so exception was never raied :)
Sorry my mistake

Best regards
Boris

Posted: Fri 23 Mar 2012 15:06
by AlexP
Hello,

Glad to see that you solved the problem. If you have any other questions, feel free to contact us.