一个常用进销存软件的 商品入库界面,
1.from中有一个dbgrideh(商品入库表) 里面包含[商品编码,商品名称,规格,单位,入库数量,进价,进价合计] 字段 用
qry_sprkmx(商品入库明细)
2.form中还有一个dbgrieh(商品基本资料表)默认为不可见,里面包含[商品编码,商品名称,规格,拼音码]字段。用qry_spzl(商品资料)
3.在form 的onshow实践中,qry_sprkmx.sql.add(select * from skrkmx where 1=2); open;append;(打开入库明细表,并追加)
4.我想实现的是dbgrideh(商品入库表)中的商品编码单元中录入商品的编码或拼音码时,dbgrieh(商品基本资料表)开始显示,
并根据dbgrideh(商品入库表)中的商品编码单元中录入商品的编码或拼音码进行过滤,并在dbgrieh(商品基本资料表)进行定位,当确定某个商品后按回车键,就把dbgrieh(商品基本资料表)中过滤选择到的该商品的基本资料直接赋值到dbgrideh(商品入库表)中的[商品编码,商品名称,规格,单位]等字段,入库数量获得焦点,如果dbgrideh(商品入库表)中的商品编码为空或没有该商品的基本资料信息,则dbgrieh(商品基本资料表)又为不可见了。
原来有个朋友给我个例子说需要SendMessage(EdtCXLR.Handle,WM_CHAR,WORD(KEY),0); 他的方法是dbgrideh(商品入库表)中的商品编码单元中向一个edtCXLR的edit发送消息
我后来试验了一下 发现有这几个问题SendMessage(EdtCXLR.Handle,WM_CHAR,WORD(KEY),0);  ----这句我不明白是什么意思,但我知道是向edcxlr中发送dbgrideh中录入的东西的意思。但我也想了能不能在edtcxlr的onchange事情除法用qry_spzl(商品资料).sql.add(select * from spzl where bm like :a or zjm like :b)但这个方法不行啊。
1.DBCX.Width:=OptimizeGrid(DBCX)+20 为什么我这编译的时候报错?DBCX也是个dbgrideh 类似我的dbgrieh(商品基本资料表)
2.SendMessage(EdtCXLR.Handle,WM_CHAR,WORD(KEY),0);我发现这只能发送一次消息,也就是说我在editcxlr中录入错误了后,但此时dbcx已经获得焦点了后,在edtcxlr中全部删除后再从新录入的话 
他就不SendMessage(EdtCXLR.Handle,WM_CHAR,WORD(KEY),0)
3.我的editcxlr始终不能一直紧跟着dbgrideh的录入的焦点,也就是说我把edtcxlr如果放在dbgrideh的第一行,当我回车到下一行的时候edtcxlr还在第一行上;
代码如下:
procedure Tfmrkd.DBGridEh1KeyPress(Sender: TObject; var Key: Char); 
begin IF (DBGridEh1.SelectedField.FieldName='药品ID')  AND    (QSubMaster.State IN [dsInsert,dsEdit]) THEN    
BEGIN     
 DBCX.DataSource:=NIL;     
 DBCX.DataSource:=DM.DSxm;    
  SendMessage(EdtCXLR.Handle,WM_CHAR,WORD(KEY),0);  ----这句
  WITH DM.Qxm DO    
    BEGIN      
    Close;         
 SQL.Clear;          
SQL.Text:='select 药品助记码 助记码,药品ID 编号,药品名称 名称,规格,单位,单价 from v_xm '+ ' WHERE 药品助记码 LIKE :YPZJM ';         
 IF EdtCXLR.Text='' THEN         
    Parameters.ParamByName('YPZJM').Value:=EdtCXLR.Text         
 ELSE            
 Parameters.ParamByName('YPZJM').Value:=EdtCXLR.Text+'%';      
    OPEN;      
  END;    
END;    
IF EdtCXLR.Text<>'' THEN      
   BEGIN      
     DBCX.Width:=OptimizeGrid(DBCX)+20;     
                 DBCX.Visible:=TRUE;    
     END    
   ELSE       
  BEGIN          
 DBCX.Visible:=False;     
    END; 
end;不知道我说的是不是很清楚,希望大家能帮帮我 谢谢

解决方案 »

  1.   

    你就说解决这个问题就行了 4.我想实现的是dbgrideh(商品入库表)中的商品编码单元中录入商品的编码或拼音码时,dbgrieh(商品基本资料表)开始显示, 
    并根据dbgrideh(商品入库表)中的商品编码单元中录入商品的编码或拼音码进行过滤,并在dbgrieh(商品基本资料表)进行定位,当确定某个商品后按回车键,就把dbgrieh(商品基本资料表)中过滤选择到的该商品的基本资料直接赋值到dbgrideh(商品入库表)中的[商品编码,商品名称,规格,单位]等字段,入库数量获得焦点,如果dbgrideh(商品入库表)中的商品编码为空或没有该商品的基本资料信息,则dbgrieh(商品基本资料表)又为不可见了。多了麻烦