FireMonkey Windows应用:ComboBox数据写入SQLite数据库失败求助
解决FireMonkey ComboBox选中项写入SQLite数据库的问题
问题原因分析
- 第一种写法的问题:
cbCN.Items.Text返回的是ComboBox所有选项的文本(各选项用换行符分隔),并非选中项的文本。你看到仅存入第一个项,大概率是因为ComboBox里只有一个选项,或者误将该属性当成了选中项文本的获取方式。 - 第二种写法的Access Violation错误:当ComboBox没有选中任何项时,
cbCN.Selected会返回nil,直接访问nil对象的Text属性必然触发访问违规。
正确实现方式
方式一:通过ItemIndex获取选中项文本(推荐)
先判断是否有选中项(ItemIndex不等于-1表示有选中项),再通过索引获取对应文本:
// 先确保FDQuery处于可编辑状态(新增记录用Insert,修改用Edit) FDQue.Insert; if cbCN.ItemIndex <> -1 then FDQue.FieldByName('CustomerName').AsString := cbCN.Items[cbCN.ItemIndex]; FDQue.Post; // 提交数据到数据库
方式二:通过Selected属性获取(需判空)
先检查Selected对象是否存在,再访问其Text属性:
FDQue.Insert; if Assigned(cbCN.Selected) then FDQue.FieldByName('CustomerName').AsString := cbCN.Selected.Text; FDQue.Post;
额外注意事项
- 确保SQLite表中的
CustomerName字段类型为TEXT,且长度足够容纳选中的文本内容 - 操作数据库前,确认FDQuery已正确连接到SQLite数据库,FDConnection等相关组件配置无误
- 如果需要强制用户必须选择项才能提交,可以在判断时加入提示:
if cbCN.ItemIndex = -1 then begin ShowMessage('请选择客户名称'); Exit; end;
内容的提问来源于stack exchange,提问作者Sandeep Kumar
相关产品推荐
相关产品推荐

