主要是不明白怎么先查出记录,再插入的流程。
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 某列
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;
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;
你在看一下你说的:虽然结果相同,但是最后一行结果可能不同,所以根本不能确定(如果能知道是什么结果,也就可以确定下来了),反过来说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;
假设加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楼的例子,,,
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 某列
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;
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;
你在看一下你说的:虽然结果相同,但是最后一行结果可能不同,所以根本不能确定(如果能知道是什么结果,也就可以确定下来了),反过来说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;
假设加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楼的例子,,,
select max(column) as max_ from table
在如上面8楼的例子,,,
#10
谢谢,搞定了