VFP has only some case insensitive functions, like ATC().
But controlsource picks from the Rowsource by case sensitive match.
In short any comparison is case sensitive, exact an inexact matches exist, but they are both case sensitive.
You can have collations that are case insensitive, but that doesn't change how VFP is generally case sensitive. It's not so with variable names, but that regards the compiler, not string comparisons or ordering data.
I don't think it ever differed.
And no, it's not a thing differing with views vs tables.
You have an example which shows how it works, but you can see it in a demo concentrating on that very behavior. When picking a record with a lowercase TLD in the grid, the combobox will not show anything:
Code:
oForm = CreateObject("form1")
oForm.show()
Read events
DEFINE CLASS form1 AS form
DoCreate = .T.
Caption = "Form1"
Name = "Form1"
ADD OBJECT grid1 AS grid WITH ;
Height = 200, ;
Left = 12, ;
RecordSource = "domains", ;
Top = 12, ;
Width = 180, ;
Name = "Grid1"
ADD OBJECT combo1 AS combobox WITH ;
RowSourceType = 1, ;
RowSource = "COM,ORG,NET", ;
ControlSource = "domains.tld", ;
Height = 24, ;
Left = 204, ;
Top = 12, ;
Width = 100, ;
Name = "Combo1"
PROCEDURE Load
Create Cursor domains (tld c(3))
Insert into domains values ('COM')
Insert into domains values ('com')
Insert into domains values ('net')
Insert into domains values ('NET')
Insert into domains values ('ORG')
Insert into domains values ('org')
Go top
ENDPROC
PROCEDURE grid1.AfterRowColChange
LPARAMETERS nColIndex
thisform.Refresh()
ENDPROC
ENDDEFINE
So in essence, your thread title is simply saying the truth, that's - as they always say - not a bug, it's by design.
I would extremely rarely use RowsourceType values. Perhaps in an example posted to demonstrate a simple combobox.
TLDs are data. If you're only interested in about 10 TLDs, well, that's your business, but it wouldn't matter to me, data is maintained as data and not code or even just a property of a control. So it belongs into a DBF.
You can of course set a value list you grab from data, that's a way to prevent it being hardcoded and have a central place for it to change it. That's the major thing why we have data, isn't it? So it's separate from code processing it. Even meta data typically is stored where? In DBFs.
In your case a solution would also be fetching the TLD field in upper case, SQL Server offers the UPPER function too, just like VFP.
Well, or you do build up the list from a SELECT DISTINCT TLD FROM view. That's also case sensitive. You'll always be up to date with whatever is in the data. But it would be awkward to be able to pick both "com" or "COM" from the list, then, wouldn't it?
As always, many ways to solve a problem.
Chriss