请教这个根据用户在CHEAKLISTBOX里选择的数据字段后,再输出到报表里,请是我下面的程序为何只能在LISTBOX里可以实现,但在CHECKLISTBOX里就不行,而且运行起来每重新选择一次字段后,报表显示出来的字段格式会贴在一起,请教如何解决这两个问题啊 procedure TForm1.CHecklistbox2Click(Sender: TObject); 
var 
 i,j:integer; 
  myQRDBText:array[0..10] of TQRDBText;//假设你的数据库只有10个字段! begin 
  j:=0; 
  for i:=0 to CHecklistbox2.Count -1 do 
    if CHecklistbox2.Selected[i] then 
   Begin 
      myQRDBText[j]:=TQRDBText.Create(qrlistform.QRBand1); 
      myQRDBText[j].Parent:=qrlistform.DetailBand1; 
      myQRDBText[j].Left:=j*100; 
      myQRDBText[j].Top:=16; 
      myQRDBText[j].Width:=180; 
      myQRDBText[j].Height:=60; 
      myQRDBText[j].dataset:=Form1.ADOQuery1; 
      myQRDBText[j].DataField:=form1.Box1.items[i]; 
     INc(j);    End; 
end; --

解决方案 »

  1.   

    为什么还要inc[j]呢循环体中已经实现了J的加一了阿
      

  2.   

    我试过去掉这个inc[j],但是在显示报表时,如果选择了多个字段的话,就只能显示为一个字段了,
    而且我想在CHECKLISTBOX里显示,请教我那里出错了.
      

  3.   

    晕倒,没有仔细看程序,
    是要INC(j)
        myQRDBText[j].DataField:=Form1.ADOQuery1.fieldbyname(form1.Box1.items[i]);这样看看,应该可以了
      

  4.   

    谢谢指教,但是这条语句出错了,出错了性质类型STRING和FIELDS相反啊,请教如何解决啊
      

  5.   

    那我不清楚你是怎么往Box1里面添东西的呢把你往box1里面添东西的代码也贴出来看看
      

  6.   

    我的box1也就是tchecklistbox,我把数据库的字段读取出来,然后给用户选择字段,再输出到报表里procedure TForm1.FormCreate(Sender: TObject);
    var i,j:integer;
     begin
      with adoquery1  do begin
       For j:=0 to Fields.Count  -1 do Begin
            checklistbox1.Items.Add(Fields[j].FullName  );
            
          end;
        end;
       end;
      

  7.   

    建议你改写一下往box1里面添东西的代码,
    procedure TForm1.FormCreate(Sender: TObject);
    var i,j:integer;
     begin
      with adoquery1  do begin
       For j:=0 to Fields.Count  -1 do Begin
            checklistbox1.Items.Add(Fields[j].FieldName );  //这个地方的改动
            
          end;
        end;
       end;
    然后动态打印的时候
    procedure TForm1.CHecklistbox2Click(Sender: TObject); 
    var 
     i,j:integer; 
      myQRDBText:array[0..10] of TQRDBText;//假设你的数据库只有10个字段! begin 
      j:=0; 
      for i:=0 to CHecklistbox2.Count -1 do 
        if CHecklistbox2.Selected[i] then 
       Begin 
          myQRDBText[j]:=TQRDBText.Create(qrlistform.QRBand1); 
          myQRDBText[j].Parent:=qrlistform.DetailBand1; 
          myQRDBText[j].Left:=j*100; 
          myQRDBText[j].Top:=16; 
          myQRDBText[j].Width:=180; 
          myQRDBText[j].Height:=60; 
          myQRDBText[j].dataset:=Form1.ADOQuery1; 
          myQRDBText[j].DataField:=myQRDBText[j].DataField:=Form1.ADOQuery1.fieldbyname(form1.Box1.items[i]);
         INc(j);    End; 
    end;
      

  8.   

    谢谢指教,但是还是出现了性质类型STRING和FIELDS相反啊,而且上面的语句,在创建的时候,不是将数据库的字段读取在CHECKLISTBOX1里面吗,为何CHECKLISTBOX2里有字段选择的呢?我修改的代码如下,请教那里出错了.
    procedure TForm1.FormCreate(Sender: TObject);
    var i,j:integer;
     begin
      with adoquery1  do begin
       For j:=0 to Fields.Count  -1 do Begin
            CHECKLISTbox1.Items.Add(Fields[j].FullName  );
            end;
        end;
       end;procedure TForm1.CHECKLISTbox1Click(Sender: TObject);
    var
    i,j:integer;
      myQRDBText:array[0..10] of TQRDBText;//假设你的数据库只有10个字段!begin
      j:=0;
      for i:=0 to CHECKLISTbox1.Count -1 do
        if box1.Selected[i] then
       Begin
          myQRDBText[j]:=TQRDBText.Create(qrlistform.QRBand1);
          myQRDBText[j].Parent:=qrlistform.DetailBand1;
          myQRDBText[j].Left:=j*100;
          myQRDBText[j].Top:=16;
          myQRDBText[j].Width:=180;
          myQRDBText[j].Height:=60;
          myQRDBText[j].dataset:=Form1.ADOQuery1;
          myQRDBText[j].DataField:=myQRDBText[j].DataField:=Form1.ADOQuery1.fieldbyname(form1.Box1.items[i]);
         INc(j);
     //上面这条语句出现了性质类型相反了.
       End;
    end;
      

  9.   

    procedure TForm1.FormCreate(Sender: TObject);
    var i,j:integer;
     begin
      with adoquery1  do begin
       For j:=0 to Fields.Count  -1 do Begin
    //不这样写        CHECKLISTbox1.Items.  add(Fields[j].FullName  );  
    CHECKLISTbox1.Items.Add(Fields[j].FieldName  );  //这样写 注意是fieldName而不是fullname             
            end;
        end;
       end;
      

  10.   

    真的好感激楼上的朋友,但是这条语句还是出现了性质类型相反了,但请再如何修改啊.万分感谢了.procedure TForm1.CHECKLISTbox1Click(Sender: TObject);
    var
    i,j:integer;
      myQRDBText:array[0..10] of TQRDBText;//假设你的数据库只有10个字段!begin
      j:=0;
      for i:=0 to CHECKLISTbox1.Count -1 do
        if box1.Selected[i] then
       Begin
          myQRDBText[j]:=TQRDBText.Create(qrlistform.QRBand1);
          myQRDBText[j].Parent:=qrlistform.DetailBand1;
          myQRDBText[j].Left:=j*100;
          myQRDBText[j].Top:=16;
          myQRDBText[j].Width:=180;
          myQRDBText[j].Height:=60;
          myQRDBText[j].dataset:=Form1.ADOQuery1;
         
     myQRDBText[j].DataField:=myQRDBText[j].DataField:=Form1.ADOQuery1.fieldbyname(form1.Box1.items[i]);
         INc(j);
     //上面这条语句出现了性质类型相反了.
       End;
    end;
      

  11.   

    你是创建字段名的时候出的问题
    把你的程序发过来,我帮你改好给你发过去
    [email protected]