小弟要做一个小型教材采购糸统.在采购输入信息,如果该教材已存在时,只更新数据库中的数量.
如果不存在,则把信息全部写入数据库.教材编号设成主键,小弟想法是这样,但不行.(初学的...)
 try
       (用insert向教材表中插入)
 except
    on EDatabaseError do
      (update )
end;但是还是这样,当插入教材编号(主键)重复时,程序也不会执行except部分.怎么回事.
如果更好的实现方法...请说说.

解决方案 »

  1.   

    先用教材编号的信息查找数据库中是否已存在这本教材
    如果存在就UPDATE数量
    不存在就Insert
    不用 try
        except
        on EDatabaseError do
    那么麻烦了
    就先select count(*) from 表 where 教材编号='XXX' 看是否大于0来判断存不存在也行了
    if >0 then update
    else Insert;
      

  2.   

    楼上说的是,
    但我不懂得:
       (就先select count(*) from 表 where 教材编号='XXX' 看是否大于0来判断存不存在也行了
       if >0 then update)ADOQuery1.SQL.Add('select...')这个是函数吗,如是,它的返回值能这样保存吗?
    n:=ADOQuery1.SQL.Add('select...');要不,如何比较是否>0;
      

  3.   

    ADOQuery1.SQL.clear;
    ADOQuery1.SQL.Add(select count(*) from 表 where 教材编号='XXX' )
    ADOQuery1.SQL.open;
    n=ADOQuery1.Fields[0].Value;
    if n>0 then
      更新
    else
      插入
      

  4.   

    楼上说的是,
    但我不懂得:
       (就先select count(*) from 表 where 教材编号='XXX' 看是否大于0来判断存不存在也行了
       if >0 then update)ADOQuery1.SQL.Add('select...')这个是函数吗,如是,它的返回值能这样保存吗?
    n:=ADOQuery1.SQL.Add('select...');要不,如何比较是否>0;
    ---------------------------------------------------------
    n:=ADOQuery1.SQL.Add('select...');????
    呵呵
    去找本数据库书稍微看看
    你楼上的已经说的很清楚了哎
      

  5.   

    试试这样来做 :你用 TADODataset 控件连接数据库;if adodataset1.Locate('教材编号','****',[]) then;//指针定位到教材编号为'****'的记录    //如果此条记录存在则更新数据(图书数量 + N )else     //如果此条记录不存在插入此条记录
      

  6.   

    If  Exists(select 1 from 表 where 教材编号='XXX') 
      Update 表 set ...........
    else
      Insert 表  ............
      

  7.   

    判断是否存在, recordcount =1
    else
     insert