关于表格(100)

  • 主题发起人 主题发起人 nadawudi
  • 开始时间 开始时间
N

nadawudi

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好,小弟有个问题急需帮助:我有一个表,表格式大概如下:店名 产品 数量 价格 (4个字段)1 青苹果 17 20空白 火龙果 200 1362空白 丽佳果 19 65空百 哈秘瓜 20 3002 青苹果 25 300空白 火龙果 200 1400空白 丽佳果 20 70空白 哈秘瓜 20 3203 青苹果 15 15空白 丽佳果 30 450空白 火龙果 20 150空白 哈秘瓜 20 280我现在想通过一个按件上写SQL语句能够使当记录指针在店名字段为1时开始,后面该字段的空白初自动填上1,一直到字段值变为2位置,后面的字段值全为2,一直到3,以此类推.另外如果SQL不能解决,能够用其他方法吗.如有高人指点,小弟感激不尽,我使用的是delphi7
 
Select * From //你现在的语句Select *, 店名 From //修改成这样
 
非常感谢楼上的朋友,但估计没明白我的意思我是想以店名字段做为索引,当值为1时,从这条记录以下的所有店名字段值都变为1(现在是空白),直到店名为2的记录为止,一此类推,是修改记录而不是查询
 
用游标,还有你必须确保你查询出来的数据是按照你的示例那样排列的,否则就可能有问题
 
表开始设计就有点问题吧如 第二行和第六行 他们属于那个呢 是 1还是 2 还是 3 查询出来是有问题的要改也只能用游标 而且也要保证查出来和你现在的排的一样
 
procedure TForm1.Button1Click(Sender: TObject);var i:integer;begin with ADOQuery1 do begin close; SQL.Clear; SQL.Add('select 店名 from luojia3'); open; end; ADOQuery1.first; for i:=0 to dbgrid1.recordcount-1 do begin while ADOQuery1.Fieldbyname('店名').asstring='2' do begin ADOQuery1.Edit; ADOQuery1.Fieldbyname('店名').asstring:='1'; ADOQuery1.Next; end; if ADOQuery1.Fieldbyname('店名').asstring='2' then begin ADOQuery1.Next; while ADOQuery1.FieldByName('店名').asstring='3' do ADOQuery1.Edit; ADOQuery1.Fieldbyname('店名').asstring:='2'; ADOQuery1.Next; end; if ADOQuery1.Fieldbyname('店名').asstring='3' then begin ADOQuery1.Next; while eof do ADOQuery1.Edit; ADOQuery1.Fieldbyname('店名').asstring:='3'; ADOQuery1.Next; end; end; ADOQuery1.Post;end;这是我自己写的,大家帮忙看下有什么地方错误吗
 
先不说其它的, 代码本身就写得不好, 基本上是遍历了两遍了~.最起码也要这样写啊: var iIndex: Integer; TmpStr: string; begin // ... iIndex := 0; ADOQuery1.Edit; for i:=0 to dbgrid1.recordcount-1 do begin TmpStr := Trim(ADOQuery1.Fieldbyname('店名').asstring); if (TmpStr <> '') then if not TryStrToInt(TmpStr, iIndex) then raise; if (iIndex = 0) then raise; if TmpStr <> IntToStr(iIndex) then ADOQuery1.Fieldbyname('店名').asInteger:= iIndex; ADOQuery1.Next; end; ADOQuery1.Post; end;
 
关键的问题是你的排序按什么字段,是原始排序么,至少也要存储过程,否则就用dataset ADOQuery1.first;last_store_no := -1; while not adoquery1.eof dobegin store_no := ADOQuery1.fieldbyname('店名').asinteger; if (store_no>0)and(last_store_no<>store_no) then //排除相同的,找到开始的 last_store_no := store_no //编号是 else begin adoquery1.edit; adoquery1.fieldbyanem('店名').asinteger := last_store_no; end; aodquery1.next;end; //while要求 第一条记录必须 店名 不是 null店名字段做为索引 一定出错,最好是 记录流水号索引,如果没有就死定了
 
后退
顶部