怎么先查询出一个表中的最后一条记录,加1后再插入到该表中呢?

时间:2021-09-14 04:33:43
怎么先查询出一个表中的最后一条记录,加1后再插入到该表中呢?

主要是不明白怎么先查出记录,再插入的流程。

10 个解决方案

#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


  i:=i+1; //不需要这里要不就没有结果

#7


基本上是解决了,可是明明我最后一条记录是000008 ,  为什么加1号,却是变成9,而不是000009呢? 应该怎么处理前面0没有了的问题?

#8


因为你将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;

#9


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

#10


谢谢,搞定了

#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


  i:=i+1; //不需要这里要不就没有结果

#7


基本上是解决了,可是明明我最后一条记录是000008 ,  为什么加1号,却是变成9,而不是000009呢? 应该怎么处理前面0没有了的问题?

#8


因为你将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;

#9


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

#10


谢谢,搞定了