点击ComboBox选择月份查询人员时遇'incompatible data type'错误求助
解决“incompatible data type in criteria expression”错误的方案
问题原因
Num_Month字段是整数类型,但你用QuotedStr(ComboBox1.Text)把选中的月份值转成了带引号的字符串,SQL执行时会尝试将字符串与整数做比较,触发类型不兼容错误。
修正方案
方案1:直接转换为整数拼接(简单直接)
With Q1 do Begin Close; Sql.Clear; Sql.Add('Select * from Person_Month Where Num_month = ' + IntToStr(StrToInt(ComboBox1.Text))); Open; // 注意:Q1已打开,无需重复打开DBGrid2的DataSet,可删除DBGrid2.DataSource.DataSet.Open;这行 End;
方案2:参数化查询(更安全,避免SQL注入)
With Q1 do Begin Close; Sql.Clear; Sql.Add('Select * from Person_Month Where Num_month = :MonthNum'); ParamByName('MonthNum').AsInteger := StrToInt(ComboBox1.Text); Open; End;
额外注意事项
- 如果ComboBox显示的是带汉字的月份(如“1月”),需要先提取数字部分再转换:
var MonthStr: string; begin MonthStr := Copy(ComboBox1.Text, 1, Pos('月', ComboBox1.Text)-1); // 之后用StrToInt(MonthStr)转换为整数 end; - 使用TDBLookupComboBox时,需正确配置字段:
- 设置
KeyField为Num_Month(返回整数值) - 设置
ListField为显示用的月份名称字段(如Month_Name)
- 设置
内容的提问来源于stack exchange,提问作者fateh djelti
相关产品推荐
相关产品推荐

