现有一个表bumen ,有字段bmid,bmname;和一个字符串mystrADOQuery1.close;
ADOQuery1.sql.text := 'select  bmname from bumen where bmname='''+mystr+'''';
ADOQuery1.open;if ADOQuery1.isempty then
begin
  ADOQuery1.close;
  ADOQuery1.sql.text := 'insert into bumen (bmname) values '''+mystr+'''';
  ADOQuery1.ExecSQL;  ADOQuery1.close;
  ADOQuery1.sql.text := 'select  * from bumen';
  ADOQuery1.open;end
else
begin
  ShowMessage('');
end;由于是网络版,ADOQuery1用了3次语句来执行,怕这中间出现数据更新,得到的数据不完整,希望能用一条语句来执行。

解决方案 »

  1.   

    只能说明你对计算机没有信心,在SQL SERBER 中是严格按照线程和队列的模式来执行数据的,在大规模的企业级的开发中。如JAVA HIBERNATE中,连续可以插入50000条数据不出错,如果要求客户端数据同步,应该可以采取的两个可用的解决方案,非DELPHI
      

  2.   

    假如连续插入数据的话,可以用UNION批量来解决,假如你是绑定了DATAGRID控件,第三步明显是多余的,假如SRINGDATA的话 你可以按照你的想法继续!
      

  3.   

    建议使用存储过程实现,如果实在不想用,就使用SQL语句块来实现吧,如
    SqlStr := 'declare @reccnt int begin select @reccnt=count(0) from bumen WHERE bmname='+QuotedStr(mystr)+' if @reccnt>0 select * from bumen end else begin insert into bumen(bmname) values('+QuotedStr(mystr)+') select * from bumen end';
    ADOQuery1.sql.text := SqlStr
      

  4.   

    'insert into bumen (bmname) values '''+mystr+'''select* from bumen';好像简单
      

  5.   

    不好意思,语句中好像少了一个END
    建议使用存储过程实现,如果实在不想用,就使用SQL语句块来实现吧,如
    SqlStr := 'declare @reccnt int begin select @reccnt=count(0) from bumen WHERE bmname='+QuotedStr(mystr)+' if @reccnt>0 select * from bumen else begin insert into bumen(bmname) values('+QuotedStr(mystr)+') select * from bumen end end';
    ADOQuery1.sql.text := SqlStr