SQL和 C++ BUILDER 6.0开发问题 求解?

奋斗者 2012-05-30 10:26:39
各位哥哥,小弟一事相问,我在用C++ builder 6.0做一个图书管理系统,用的是SQL数据库,在服务端用的是 ADOQuery1 DataSetProvider1 ADOtable1 DataSetProvider2把表 在库图书 连起来了,在客户端在数据模块加入了DCOMConnection1 ClientDataSet1 把服务端连接起来了。
1、在客户端实现对表 在库图书 的查询操作,
DataModule2->ClientDataSet1->Active=true;
DataModule2->ClientDataSet1->Open() ;
AnsiString a="Select * from 在库图书 Where 书号='"+Form1->Edit1->Text+"'";
DataModule2->ClientDataSet1->CommandText=a;
Form1->Edit2->Text = DataModule2->ClientDataSet1->FieldByName("书名")->Value;
返回结果不对、、、、、是何原因?
2、在服务端用下列语言实现对一个表的数据插入操作,能插入数据,但是显示错误,为何啊?
Form5->ADOQuery1->Active=false;
Form5->ADOQuery1->SQL->Clear() ;
Form5->ADOQuery1->SQL->Add("insert into 管理员信息 values('"+Form5->Edit1->Text+"','"+Form5->Edit2->Text+"','"+Form5->Edit3->Text+"','"+Form5->Edit4->Text+"','"+Form5->Edit5->Text+"','"+Form5->Edit6->Text+"','"+Form5->Edit7->Text+"')") ;
Form5->ADOQuery1->Open() ;
Form5->ADOQuery1->UpdateRecord();
...全文
494 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmn0079 2013-10-13
  • 打赏
  • 举报
回复
不对怎么个不对? 显示错误又是显示的什么错误? 有些贴什么都不说,老是让人猜
nextseconds 2013-10-13
  • 打赏
  • 举报
回复
引用 7 楼 SUNXLLEE 的回复:
1、在客户端实现对表 在库图书 的查询操作, DataModule2->ClientDataSet1->Active=true; DataModule2->ClientDataSet1->Open() ; AnsiString a="Select * from 在库图书 Where 书号='"+Form1->Edit1->Text+"'"; DataModule2->ClientDataSet1->CommandText=a; Form1->Edit2->Text = DataModule2->ClientDataSet1->FieldByName("书名")->Value; 返回结果不对、、、、、是何原因? ---试试将DataModule2->ClientDataSet1->FieldByName("书名")->Value; 改为DataModule2->ClientDataSet1->FieldByName("书名")->AsString; 2、在服务端用下列语言实现对一个表的数据插入操作,能插入数据,但是显示错误,为何啊? Form5->ADOQuery1->Active=false; Form5->ADOQuery1->SQL->Clear() ; Form5->ADOQuery1->SQL->Add("insert into 管理员信息 values('"+Form5->Edit1->Text+"','"+Form5->Edit2->Text+"','"+Form5->Edit3->Text+"','"+Form5->Edit4->Text+"','"+Form5->Edit5->Text+"','"+Form5->Edit6->Text+"','"+Form5->Edit7->Text+"')") ; Form5->ADOQuery1->Open() ; Form5->ADOQuery1->UpdateRecord(); --将后面两句 Form5->ADOQuery1->Open() ; Form5->ADOQuery1->UpdateRecord(); 改为Form5->ADOQuery1->ExecSQL() ; 另外,如果可以,尽量将表的字段也列举出来,不然有时候想对应数据都不知道对应哪个。
李志林HZ 2012-07-28
  • 打赏
  • 举报
回复
1、在客户端实现对表 在库图书 的查询操作,
DataModule2->ClientDataSet1->Active=true;
DataModule2->ClientDataSet1->Open() ;
AnsiString a="Select * from 在库图书 Where 书号='"+Form1->Edit1->Text+"'";
DataModule2->ClientDataSet1->CommandText=a;
Form1->Edit2->Text = DataModule2->ClientDataSet1->FieldByName("书名")->Value;
返回结果不对、、、、、是何原因?
---试试将DataModule2->ClientDataSet1->FieldByName("书名")->Value;
改为DataModule2->ClientDataSet1->FieldByName("书名")->AsString;

