怎么先查询出一个表中的最后一条记录,加1后再插入到该表中呢?主要是不明白怎么先查出记录,再插入的流程。

解决方案 »

  1.   

    insert into * from table select top 1 from table order by column desc
      

  2.   

    上面错误: insert   into   *   from   table     select   top   1 *  from   table   order   by   column   desc//column 某列
      

  3.   

    早上来都傻了,,,,
    insert into   table    select  top 1 *  from  table order  by  column  desc//column   某列             
      

  4.   

    不那么方便。你看看我的全部源码,最后一个tm字段才是要插入的记录,前面要插入的已经很长了。不知道怎么加?  with DataModule1.ADOQuery1 do
        begin
          close;
          SQL.Clear;
          SQL.Add('insert into bookinfo(bookname,bookauthor,bookmoney,booknumber,bookpage,bookconcern,booksort,booklb,bookpublishtime,bookbz,booktm)');
          SQL.Add('values (:bookname,:bookauthor,:bookmoney,:booknumber,:bookpage,:bookconcern,:booksort,:booklb,:date,:bookbz,:booktm)');
          Parameters.ParamByName('bookname').value:=bookname.Text;
          Parameters.ParamByName('bookauthor').Value:=bookauthor.Text;
          Parameters.ParamByName('bookMoney').Value:=bookMoney.Text;
          Parameters.ParamByName('booknumber').Value:=StrToInt(bookNumber.Text);
          parameters.ParamByName('bookpage').Value:=StrToInt(bookpage.Text);
          parameters.ParamByName('booksort').Value:=booksort.Text;
          Parameters.ParamByName('booklb').Value:=booklb.Text;
          parameters.ParamByName('bookbz').Value:=Memo1.Text;
          parameters.ParamByName('bookconcern').Value:=bookconcern.Text;
          Parameters.ParamByName('date').Value:=FormatDateTime('yyyy-mm-dd',DateTimePicker1.Date);
          Parameters.ParamByName('tm').Value:=
          execsql;
       end;
      

  5.   

    1:怎么先查询出一个表中的最后一条记录,加1后再插入到该表中呢?  
     你在看一下你说的:虽然结果相同,但是最后一行结果可能不同,所以根本不能确定(如果能知道是什么结果,也就可以确定下来了),反过来说SQL不行,但是可以根据你查询的条件,把最后一条记录付给变量,再由变量付过去,,,
    简单操作
    var
     i: integer;
     str: //定义需要的变量
    With  AdoQuery1 do
      Begin
    SQl.add(select count(*)  as count_ from table);
    *****
      end;
    i:=AdoQuery1.fieldbyname('count').Asinteger
    while not AdoQuery1.eof do
      Begin      
         if i=AdoQuery1.fieldbyname('count').Asinteger then
           Begin
             str:=需要的值,//当然这里查询的结果也是不能确定,要根据Adoquery的SQL语句确定  
           end;
        i:=i+1;
        Adoquery1.next;   
      End;
      

  6.   

    因为你将000008转换为整数,前面的零会被忽略掉的,其对应整数值为8,加1当然是9了,如果要转换为你想要的格式需要加上另外的处理。
    假设加1后的值存在名为ID的变量中,有如下代码:
    var
      ID: Integer;
      StrID: String;
    begin
      //前面的语句忽略
      ......
      if ID < 10 then 
        StrID := '00000' + IntToStr(ID)
      else if ID < 100 then
        StrID := '0000' + IntToStr(ID)
      else if ID < 1000 then
        StrID := '000' + IntToStr(ID)
      else if ID < 10000 then
        StrID := '00' + IntToStr(ID)
      else if ID < 100000 then
        StrID := '0' + IntToStr(ID)
      else
        StrID := IntToStr(ID);
      ......
    end;
      

  7.   

    现在明白你要的是什么动西了
    select max(column) as max_ from table
    在如上面8楼的例子,,,