关于Mssql7的sql的问题(25分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi问题:
用MSSQL7建一新表table2,其字段和数据如下:
id name
1 a
2 b

在form1里添加query1、edit1、edit2和button1,query1连接Mssql7。我想实现这样
的功能:假如在edit1和edit2分别输入“3”和“c”,就把这两个数据insert into到table2,
其实这样做比较简单,语句为:
with query1 do
begin
close;
sql.clear;
sql.add('insert into table2(id,name) values(:id,name)');
parambyname('id').AsFloat:=strtofloat(edit1.text);
parambyname('name').AsString:=edit2.text;
execsql;
end;

但是如果在edit1里输入“1”或“2”时,我不想让table2的id重复,那么得在sql语句加入判断句where,
那么where后面又如何写?如:
with query1 do
begin
close;
sql.clear;
sql.add('insert into table2(id,name) values(:id,name)');
sql.add('where ?');
parambyname('id').AsFloat:=strtofloat(edit1.text);
parambyname('name').AsString:=edit2.text;
execsql;
end;
 
insert 和 where 怎么联系起来?好象不行的吧。
1.使用update
"update table2 set name=:name where id=:id"
2.use delete then insert
 
我不要update,我只要insert into,我想当id重复时,就不要insert into。
 
sql 为:

insert into table2(id,name) values(:id,:name)
where IsNull((select count(id) from table2
where id=:id2
),0)<1;
 
下列语句在Oracle8下通过

insert into Table2(ID,Name)
select <font color=red>1,2 </font>
from (select nvl(count(a),0) as IDCount from Table2
where Table2.ID=1) IDCount
where IDCount.IDCount<1;

不过红色的地方不能使用参数,不过可以使用Delphi动态生成。

既:
Sql.Text:='insert into Table2(ID,Name)'+
' selectn '+InttoStr(ID)+','+Name+
' from (select nvl(count(a),0) as IDCount from Table2 '+
' where Table2.ID='+IntToStr(ID)+') IDCount'+
' where IDCount.IDCount<1';
 
老是搞错!!!

Sql.Text:='Insert into Table2(ID,Name)'+
' select '+InttoStr(ID)+','+Name+
' from (select nvl(count(ID),0) as IDCount from Table2 '+
' where Table2.ID='+IntToStr(ID)+') IDCount'+
' where IDCount.IDCount<1';

在Ms Sql & Sybase Nvl函数由 IsNull代替!
 
if not Exists(Select * From Table2 Where ID=:ID)
Insert ...
 
前卫兄的太复杂,而Big_Z的是写 proc 的手法不知道能不能在 TQuery 里面用
 
不想复杂就使用存储过程.
 
还是在后台写Trigger吧
 
多人接受答案了。
 
为什么不试一下我的方法呢!!!
多简单!!!
n 爽!!!
^_^!
 
后退
顶部