2012-11-28 11 views
1

我拥有带有ID的CArray/CMap。
在SQL表上有:ID,值,开始时间,结束时间。
我收到StartTime和EndTime,需要删除该CArray上显示的所有ID。
因此,需要查询如:
“从列表中删除(列表[0],列表[1],列表[2]。...列表[n]中的id)和时间T1和T2“
我的问题是如何实现”in(..)“如何传输CArray上的ID?位于Array/CArray/DataStructure中的Oracle SQL删除值

使用CDatabase.executeSQL(查询)与CommitTrans和CommitTrans

感谢

+0

试图使CArray转换为CString x,x1,x2,并在b中输入该cstring arraked – ilansch

回答

1

,你可以做简单的是这样的(只要你有CARRAY,它被称为干旱地区):

CString sql, item; 
sql = _T("delete from table where id "); 
if(arId.GetCount() == 1) 
{ 
    item.Format(_T(" = %d"), arId[0]); 
    sql += item; 
} 
else 
{ 
    for(int i = 0; i < arId.GetCount(); ++i) 
    { 
    if(i == 0) sql += _T("IN ("); 
    item.Format(_T("%d"), arId[0]); 
    if(i == arId.GetCount()-1) 
     item += _T(")"); 
    else 
     item += _T(", "); 
    sql += item; 
    } 
} 
CDatabase.executeSQL(sql); 

对于CMap用POSITION pos = mapId.GetStartPosition()等替换for(i = 0; ...)。

+0

嗨,是否有限制我可以放在(...)内的ID号码?如果我有百万个ID,我应该分成几块并在几个查询中做出来? – ilansch

+0

我不认为ID是有限制的,但是对整个SQL查询长度有限制。说了这么多,请注意,它是所有数据库特定的。 – cha