十万火急,QUERY的计算字段搞不定了!!!在线等待。

kinglang 2002-05-24 03:02:44
我在FORM上加了一个QUERY,其SQL在运行时指定,我又在QUERY上加了两个计算字段。可是当我运行的时候总是出现这样的错误:QUERY的"名称"字段不存在。可是我指定的SQL语句是:select * from temp.db。而temp.db中确实存在"名称"字段。不知道问题出在哪里,请高手指点一二。由于是在做毕业设计,就要交货了,很急。100分求教。
...全文
131 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wingsun 2002-05-24
  • 打赏
  • 举报
回复
其实意思也就是说不仅仅是定义了而已,最为关键的就是你要对他进行赋值
xtzzll 2002-05-24
  • 打赏
  • 举报
回复
可以建立lookup字段来解决。
wyb_45 2002-05-24
  • 打赏
  • 举报
回复
实在没法帮你,只有自己细心些。
fangrk 2002-05-24
  • 打赏
  • 举报
回复
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ path=GetCurrentDir();
sourceFileName=path+"\\cul.db";
if(!FileExists(sourceFileName)){
Application->MessageBox("cul.db not found!","ERROR",MB_OK);
Application->Terminate();
}
sourceFileName=path+"\\付款.txt";
if(!FileExists(sourceFileName)){
Application->MessageBox("付款.txt not found!","ERROR",MB_OK);
Application->Terminate();
}
sourceFileName=path+"\\批量.txt";
if(!FileExists(sourceFileName)){
Application->MessageBox("批量.txt not found!","ERROR",MB_OK);
Application->Terminate();
}
Table1->Active=false;
Table1->DatabaseName=path;
Table1->TableName="cul.db";
Query1->Active=false;
Query1->DatabaseName=path;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{ char buff[20];

const AnsiString depStart[]=
{"06","01","04","02","05","10","11","03","48","70","30",
"40","20","61"};
const AnsiString depEnd[]=
{"06","01","04","02","05","10","11","03","59","87","39",
"40","27","69"};
__int64 money[15];
int count[15];
AnsiString sql;
int i,j,k;
DataSource1->Enabled=false;
DataSource1->DataSet=Query1;
DataSource1->Enabled=true;
for(i=0;i<14;++i){
sql="select 金额 from cul.db where 部办>='";
sql+=depStart[i]+"' and 部办<='"+depEnd[i]+"'";
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(sql);
Query1->Open();
j=Query1->RecordCount;
count[i]=j;
money[i]=0L;
for(k=0;k<j;++k){
money[i]+=
_atoi64(Query1->FieldByName("金额")->AsString.c_str());
Query1->Next();
}
}
count[14]=0;
money[14]=0L;
for(i=0;i<14;++i){
count[14]+=count[i];
money[14]+=money[i];
}
Variant MSSheet,MSExcel=CreateOleObject("Excel.Application");
MSExcel.OlePropertyGet("WorkBooks").OleProcedure("Open",
path+"\\统计模板.xls");
MSSheet=MSExcel.OlePropertyGet("ActiveWorkBook").
OlePropertyGet("ActiveSheet");
AnsiString t1,t2;
for(i=0;i<15;++i){
MSSheet.OlePropertyGet("Cells",i+5,3).
OlePropertySet("Value",count[i]);
MSSheet.OlePropertyGet("Cells",i+5,4).
OlePropertySet("Value",changeTo10_4(money[i],buff));
t1=MSSheet.OlePropertyGet("Cells",i+5,4).
OlePropertyGet("Value");
t2=MSSheet.OlePropertyGet("Cells",i+5,6).
OlePropertyGet("Value");
getPercent(t1.c_str(),t2.c_str(),buff);
MSSheet.OlePropertyGet("Cells",i+5,8).
OlePropertySet("Value",buff);
}
MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("SaveAs",
path+"\\统计.xls");
MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("Close");
MSExcel.OleProcedure("Quit");
Application->MessageBox("统计.xls 生成完毕!","OK",MB_OK);
}
kinglang 2002-05-24
  • 打赏
  • 举报
回复
feeinfo就是计算字段了,它就是在字段编辑器里面加的吧。

可是我现在的问题不是如何给计算字段一个计值的表达式。 我的问题是解决为何设置计算字段后就出现查询异常的问题。

出现的异常我已经提出了,这里不再复述。
Wingsun 2002-05-24
  • 打赏
  • 举报
回复
给你一段关于计算字段的程序,你看看就知道了。

void __fastcall TfrmMain::qryIOInfoCalcFields(TDataSet *DataSet)
{
if(DataSet->Active)
{
AnsiString User_ID=DataSet->FieldByName("User_ID")->AsString;
if(User_ID!="")
{
TADOQuery * pQuery=new TADOQuery(this);
pQuery->Connection=DMSource->cnCenter;
pQuery->SQL->Clear();
pQuery->SQL->Add("SELECT Pay_Unit,Charge_Infor.* FROM Pay_Infor INNER "
"JOIN Charge_Infor ON Pay_Infor.ID = Charge_Infor.Pay_ID Where State=1 And User_ID="
+User_ID);
pQuery->Open();
bool bIsLow=false;
if(!pQuery->IsEmpty())
{
int PayType=pQuery->FieldByName("Pay_Unit")->AsInteger;
int Remain=pQuery->FieldByName("Remain")->AsInteger;
pQuery->Close();
pQuery->SQL->Clear();
pQuery->SQL->Add("Select Charge_Infor.* From Charge_Infor Where State=0 And User_ID="+User_ID);
pQuery->Open();
if(pQuery->IsEmpty())
{
switch(PayType)
{
case 0://按小时
bIsLow=(Remain<=SystemParam->Warnning_Hour);
break;
case 1://按次
bIsLow=(Remain<=SystemParam->Warnning_Times);
break;
case 2://按天
bIsLow=(Remain<=SystemParam->Warnning_Day);
break;
case 3://按月
bIsLow=(Remain<=SystemParam->Warnning_Day);
break;
case 4://免费
break;
}
}
}
DataSet->FieldByName("FeeInfo")->AsInteger=bIsLow?1:0;
pQuery->Close();
delete pQuery;
}
}
}
kinglang 2002-05-24
  • 打赏
  • 举报
回复
up
mikesome 2002-05-24
  • 打赏
  • 举报
回复
右击->NewFields...添加,得把类型设定为Calculated
kinglang 2002-05-24
  • 打赏
  • 举报
回复
没人回答吗?
kinglang 2002-05-24
  • 打赏
  • 举报
回复
计算字段就是在字段编辑器里面点右键,再添加新字段就行了。好像没错吧。还有别的添加方式 吗。
kinglang 2002-05-24
  • 打赏
  • 举报
回复
不是吧,可以有.db啊,我一直这么用,没错啊。

字段编辑器里面根本就不能加入字段,我要加的时候就显示错误
unexpected end of command.
第二行是什么字我不知道了,大概就是标志的意思吧。
line 1.
我检查了一下,发现sql属性里多出了一个回车。
我把回车删掉以后,不再显示这个错误了,但还是不行,提示我没有相应的字段。
字段编辑器好像还是不可用。
TR@SOE 2002-05-24
  • 打赏
  • 举报
回复
不是很清楚你要解决的问题是什么。

你的计算字段是如何设置的?
luanma1978 2002-05-24
  • 打赏
  • 举报
回复
可能是你使用了字段编辑器,它里面没有列出这个字段!
select * from temp
不能有.db

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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