Access支持RecNo吗?那我如何在数据库中定位?

wjzhuang 2001-04-20 12:10:00
Access支持RecNo吗?如果不,那我如何在数据库中定位?假如我不想改数据库,数据库中没有主健来说明位置。
另外:下面的代码可以运行吗?
AnsiString name;
int i = 10;
Table1->First();
while(!Table1->Eof)
{
if(name == Table1->Fields->Filds[1]->AsString)
{
Table1->Fields->Fields[2]->AsString += IntToStr(i);
break;
}
Table1->Next();
}
...全文
178 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
No,No,No,No



void __fastcall TForm1::Button2Click(TObject *Sender)
{
TExecuteOptions eo;
int records_affected;
eo.Clear();
eo<<eoExecuteNoRecords;
ADOConnection1->Execute(
L"update aaa set f1='5' where f0='102001'",
records_affected,eo);
if(records_affected==0){//no record
ADOConnection1->Execute(
L"Insert into aaa values(...)",
records_affected,
eo);
}
}
wjzhuang 2001-04-20
  • 打赏
  • 举报
回复
to ALNG(阿良):
你的回答很详细.也很清楚.
我需要得到RecNo是因为我要先得到一个判断值(bool量),先从表里查找是不是有我需要的值,假设为name,这是一个判断的过程,如果没有就添加,如果有则修改表中其他Fields的值.所以我需要再查找成功后对该表进行定位.也就是为什么需要RecNo或者bookmark了.
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
>>yeqiufeng(叶秋枫)
谢谢秋枫!

得到秋枫的称许,ALNG如坐拥双美,爽!

「已注销」 2001-04-20
  • 打赏
  • 举报
回复
阿良回答的精彩极了

应该给他加分

对于属性和变量的+=操作我想补充一下

的确是这样的 我以前好写这样的句子:Memo1->Text+="abc\r\n";

结果总是得不到期望值 后来才知道自己理解错了 属性是不能进行这种操作的
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
如果硬要用Table/ADOTable, 可以用Filter,

Table1->Filter="field1='" +name +"'";
Table1->Filtered=true;
while(!Table1->Eof){
//do processsing
}
Table1->Filtered=false;
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
但是,对这种情况最好使用TQuery/TADOQuery, 尤其是在网络环境下,可以减轻Network traffic.

TAQOQuery * qry=new TADOQuery(NULL);
qry->Connection=ADOConnection1;
qry->SQL->Text="select filed3 from mytable where field1='" +name + "'";
qry->Open();
while(!qry->Eof){
# define pFld qry->Fields->Fields[0]
pFld->AsString=pFld->AsString+IntToStr(i);
# updef pFld
qry->Next();
}
qry->Close();
delete qry;
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
可以,这是标准处理。这种情况下完全不需要Bookmark, 也不需要记住纪录位置!
wjzhuang 2001-04-20
  • 打赏
  • 举报
回复
to ALNG(阿良):
我主要想知道的是我那样写代码可以吗,我是指假如我有一个判断条件,我就写代码(像上面)对表进行遍历,找到符合判断条件的表的位置,然后对该行进行操作.这样的操作手法可行吗?
我那段代码是写一个大概.我也知道错误很多,不过是我没把问题说清楚.
请你再次帮忙,谢谢!
 
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
TBookmark bm=Table1->GetBookmark();

/* reposition cursor for processing */

Table1->GotoBookmark(bm);
Table1->FreeBookmark(bm);


/****************************************************************/

/* following is copied from BCB help */
void __fastcall TForm1::CopyDataClick(TObject *Sender)

{
TBookmark *SavePlace;
Variant PrevValue;

// get a bookmark so that we can return to the same record

SavePlace = Table1->GetBookmark();

Table1->FindPrior();// move to prior record

PrevValue = Table1->Fields->Fields[0]->Value; // get the value

// Move back to the bookmark

// this may not be the next record anymore
// if something else is changing the dataset asynchronously
Table1->GotoBookmark(SavePlace);
Table1->Fields->Fields[0]->Value = PrevValue; // set the value
Table1->FreeBookmark(SavePlace);

}

孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
1。 你的代码与RecNo等无关!
2。代码中友谊出错误:
Table1->Fields->Fields[2]->AsString += IntToStr(i);
这是对AsString的误解。AsString是一个Property而不是一个普通变量。此情况下,一个Stiring类型的临时变量被修改并丢弃,...->AsString保持不变。应该,
Table1->Fields->Fields[2]->AsString =
Table1->Fields->Fields[2]->AsString+IntToStr(i);
类似的情形还有:
Edit1->Text+="Hi!";
等等!
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
1. your code has nothing to do with RecNo, TBookMark, or whatever.

2. There is a problem in your code:

Table1->Fields->Fields[2]->AsString += IntToStr(i);
It's a misinterpretation of AsString, its a property instead of a common variable. In this case a temporary variable is modified and discarded!
do it this way:
Table1->Fields->Fields[2]->AsString =
Table1->Fields->Fields[2]->AsString+IntToStr(i);
wjzhuang 2001-04-20
  • 打赏
  • 举报
回复
to luhongjun(过江项羽):
你介绍的帖子没有解决我的问题,只是提到使用RecNo会出现的问题.
to Hank(星星农场):
能说的具体一点吗?

另外我写的那段代码可以运行吗?
Hank 2001-04-20
  • 打赏
  • 举报
回复
用书签BookMark或索引
luhongjun 2001-04-20
  • 打赏
  • 举报
回复
帖子为:http://www.csdn.net/expert/topic/96/96922.shtm
luhongjun 2001-04-20
  • 打赏
  • 举报
回复
不要使用RecNo,请使用书签。
在已解决的问题中有关于RecNo的完整论诉。你可以看一看。
wjzhuang 2001-04-20
  • 打赏
  • 举报
回复
多谢阿良,我试试看.
孩皮妞野 2001-04-20
  • 打赏
  • 举报
回复
用Query, 可以用一个flag表明是否有匹配纪录被修改,如否,插入兴纪录。

不需要用TBookmark.

我现在很忙,我想你已经可以做到了,如有问题,我稍后在复!
wjzhuang 2001-04-20
  • 打赏
  • 举报
回复
我不是使用ado连接数据库的,现在改也不太可能.要改的地方太多了.
可以用Query改写吗?

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