insert into * from table select top 1 from table order by column desc
上面错误: insert into * from table select top 1 * from table order by column desc//column 某列
早上来都傻了,,,, insert into table select top 1 * from table order by column desc//column 某列
不那么方便。你看看我的全部源码,最后一个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;
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;
因为你将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;
现在明白你要的是什么动西了 select max(column) as max_ from table 在如上面8楼的例子,,,
insert into table select top 1 * from table order by column desc//column 某列
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;
你在看一下你说的:虽然结果相同,但是最后一行结果可能不同,所以根本不能确定(如果能知道是什么结果,也就可以确定下来了),反过来说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;
假设加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;
select max(column) as max_ from table
在如上面8楼的例子,,,