表1和表2的关键字段都是MBMC
现在我用StringGrid显示对表1的查询结果
选择cells时,一旦选定,MBMC就定了。然后在DBImage中显示选中的这个MBMC的图片(图有多张)我写的程序有什么问题啊?
procedure TFrm_YDFK.TabSheet1Show(Sender: TObject);
var i:integer;
begin
//定义表格1
   with StringGrid1 do
    begin
     cells[0,0]:='目标名称';
     cells[1,0]:='所属区域';
     cells[2,0]:='基本情况';
    end;
    with DMKJB.ADOQuery1 do
      begin
       DMKJB.ADOQuery1.Active:=false;
       close;
       SQL.clear;
       sql.add('Select * from MB');
       open;
       DMKJB.ADOQuery1.Active:=true;
       first;
       with StringGrid1 do
           for i:=1 to DMKJB.ADOQuery1.RecordCount do
            begin
             cells[0,i]:=fieldbyname('MBMC').AsString;
             cells[1,i]:=fieldbyname('SSQY').AsString;
             cells[2,i]:=fieldbyname('JBQK').AsString;
             next;
            end;
       end;end;procedure TFrm_YDFK.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
//选择StingGrid1中某一行时,在Memo1中显示相应的内容
case ARow of
    1..10000:
    begin
    Memo1.Text:=StringGrid1.Cells[2,ARow];
      with DMKJB.ADOQuery2 do
         begin
         DMKJB.ADOQuery2.Active:=false;
         close;
         SQL.clear;
         sql.add('Select * from TP');
         open;
         DMKJB.ADOQuery2.Active:=true;
         DBImage1.DataSource:=DMKJB.ADOQuery2.DataSource;
         end;
    
    end;
end;end;procedure TFrm_YDFK.Button1Click(Sender: TObject);
var i,j:integer;
    condition_YDFK:string;
    str_YDFK:string;
//    str_YDFK1:string;
begin
str_YDFK:='';
//查询条件
        
        if  (ComboBox1.Text<>'') and (Edit1.Text<>'') then
        str_YDFK:=str_YDFK+'MBMC'+'='+Edit1.Text+'or'+'SSQY'+'='+ComboBox1.Text; //异常中断处理
        try
        with DMKJB.ADOQuery1 do
             begin
                DMKJB.ADOQuery1.Active:=false;
                close;
                SQL.clear;
                sql.add('Select * from MB where'+str_YDFK);
                open;
                DMKJB.ADOQuery1.Active:=true;
                if DMKJB.ADOQuery1.RecordCount<1 then
                Application.MessageBox('没有找到符合条件的数据?','查询结果',MB_YESNO+MB_ICONQUESTION)
                else
                      begin
                         with StringGrid1 do      //清空显示表格
                              begin
                               RowCount:=DMKJB.ADOQuery1.RecordCount+1;
                               for i:=1 to DMKJB.ADOQuery1.RecordCount do
                               for j:=0 to 2 do
                               cells[j,i]:='';
                              end;
                         first;
                         with StringGrid1 do
                         for i:=1 to DMKJB.ADOQuery1.RecordCount do
                         begin
                               cells[0,i]:=fieldbyname('MBMC').AsString;
                               cells[1,i]:=fieldbyname('SSQY').AsString;
                               cells[2,i]:=fieldbyname('JBQK').AsString;
                               next;
                         end;
                     end;
             end;
        except
              Application.MessageBox('查询语句有错误','异常错误',mb_iconwarning+mb_ok);
        end;
end;

解决方案 »

  1.   

    上面程序报错,说我的sql语句有问题,不知道怎么回事啊
    还有选择Cells后,DBImage里没反应啊!
      

  2.   

    with DMKJB.ADOQuery2 do
             begin
             //DMKJB.ADOQuery2.Active:=false;//<-多余的代码
             close;
             SQL.clear;
             sql.add('Select * from TP');//<--语句有问题,没有条件
             open;
             //DMKJB.ADOQuery2.Active:=true;//<-多余的代码
             DBImage1.DataSource:=DMKJB.ADOQuery2.DataSource;
             end;
      

  3.   

    自由界面和报表的完美解决方案!
    http://www.anylib.com
      

  4.   

    sql.add('Select * from MB where'+str_YDFK);
    可能只这句饱错,没有空格
    str_YDFK:=str_YDFK+' MBMC'+'='+Edit1.Text+' or '+'SSQY'+'='+ComboBox1.Text;
    sql.add('Select * from MB where        '+str_YDFK);
      

  5.   

    str_YDFK:=str_YDFK+' MBMC='+ QuotedStr(Edit1.Text) + ' or SSQY = ' + QuotedStr(ComboBox1.Text);错误原因是:
    该用引号的你没用,
    该用空格的你也没有
      

  6.   

    不要老是照着别人代码抄写, 注意,在delphi的字符串中,'这个符号也是一个转义符号,当在一个字符串中使用具有特定含义的字符时,前面必须加上转义字符'已确保在代码中作为一般字符处理!!!
      

  7.   

    很简单,给你一个思路。
    1.把要显示的图片数据读取到DataSet里面。
    2.在StringGrid.Objects[Col,Row]里面存储DataSet的BookMark;
    3.选中Cell的时候同样,DataSet.GotoBookMark(StringGrid.Objects[Col,Row]);
    4.DBImage显示图片。
      

  8.   

    能不能用一个IMAGE在点击其中相应的点时,   IMAGE的LOADE相应的图版式不就可以了,
      

  9.   

    谢谢各位的指导。搞定就结贴送分!我默认一开始显示所有记录(就是sql用select * from 表名),程序如下:procedure TFrm_YDFK.TabSheet1Show(Sender: TObject);
    var i:integer;
    begin
    //定义表格1
       with StringGrid1 do
        begin
         cells[0,0]:='目标名称';
         cells[1,0]:='所属区域';
         cells[2,0]:='基本情况';
        end;
        with DMKJB.ADOQuery1 do
          begin
           DMKJB.ADOQuery1.Active:=false;
           close;
           SQL.clear;
           sql.add('Select * from MB');
           open;
           DMKJB.ADOQuery1.Active:=true;
           first;
           with StringGrid1 do
               for i:=1 to DMKJB.ADOQuery1.RecordCount do
                begin
                 cells[0,i]:=fieldbyname('MBMC').AsString;
                 cells[1,i]:=fieldbyname('SSQY').AsString;
                 cells[2,i]:=fieldbyname('JBQK').AsString;
                 next;
                end;
           end;end;procedure TFrm_YDFK.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    begin
    //选择StingGrid1中某一行时,在Memo1和DBImage1中显示相应的内容
    case ARow of
        1..10000:
        begin
        Memo1.Text:=StringGrid1.Cells[2,ARow];
          with DMKJB.ADOQuery2 do
             begin
             DMKJB.ADOQuery2.Active:=false;
             close;
             SQL.clear;
             sql.add('Select * from TP where MBMC='+StringGrid1.Cells[0,ARow]);
             open;
             DMKJB.ADOQuery2.Active:=true;
             DBImage1.DataSource.DataSet:=DMKJB.ADOQuery2;
             end;    end;
    end;end;
    编译没问题,但当运行时,用鼠标选择到第ARow行cells时,程序报错说:参数  该目标没有默认值。如点cells[0,1]时,错误为:参数  目标1没有默认值。(目标1是表中字段MBMC的具体值啊!我在数据表中添加了目标1,目标2,目标3……等几行数据。)
    为什么会有这个错误呢?
      

  10.   

    to  xiaocuo_zrf(女巫手上的猫)能不能写点代码呀?谢谢啦