2、在服务端用下列语言实现对一个表的数据插入操作,能插入数据,但是显示错误,为何啊?
Form5->ADOQuery1->Active=false;
Form5->ADOQuery1->SQL->Clear() ;
Form5->ADOQuery1->SQL->Add("insert into 管理员信息 values('"+Form5->Edit1->Text+"','"+Form5->Edit2->Text+"','"+Form5->Edit3->Text+"','"+Form5->Edit4->Text+"','"+Form5->Edit5->Text+"','"+Form5->Edit6->Text+"','"+Form5->Edit7->Text+"')") ;
Form5->ADOQuery1->Open() ;
Form5->ADOQuery1->UpdateRecord();
--将后面两句 Form5->ADOQuery1->Open() ;
Form5->ADOQuery1->UpdateRecord();
改为Form5->ADOQuery1->ExecSQL() ;
另外,如果可以,尽量将表的字段也列举出来,不然有时候想对应数据都不知道对应哪个。
艳琦罗生 2012-06-07
  • 打赏
  • 举报
回复

bool TDM::query(TADOQuery * ADOQ,String sql) //用于查询
{
try {
ADOQ->Close();
ADOQ->SQL->Text = sql;
ADOQ->Open();
return true;
} catch(Exception &E) {
Application->MessageBox(("sql操作出错【"+E.Message+"】").c_str(), "提示", MB_OK + MB_ICONINFORMATION);
}
ADOQ->Close();
return false;
}


bool TDM::update(String sql)//插入和update
{

try {
if (!ADOCon1->Connected) ADOCon1->Open();
ADOCon1->BeginTrans();
ADOCon1->Execute(sql);
ADOCon1->CommitTrans();
return true;
} catch(const Exception &E) {
ADOCon1->RollbackTrans();
Application->MessageBox(("sql操作出错【"+E.Message+"】").c_str(), "提示", MB_OK + MB_ICONINFORMATION);
}
return false;
}

void initsFeeName()//取查询返回值放入map
{
String sql = "select name from t_Tree ";
map<int,String> m_sFeeName;
m_sFeeName.clear();
if(DM->query(DM->ADOQ1,sql)){
int fieldCount = DM->ADOQ1->FieldCount;
int recordCount = DM->ADOQ1->RecordCount; //行 和列
Adoint::_di__Recordset recordset = DM->ADOQ1->Recordset;
recordset->MoveFirst();
for (int i = 0; i < recordCount; i++) {
for (int j = 0; j < fieldCount; j++) {
m_sFeeName[i] = getValueByOle(recordset->Fields->Item[j]->Value);
}
recordset->MoveNext();
}
return;
}

}



希望对楼主有帮助
奋斗者 2012-06-06
  • 打赏
  • 举报
回复
还有其他的解决方法吗?这些都不管用、、、、谢谢了
mabaoyes 2012-06-01
  • 打赏
  • 举报
回复
取返回结果的 select 要用ADOQuery1->Open();
而不取返回结果的 insert \update 要用ADOQuery1->ExecSQL();
bigfog 2012-06-01
  • 打赏
  • 举报
回复
1、的错误是语句顺序错误,
一般操作:先设置 ->Active=false;然后再重置sql语句;最后再Open();
2、不返回查询结果的sql语句(insert ...),不能用ADOQuery1->Open(),而改成ADOQuery1->ExecSQL();
sforiz 2012-05-31
  • 打赏
  • 举报
回复
1、ClientDataSet1未设置Active=True或未Open,
2、SQL字段数量不一致?
看一下基础知识吧
奋斗者 2012-05-31
  • 打赏
  • 举报
回复
怎么没人帮我啊????????

1,178

社区成员

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

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