View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0006620 | JEDI VCL | 00 JVCL Components | public | 2018-02-19 22:14 | 2019-03-11 17:06 |
Reporter | dougwoodrow | Assigned To | obones | ||
Priority | normal | Severity | major | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | 3.48 | ||||
Target Version | Fixed in Version | Daily / GIT | |||
Summary | 0006620: TJvDBLookupCombo.IgnoreCase property is applied to the key lookup | ||||
Description | According to the wiki the TJvDBLookupCombo.IgnoreCase property specifies the case-sensitivity of the incremental search: http://wiki.delphi-jedi.org/wiki/JVCL_Help:TJvDBLookupCombo.IgnoreCase In the current implementation this property is applied to the key LookupField as well as to the LookupDisplay field. In my opinion this is a bug, as it can cause the wrong record to be displayed when the key field is case-sensitive. For instance, with the following example table, a single character key field 'a' will be incorrectly displayed as "Item one" instead of "Item three" when the IgnoreCase property is set to True. |Key|Description| |---|-----------| | A |Item one | | B |Item two | | a |Item three | | ||||
Additional Information | Example (quick-and-dirty) fix: function TJvLookupControl.Locate(const SearchField: TField; const AValue: string; Exact: Boolean): Boolean; var IsDisplayField: Boolean; CaseSensitive: Boolean; begin FLocate.IndexSwitch := FIndexSwitch; Result := False; try if not ValueIsEmpty(AValue) and (SearchField <> nil) then begin IsDisplayField := (SearchField = FDisplayField); if IsDisplayField then // respect lookup property CaseSensitive := not IgnoreCase else // not display, so this is the key field, do a case-sensitive locate CaseSensitive := True; Result := FLocate.Locate(SearchField.FieldName, AValue, Exact, CaseSensitive, True, RightTrimmedLookup); if Result then begin if IsDisplayField then FValue := FKeyField.AsString; UpdateDisplayValue; end; end; except end; end; | ||||
Tags | No tags attached. | ||||
|
Could you check if the issue is still present in the latest GIT content? If yes, please provide the zipped sources of an application showing this. |
2018-07-19 18:05
|
LookupIgnoreCase.zip (1,756 bytes) |
2018-07-19 18:08
|
|
|
Hi Olivier, thanks for looking into this. I've attached an application illustrating the problem (LookupIgnoreCase.zip). Note that the actual value of the FDisplayField that is displayed depends on what record is currently slected when the locate() is performed. So when IgnoreCase is true, either the 'a' lookup or the 'A' lookup may be wrong, as shown in Capture1.jpg. |
|
I took the liberty to create a pull request for it: https://github.com/project-jedi/jvcl/pull/64 |
|
Replaced the pull request with this one, as my old one contained unrelated modifications as well (Git is still new for me): https://github.com/project-jedi/jvcl/pull/69 |
|
Thanks, this is now fixed in GIT |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-02-19 22:14 | dougwoodrow | New Issue | |
2018-07-18 16:03 | obones | Note Added: 0021543 | |
2018-07-18 16:03 | obones | Status | new => feedback |
2018-07-19 18:05 | dougwoodrow | File Added: LookupIgnoreCase.zip | |
2018-07-19 18:08 | dougwoodrow | File Added: Capture1.jpg | |
2018-07-19 18:14 | dougwoodrow | Note Added: 0021562 | |
2019-03-09 18:19 | mh | Note Added: 0021625 | |
2019-03-10 10:41 | mh | Note Added: 0021627 | |
2019-03-11 17:06 | obones | Note Added: 0021634 | |
2019-03-11 17:06 | obones | Status | feedback => resolved |
2019-03-11 17:06 | obones | Fixed in Version | => Daily / GIT |
2019-03-11 17:06 | obones | Resolution | open => fixed |
2019-03-11 17:06 | obones | Assigned To | => obones |