在WebSnap技术中,我制作了一个按纽,使它没按一次,数据记录指针向下跳一下,可我的按纽却无论按多少下,就是第二条记录,请高手帮忙。
procedure Tfirth.A1GetValue(Sender: TObject; var Value: Variant);
begin
  value:=s;
end;
procedure Tfirth.bh_getExecute(Sender: TObject; Params: TStrings);
begin
  adotable1.Next;
  s:=adotable1.fieldbyname('ygbh').AsString;
end;
procedure Tfirth.WebPageModuleActivate(Sender: TObject);
begin
  s:=adotable1.fieldbyname('ygbh').AsString;
end;

解决方案 »

  1.   

    你的程序忘记循环啦:)procedure Tfirth.bh_getExecute(Sender: TObject; Params: TStrings);
    if adotable1.active then
       begin
         adotable1.first;
         while not adotable1.eof do
            begin
              s:=adotable1.fieldbyname('ygbh').AsString;
              combobox1.Items.Add(s1);
                adotable1.Next;
            end;
       end;
      
      

  2.   

    TO  siwuge:
      谢谢,你所说的是一般的程序,我这个是WebSnap技术。
      请告诉我如何能够按下web网页上的按纽后能查看第二个记录,第三个记录,第四个记录……。
      

  3.   

    应该先 Locate 到当前记录,再用 Next
    当你点 Next 按钮提交时,WebApp 并没有为你记住当前的记录指针,所以你的 Next 总是第二条记录。
    当前记录的信息可以保存在 Session 中,但更通常的做法是放在响应页面中,用户提交时把这个信息同时提交上来,DatasetAdapter 用的正是这种方法,所以,更简单的方法是直接用 DatasetAdapter 的 "NextRow" Action
      

  4.   

    多谢花大哥,我同意你的说法,这也是李维书中说到的。
    使用DatasetAdapter的话,那么网页的界面会很难看,不能自己订制模板,
    而且我本人使用的是三层体系结构,如“上一记录”,“下一记录”,“保存”,“新增”
    “取消”,等按纽我会把他放在一张网页上,
    如果DatasetAdapter能实现各数据库的字段在网页中任意放置的话我会同意,“上一记录”,“下一记录”,的操作我知道该如何实现,但在三层体系中“保存”按纽会有一点麻烦,如果能解决这个问题,那么会好很多,其他的问题便全都可以解决。
    花大哥有何高见。
      

  5.   

    当然可以随意放置,如果你用 PageProducer 而不是  AdapterPageProducer ,那么服务端脚本你可以随意写。如:
    <form method="post">
      <input type="hidden" name="__act">
      <input type="text" name="<%=DatasetAdapter1.fieldname.InputName%>" value="<%=DatasetAdapter1.fieldname.EditText%>">
      ....
      <input type="submit" value="Next" onclick="__act.value='<%=DatasetAdapter1.NextRow.AsFieldValue%>';submit();return false;">
      <input type="submit" value="Prior" onclick="__act.value='<%=DatasetAdapter1.PriorRow.AsFieldValue%>';submit();return false;">
    </form>即使用 AdapterPageProducer,其实也是可以较好组织的。并且如果不使用 <#SERVERSCRIPT>标记,则也如 PageProducer 一样可以随意写 Server-side script 了
      

  6.   

    三层也没有问题,比如可以“ Apply ”Action 的 AfterExecute 事件中写:
    if ClientDataSet1.ChangeCount>0 then
      if ClientDataSet1.ApplyUpdates(0)>0 then
         ClientDataSet1.CancelUpdates;