各位哥哥,小弟一事相問,我在用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();
uj5u.com熱心網友回復:
怎么沒人幫我啊????????uj5u.com熱心網友回復:
1、ClientDataSet1未設定Active=True或未Open,2、SQL欄位數量不一致?
看一下基礎知識吧
uj5u.com熱心網友回復:
1、的錯誤是陳述句順序錯誤,一般操作:先設定 ->Active=false;然后再重置sql陳述句;最后再Open();
2、不回傳查詢結果的sql陳述句(insert ...),不能用ADOQuery1->Open(),而改成ADOQuery1->ExecSQL();
uj5u.com熱心網友回復:
取回傳結果的 select 要用ADOQuery1->Open();而不取回傳結果的 insert \update 要用ADOQuery1->ExecSQL();
uj5u.com熱心網友回復:
還有其他的解決方法嗎?這些都不管用、、、、謝謝了uj5u.com熱心網友回復:
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;
}
}
希望對樓主有幫助
uj5u.com熱心網友回復:
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() ;
另外,如果可以,盡量將表的欄位也列舉出來,不然有時候想對應資料都不知道對應哪個。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
不對怎么個不對?顯示錯誤又是顯示的什么錯誤?
有些貼什么都不說,老是讓人猜
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/131746.html
標籤:數據庫及相關技術
下一篇:scrollbox中的控制元件在獲得焦點時,如果控制元件在顯示區域外,scrollbox會自動滾動到焦點控制元件上,怎么禁止這種自動滾動
