procedure TForm_szye.ado_szyeP_IDGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
 try
   ado_temp.Close;
   ado_temp.SQL.Clear;
   ado_temp.SQL.Add('select purchaser_name from purchaser where purchaser_id='''+sender.AsString+'''');
   ado_temp.Prepared;
   ado_temp.Open;
   text:=ado_temp.Fields[0].Text;
 except
 end;
end;我在PURCHASER表中有PURCHASER_ID  1至99个时PURCHASER_NAME可以全部显示
但是我如果加到1至100个时,在DBGRID中显示的PURCHASER_NAME中第10个与第100个的PURCHASER_NAME都是第10个的名字,如果是1至110个时,第10,101,102。109都与第10个一样,第11个与第110个一样且同为第11个的内容,怎么办?

解决方案 »

  1.   

    首先确定你的PURCHASER_ID是什么类型,
    其次是你所列的数据看
    10, 101,102,103 都是以10开头的,
    11,110 是以110开头的,这种情况有二,一种是用了模糊查询like,但是你的语句又不是,
    所以我怀疑你的PURCHASER_ID是char(2)类型,把他加大看看!
      

  2.   

    数据库字段PURCHASER_ID的问题,长度应该为2, 设大一点。要不会自动切取
      

  3.   

    我的PURCHASER_ID表里面定义的是CHAR(20),不存在这种问题
    我有一张PURCHASER表,其中有PURCHASER,PURCHASER_ID,TEL,MAIL等字段,另有一张表只有GOODS表,里面有PURCHASER_ID,GOODS_NAME,GOODS_PLACE等字段,上面的代码就是想把GOODS表里面的PURCHASER_ID转换成PURCHASER显示在DBGRID表格里,没有超过100个编号就可以对应,超过了就出现那种问题了
      

  4.   

    问题是你的Goods表的PURCHASER_ID的类型是什么,你可以跟踪一下
    看sender.AsString是什么东西,应该就算101也是变成了10
      

  5.   

    goods表中的PURCHASER_ID也是CHAR(20),SENDER.ASSTRING在procedure TForm_szye.ado_szyeP_IDGetText(Sender: TField; var Text: String;DisplayText: Boolean);定义的是GOODS的表中与PURCHASER_ID对应的字段
      

  6.   

    不知道为什么只取两位,其它地方没有SENDER,不知道楼上的大哥有方法帮我看看怎么改一样可以解决
      

  7.   

    直接这样好了:
    ado_temp.SQL.Add('select purchaser_name from purchaser where purchaser_id='''+ado_szye.FieldByName('P_ID').AsString+'''');
      

  8.   

    ado_szye这个是不是直接链接表GOODS的ADO控件啊,要加什么条件吗?
      

  9.   

    ado_temp.SQL.Add('select purchaser_name from purchaser where purchaser_id='''+ado_szye.FieldByName('P_ID').AsString+'''');
    这个试了一下,还是跟以前一样
      

  10.   

    你ShowMessage(Sender.AsString);出来是什么东东?
      

  11.   

    ShowMessage(Sender.AsString);这个东西我代码里面没有啊,只有这里有procedure TForm_szye.ado_szyeP_IDGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);我也找不到这个是SENDER.ASSTRING是什么,但是删除了那个Sender: TField;又报错
      

  12.   

    procedure TForm_szye.ado_szyeP_IDGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
     try
       ado_temp.Close;
       ado_temp.SQL.Clear;
       ShowMessage(Sender.AsString);    //我的意思是在这里加上这一句,看看如果原本传进来的
                                        //是101的时候,实际上显示出来的是101还是10???
       ado_temp.SQL.Add('select purchaser_name from purchaser where purchaser_id='''+sender.AsString+'''');
       ado_temp.Prepared;
       ado_temp.Open;
       text:=ado_temp.Fields[0].Text;
     except
     end;
    end;
      

  13.   

    关都关不了就用一个Memo去显示啊,看看到底是什么东西先?
    Memo1.Lines.Add(sender.AsString);
      

  14.   

    Memo1
    03
    03
    03
    03
    04
    05
    07
    10
    11
    12
    14
    15
    16
    18
    19
    20
    22
    23
    03
    57
    57
    46
    52
    53
    61
    67
    68
    73
    77
    79
    86
    97
    98
    34
    88
    57
    57
    57
    57
    57
    46
    52
    53
    61
    67
    68
    73
    77
    79
    86
    97
    98
    34
    88
    57
    57
    57
    46
    52
    53
    61
    67
    68
    73
    77
    79
    86
    97
    98
    34
    88
    57
    03
    03
    03
    04
    05
    07
    10
    11
    12
    14
    15
    16
    18
    19
    20
    22
    23
    24
    04
    23
    24
    25
    24
    25
    26
    25
    26
    28
    26
    28
    29
    28
    29
    30
    29
    30
    31
    30
    31
    33
    31
    33
    41
    33
    41
    42
    41
    42
    43
    42
    43
    45
    43
    45
    47
    45
    47
    48
    47
    48
    49
    48
    49
    50
    49
    50
    51
    50
    51
    54
    51
    54
    60
    54
    60
    62
    60
    62
    63
    62
    63
    64
    63
    64
    65
    64
    65
    66
    65
    66
    69
    66
    69
    70
    69
    70
    71
    70
    71
    72
    71
    72
    74
    72
    74
    75
    74
    75
    76
    75
    76
    78
    76
    78
    80
    78
    80
    83
    80
    83
    95
    83
    95
    96
    95
    96
    99
    96
    99
    82
    99
    82
    10
    82
    10
    84
    10
    84
    85
    84
    85
    35
    85
    35
    87
    35
    87
    10
    87
    10
    10
    10
    10
    55
    10
    55
    10
    55
    10
    36
    10
    36
    89
    36
    89
    10
    89
    10
    56
    10
    56
    10
    56
    10
    58
    10
    58
    10
    58
    10
    10
    10
    10
    01
    10
    01
    02
    01
    02
    06
    02
    06
    08
    06
    08
    09
    08
    09
    10
    09
    10
    13
    10
    13
    17
    13
    17
    21
    17
    21
    27
    21
    27
    32
    27
    32
    44
    32
    44
    46
    44
    46
    52
    46
    52
    53
    52
    53
    61
    53
    61
    67
    61
    67
    68
    67
    68
    73
    68
    73
    77
    73
    77
    79
    77
    79
    86
    79
    86
    97
    86
    97
    98
    97
    98
    34
    98
    34
    88
    34
    88
    57
    88
    57
    57
    57
    57
      

  15.   

    DBGRID里直接显示PURCHASE_ID这个字段看看!我想是你的AdoQuery有问题了!
      

  16.   

    在数据库表里面的PURCHASER_ID是对的,GOODS表中记录中P_ID有100以上的,但是转换就不对了,直接显示在DBGRID中就只有两位数据了
      

  17.   

    那就是了,你直接显示都只是两位数,当然有问题了!
    把你的SQL贴出来看一下,还有GOODS在ADOQUERY的PURCHASE_ID字段是什么类型?
      

  18.   

    select * from t_yeb where nf=:nf and yf=:yf and flag=:flag
    order by p_id
    这是ado_szye的SQL与一个DATASOURCE与一个DBGRID连接GOODS表连接,还有一个ADO_TEMP什么都没有,是编写代码的,goods表中的PURCHASER_ID是CHAR(20)
      

  19.   

    晕,就这样,在DBGrid显示也显示不出'101'这样的数据,那真不知了!
      

  20.   

    在数据库表中的GOODS中的记录有100以上的并且是对的,但是在DBGRID中显示超过100的就会出现重复的,不能超出100,搞不懂,再说SQL语句没有什么麻烦的,都是很简单的
      

  21.   

    你现在重新新建一个项目,什么都不做
    就写你那句简单的SQL,然后放一个TAdoQuery,TDataSource,DBGrid这样连接显示,
    如果这样子,你数据库有102的字段,但是显示出来还是10的话,那我也不知道了!