如何从DBGRID的某一列的某一行中输入一个字符串然后 回车,用输入的字符串做为参数,并在QUERY1的SQL中执行SELECT * FROM TABLE WHERE FIELD LIKE : 参数+'%'
我是在DBGRIDEH的ON KEY PRESS事件中用的
dm.Q_getsp.SQL.Add('select 0 as shl,spbh,spmch,shpgg,hshjj,shpchd from spkfk 
  where (spbh like :sp or zjm like :spzjm or spmch like :spm) ');
  dm.Q_getsp.SQL.Add('and beactive=''是''');
  dm.Q_getsp.ParamByName('sp').AsString:=dbgrideh_djdetail.Fields[4].text+'%';  //参数类型问题
  showmessage(dbgrideh_djdetail.SelectedField.text+'%');
  showmessage(dbgrideh_djdetail.SelectedField.DisplayText+'%');
  showmessage(dbgrideh_djdetail.SelectedField.DefaultExpression+'%');
  dm.Q_getsp.ParamByName('spzjm').AsString:=dbgrideh_djdetail.SelectedField.Text+'%';
  dm.Q_getsp.ParamByName('spm').AsString:=dbgrideh_djdetail.SelectedField.Text+'%';
在SHOWMESSAGE时只能返回字段的名称或只有一个%
用dm.Q_getsp.ParamByName('spzjm').AsString:=dbgrideh_djdetail.SelectedField.value+'%';时DELPHI提示 Invalid variant type conversion 
我应该用什么属性可方法把我要的字符串做为参数传给DELPHI 呢?请给一句代码。

解决方案 »

  1.   

    我想是否能这样:定义一个全局变量str 初始化为空在 onkeydown 事件里写代码
    IF KEY IN ['0'..'9','a'..'z'] then str:=str+key
    else if key=#13 then 
    DO SOMETHING HERE
    当然还要去掉其他非字符键和处理汉字可参考EHLIB中的代码,好象他的能定位元旦快乐!
      

  2.   

    回复lw549(呆子)
    我一定要用KEYPRESS
    LD
    回复JACKYSTAR
    你能否告诉我用哪个属性?
      

  3.   

    回复lw549(呆子)
    我一定要用KEYPRESS
    LD
    回复JACKYSTAR
    你能否告诉我用哪个属性?
      

  4.   

    我没有建议你不用KEYPRESS呀,你试试就知道了.
      

  5.   

    当keypress时
    先Q_getsp.Edit();
    Q_getsp.Post()
      

  6.   

    用数据源上的TField的FieldOnChange事件来做会更好!
      

  7.   

    dm.Q_getsp.SQL.Add('select 0 as shl,spbh,spmch,shpgg,hshjj,shpchd from spkfk 
      where (spbh like :sp or zjm like :spzjm or spmch like :spm) ');
      dm.Q_getsp.SQL.Add('and beactive=''是''');
      
      //先确认DBGrideh_djdetail的输入
      dbgrideh_djdetail.SelectField := dbgrideh_djdetail.Fields[0];
      dbgrideh_djdetail.SelectField := dbgrideh_djdetail.Fields[4];
      
      dm.Q_getsp.ParamByName('sp').AsString:=dbgrideh_djdetail.Fields[4].text+'%';  //参数类型问题
      showmessage(dbgrideh_djdetail.SelectedField.text+'%');
      showmessage(dbgrideh_djdetail.SelectedField.DisplayText+'%');
      showmessage(dbgrideh_djdetail.SelectedField.DefaultExpression+'%');
      dm.Q_getsp.ParamByName('spzjm').AsString:=dbgrideh_djdetail.SelectedField.Text+'%';
      dm.Q_getsp.ParamByName('spm').AsString:=dbgrideh_djdetail.SelectedField.Text+'%';
      

  8.   

    回复 : liang_z(千山一刀之忍者神龟,我是用的动态字段。我不知道如何用TFIELD。
    回复:niat97222(Freeman)  我确认了字段。
    if (key=#13) and ((dbgrideh_djdetail.SelectedField.FieldName='spbh') or (dbgrideh_djdetail.SelectedField.FieldName='spmch')) then
      begin
        showmessage(dbgrideh_djdetail.Fields[4].text+'  %');
        frm_getspjhrk:=tfrm_getspjhrk.Create(Application);
        frm_getspjhrk.DBGrid_getsp.DataSource:=dm.DataSource_getsp;
        dm.DataSource_getsp.DataSet:=dm.Q_getsp;
        dm.Q_getsp.Active:=false;
        dm.Q_getsp.DatabaseName:=dm.db.DatabaseName;
        dm.Q_getsp.SQL.Clear;
        dm.Q_getsp.SQL.Add('select 0 as shl,spbh,spmch,shpgg,hshjj,shpchd from spkfk where (spbh like :sp or zjm like :spzjm or spmch like :spm) ');
        dm.Q_getsp.SQL.Add('and beactive=''是''');