VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1045|回复: 4

数据库问题?

[复制链接]

4

主题

15

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-3-20 17:00:01 | 显示全部楼层 |阅读模式
我在该Form里创建的时候打开表 Query1 , Query2 , Query3
并且Query1里的查询语句如下:
   select student.s_no ,s_name , s_sex , s_age , s_address ,     s_nation ,s_college , s_subject , s_class , s_grade ,s_phone , s_picture  , building.building_no , house.house_no , bed_no

  from building , house , bed ,student

where  building.building_no = house.building_no  And  house.house_no = bed.house_no And bed.s_no = student.s_no

//Query1的AfterScroll事件如下:
//但是运行的时候出现错误,错误行我在程序里给出

procedure TAdmin_Operation_Form_AlterStudent.Query1AfterScroll(DataSet:TDataSet);
var
  MyJpeg : TJpegImage   ;
  MyStm : TMemoryStream ;
begin
  query2.Close ;
  query2.SQL.Clear ;
  query2.SQL.Add('select * from house where building_no = :para_building_no') ;
  query2.SQL.Add(' AND house_no = :para_house_no') ;
  query2.ParamByName('para_building_no').AsString := query1.fieldByName('building.building_no').AsString ;

//上面那行错误,说'building.building_no'字段不存在,这是怎么回事!
  query2.ParamByName('para_house_no').AsString := query1.fieldByName('house.house_no').AsString ;
  query2.Open ;
  query3.Close ;
  query3.SQL.Clear ;
  query3.SQL.Add('select * from bed where bed_no = :para_bed_no') ;
  query3.ParamByName('para_bed_no').AsString := query1.fieldByName('bed_no').AsString ;
  query3.Open ;
  query4.Close ;
  query4.SQL.Clear ;
  query4.SQL.Add('select * from student where s_no = :para_s_no') ;
  query4.ParamByName('para_s_no').AsString := query1.fieldByName('bed_no').AsString ;
  query4.Open ;
  if not query4.FieldByName('s_picture').IsNull  then
  begin
    try
      MyJpeg:=TJpegImage.Create;
      MyStm:=TMemoryStream.Create;
      MyStm.Clear;
      query4.Edit ;
      TBlobField(query4.FieldByName('s_picture')).SaveToStream(MyStm);
      MyStm.Position:=0;
      MyJpeg.LoadFromStream(MyStm);
      Image1.Picture.BitMap.Assign(MyJpeg);
    finally
      MyJpeg.Free;
      MyStm.Free;
    end;
  end
end;


希望哪位大侠帮帮忙,看看我是哪里错???
谢谢大家了!!
回复

使用道具 举报

0

主题

53

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-6-28 14:30:01 | 显示全部楼层
这里你直接使用building_no 不要加表明引用,或者给它取个别名
回复

使用道具 举报

4

主题

15

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-7-5 16:30:02 | 显示全部楼层
谢谢!!!
您能不能告诉我这是为什么呀??
怎么这里加表名就会出错呢?
我在别的窗口不加表名就出错!
回复

使用道具 举报

0

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-7-5 21:00:01 | 显示全部楼层
1:select a.字段1,b.字段2 from table1 a,table2 b where //..如果from的是多个表,那么前面的每个字段都要加前缀,要么表名,要么表名的别名

2:这一句
query2.ParamByName('para_building_no').AsString := query1.fieldByName('building.building_no').AsString ;
//query1是打开了的,你要么在query1执行的句子写 select building.building_no  as [building] 这样你就可以把
query2.ParamByName('para_building_no').AsString := query1.fieldByName('building.building_no').AsString ;
改成
query2.ParamByName('para_building_no').AsString := query1.fieldByName('building_no').AsString ;

你的理解还不够清楚,对数据库的操作思路还不清楚,query执行后,就是张独立的表,跟其他的表都无关,你用其他表的别名,自然不能访问了。
回复

使用道具 举报

4

主题

15

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-7-6 19:45:01 | 显示全部楼层
非常感谢  yourapy !!!
你解开了我的疑惑!!!知道是怎么回事了,再次感谢你!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表