查询bcb自带的数据库database desktop则么老是出错??

wsf81619 2004-03-22 10:56:20
DataMod->StudentQuery->SQL->Clear();
DataMod->StudentQuery->Open();
AnsiString queryString="Select * from student";
queryString+="where StudentNo=";
queryString+="\"";
queryString+=UserEdt->Text;
queryString+="\"";

单步运行到第二行时就出现异常,“studentquery:No SQL statement available"
请问到底是哪里出问题了??

...全文
57 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanshangming 2004-03-23
  • 打赏
  • 举报
回复
意思是你提交的SQL语句中字符串可以用单引号括起来,而不一定要用双括号。

AnsiString SqlStr = "Select * from Table where MyField='abcd'";

这里 'abcd'就是用单引号括起来
如果用双引号,就要这样写

AnsiString SqlStr = "Select * from Table Where MyField=\"abcd\"";
这样看起来比较吃力。
wsf81619 2004-03-22
  • 打赏
  • 举报
回复
还是出现上面的问题!
我的代码如下,帮忙查一下,万分感谢!!
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include"Data.h"


#include "Certify.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TCertifyDlg *CertifyDlg;
//---------------------------------------------------------------------------
__fastcall TCertifyDlg::TCertifyDlg(TComponent* Owner)
: TForm(Owner)
{
m_nTimes=0;
m_strStuName="";
}

//---------------------------------------------------------------------------
void __fastcall TCertifyDlg::OkBtnClick(TObject *Sender)
{
m_nTimes++;
if(RadioGroup1->ItemIndex==0)
{
DataMod->EduManagQuery->SQL->Clear();
DataMod->EduManagQuery->Close();
AnsiString queryString="Select * from EduManager";
queryString+="where EMName=";
queryString+="\'";
queryString+=UserEdt->Text;
queryString+="\'";
try
{
DataMod->EduManagQuery->SQL->Add(queryString);
DataMod->EduManagQuery->ExecSQL();
DataMod->EduManagQuery->Open();
DataMod->EduManagQuery->Active=true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据表","错误",MB_OK);
ModalResult=mrAbort;
return;
}
if(DataMod->EduManagQuery->RecordCount==0)
{
if(m_nTimes==3)
{
MessageBox(NULL,"你不是合法用户","登陆数据库错误",MB_OK);
ModalResult=mrAbort;
Close();
}
else
{
MessageBox(NULL,"用户名不存在,请重新登陆","登陆数据库错误",MB_OK);
UserEdt->Text="";
UserEdt->SetFocus();
PasswordEdt->Text="";
ModalResult=mrNone;
}
}
else
{
queryString+="and MPassword=";
queryString+="\'";
queryString+=PasswordEdt->Text;
queryString+="\'";
try
{
DataMod->EduManagQuery->SQL->Clear();
DataMod->EduManagQuery->SQL->Add(queryString);
DataMod->EduManagQuery->Open();
DataMod->EduManagQuery->ExecSQL();
DataMod->EduManagQuery->Active=true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据表","错误",MB_OK);
ModalResult=mrAbort;
return;
}
if(DataMod->EduManagQuery->RecordCount==0)
{
if(m_nTimes==3)
{
MessageBox(NULL,"你不是合法用户","登陆数据库错误",MB_OK);
ModalResult=mrAbort;
Close();
}
else
{
MessageBox(NULL,"口令不正确,请重新登陆","登陆数据库错误",MB_OK);
PasswordEdt->Text="";
PasswordEdt->SetFocus();
ModalResult=mrNone;
}
DataMod->EduManagQuery->Close();
}
else
{
DataMod->EduManagQuery->Close();
ModalResult=mrOk;
}

}

}
else
{
//学生登陆,查询student表
DataMod->StudentQuery->SQL->Clear();
DataMod->StudentQuery->Close();
AnsiString queryString="Select * from student";
queryString+="where StudentName=";
queryString+="\'";
queryString+=UserEdt->Text;
queryString+="\'";
try
{
DataMod->StudentQuery->SQL->Add(queryString);
DataMod->StudentQuery->Open();
DataMod->StudentQuery->ExecSQL();//单步走到这里报错??????????
DataMod->StudentQuery->Active=true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据表","错误",MB_OK);
ModalResult=mrAbort;
return;
}
if(DataMod->StudentQuery->RecordCount==0)
{
if(m_nTimes==3)
{
MessageBox(NULL,"你不是合法用户","登陆数据库错误",MB_OK);
ModalResult=mrAbort;
Close();
}
else
{
MessageBox(NULL,"用户名不存在,请重新登陆","登陆数据库错误",MB_OK);
UserEdt->Text="";
UserEdt->SetFocus();
PasswordEdt->Text="";
ModalResult=mrNone;
}
}
else
{
queryString+="and MPassword=";
queryString+="\'";
queryString+=PasswordEdt->Text;
queryString+="\'";
try
{
DataMod->StudentQuery->SQL->Clear();
DataMod->StudentQuery->SQL->Add(queryString);
DataMod->StudentQuery->Open();
DataMod->StudentQuery->ExecSQL();
DataMod->StudentQuery->Active=true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据表","错误",MB_OK);
ModalResult=mrAbort;
return;
}
if(DataMod->EduManagQuery->RecordCount==0)
{
if(m_nTimes==3)
{
MessageBox(NULL,"你不是合法用户","登陆数据库错误",MB_OK);
ModalResult=mrAbort;
Close();
}
else
{
MessageBox(NULL,"口令不正确,请重新登陆","登陆数据库错误",MB_OK);
PasswordEdt->Text="";
PasswordEdt->SetFocus();
ModalResult=mrNone;
}
DataMod->StudentQuery->Close();
}
else
{
m_strStuName=DataMod->StudentQuery->FieldValues["StudentName"];
DataMod->StudentQuery->Close();
ModalResult=mrOk;
}

}


}
}
//---------------------------------------------------------------------------


