日期:2014-05-18  浏览次数:20517 次

数据库中读取数据的问题?
SQL Sever2008中有:探测器布点信息表。该表中含有:监测点ID、探测器ID、时间、监测点经度、监测点纬度和监测点海拔等字段。数据库中的数据刷新时间最短30秒钟。且刷新数据时不会覆盖原先的数据。即:假设刚开始该表中有30条数据,到了刷新时间后,该表中的数据记录从第31行开始。
  现在有个问题。我开始用select * from 探测器布点信息,然后一条一条的读取记录。这没问题,但是一旦数据更新后,再这样读取的话就有问题。比如:数据表中有30个探测点的信息,数据刷新一次后,表中记录就又多了30条。这样读取的话就总共读了60条记录,明显是有问题的。
  再者,探测器布点信息表中,只记录监测点发生改变时的数据,如果数据不变时将不记录。

  即意味着:假设有30个监测点,探测器布点信息表中刚开始时有30条记录。过了一会数据刷新后,可能仅有30个监测点中的某几个点的数据发生了改变,而其他的数据依然不变。但我仍然需要保证读取到30个监测点的最新数据。

   
  表述的有点啰嗦了。不知各位有没什么好方法?

  我之前在VC中用ADO获取记录的代码为:
  _bstr_t strsql="select * from 探测器布点信息";

_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(_uuidof(Recordset));

try
{
m_pRecordset=theApp.m_pConnection->Execute(strsql,NULL,adCmdText);
}

catch (_com_error e)
{
//捕捉异常
AfxMessageBox(e.Description());
}

if(m_pRecordset->ADOEOF)
{
AfxMessageBox(L"表中记录为空!");
return;
}

long i=0;
while(!m_pRecordset->ADOEOF)
{
float longitude,latitude,altitude;//记录表中的经度、纬度和海拔
CString monitorID;//记录表中的监测点ID

longitude=(float)m_pRecordset->GetCollect("监测点经度");
latitude=(float)m_pRecordset->GetCollect("监测点纬度");
altitude=(float)m_pRecordset->GetCollect("监测点海拔");
monitorID=(char*)(_bstr_t)m_pRecordset->GetCollect("监测点ID");
m_pRecordset->MoveNext();

 


------解决方案--------------------
lz:你的这个表如果时间到31的时候是插入记录,还是更新记录?

如果是插入记录的话你用 select * from 表名 where ...
如果是更新记录的话你用 select * from 表名

具体的要看你怎么样对表处理的,你想啊,如果你插入的话肯定有60条记录,
如果你更新的话还是30条记录的,所以根据自己的需要去编程就ok了。

在此,希望lz成功。
------解决方案--------------------
select * from(select 监测点ID,max(时间)'时间' from tablename group by 监测ID)as a
left join tablename as b on a.监测点ID=b.监测点id

有分给吗?