WbtServer 2004-03-22
  • 打赏
  • 举报
回复
DataMod->StudentQuery->SQL->Clear();
DataMod->StudentQuery->Open();
你把SQL语句清空再打开怎么能不出问题
DataMod->StudentQuery->SQL->Clear();
DataMod->StudentQuery->Close();
AnsiString queryString="Select * from student";
DataMod->StudentQuery->SQL->Add(queryString);
DataMod->StudentQuery->Open();

yesry 2004-03-22
  • 打赏
  • 举报
回复
queryString+="\'";
queryString+=UserEdt->Text;
queryString+="\'";
WUKAI001 2004-03-22
  • 打赏
  • 举报
回复
不是
应该是:AnsiString queryString=" select * from ss ";

queryString+= " where StudentNo=";

queryString+= "'"+UserEdt->Text+"'";
wsf81619 2004-03-22
  • 打赏
  • 举报
回复
SQL语句可以用单引号是不是可以
AnsiString queryString=’select * from ss'
是这个意思还是如何??
guanshangming 2004-03-22
  • 打赏
  • 举报
回复
另外,你的程序结构可以有很多的精简,这么简单的查询构造了这么多语句,也够为难你了。
guanshangming 2004-03-22
  • 打赏
  • 举报
回复
第一、SQL查询语句可以用单引号,这样看起来比较直观。
第二、像你这样相加语句之间要留空格。
第三、如果SQL语句不是很长,能不用中间变量就不用中间变量。

建议改成这样。
DataMod->StudentQuery->SQL->Text = "select * from student where studentno='"+UserEdt->Text+"'";

你原来的语句出错除了上面的原因还因为
AnsiString queryString="Select * from student";
queryString+="where StudentNo=";
变成了
AnsiString queryString = "select * from studentwhere StudentNo=";

1,178

社区成员

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

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