ADOTABLE与ADOQUERY
小弟在用ADOTABLE的时候发现比ADOQUERY麻烦多了,尤其是在查询的时候,ADOTABLE比ADOQUERY费事,如果在EDIT中输入要查询的内容,如果内容与数据库中的类型不一致,程序就会出现严重的错误,而QUERY就不是,大不了查不出结果罢了,而ADOTABLE用过滤器,用LOCATE,用LOOKUP什么的都不行,不知怎么处理???? 问题点数:20、回复次数:30Top
1 楼milkwayhong(自在)回复于 2005-03-15 23:19:42 得分 0
你可以进行预处理进行限制呀Top
2 楼h98458(零点起飞)回复于 2005-03-15 23:56:37 得分 2
你可以用ADOTABLE的Filter进行数据的筛选呀
ADOTable1->Filtered=false;
ADOTable1->Filter="你的SQL语句"
ADOTable1->Filtered=true;
Top
3 楼scanmaymaymay(yyc)回复于 2005-03-16 00:06:39 得分 3
你内容与数据库中的类型不一致,用table和query都是会出现错误的,应该你自己在edit输入内容作控制,而不是强求控件帮你做了
ADOTABLE和ADOQUERY都有过滤器,
ADOTable1->Filtered=false;
ADOTable1->Filter="你的过滤条件";
ADOTable1->Filtered=true;
ADOQUERY的过滤也是这样用Top
4 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 06:47:20 得分 0
怎么做预处理进行限制呀?
还有怎么做EDIT限制呀??Top
5 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 06:48:35 得分 0
TO h98458(零点起飞)
就是用FILTER,感觉才有很多错误!!!
感觉过滤器特不好用,也可能我不会用,哈哈,希望各位大虾指点!Top
6 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 06:49:52 得分 0
比如用过滤器,如果在EDIT中应该输入的是汉字,但是如果误输入的是些字母什么的,就会出现严重的错误!!!
Top
7 楼h98458(零点起飞)回复于 2005-03-16 09:44:22 得分 3
就是用FILTER,感觉才有很多错误!!!
-----------------------------------
用这个比较特殊,是直接写where子句的,比如直接这样:
ADOTable1->Filtered=false;
ADOTable1->Filter="ID='"+Edit1->Text+"'";
ADOTable1->Filtered=true;
Top
8 楼h98458(零点起飞)回复于 2005-03-16 09:47:35 得分 2
还有出现什么严重错误?
我用过,大不了是查询不出数据而已
你可在查查你在设置数据库时和设计程序的字符集是否一致Top
9 楼babycathq2000()回复于 2005-03-16 09:50:33 得分 1
我也有同样的问题
Top
10 楼dxhdxh(anyduan)回复于 2005-03-16 10:28:52 得分 1
最好还是自己查询前先处理判断后再执行不过我还是用ADOQUERY多些Top
11 楼babycathq2000()回复于 2005-03-16 10:52:47 得分 1
如果用ADOQUERY,也用filter查询过滤吗?在edit内输入汉字或者字母也是不行的阿,这怎么处理???Top
12 楼rcrain(东方细雨)回复于 2005-03-16 11:29:34 得分 2
比如用过滤器,如果在EDIT中应该输入的是汉字,但是如果误输入的是些字母什么的,就会出现严重的错误!!!
--------------------------------
如果要查询的条件是汉字,那么在取到Edit中的串时,先做判断,再作为过滤的条件。判断汉字和字母,可以用他们的ASCII码。比如
if(Edit->text的ascii码在汉字的范围内)
{
ADOTable1->Filtered=false;
ADOTable1->Filter="ID='"+StrToInt(Edit1->text)+"'";
ADOTable1->Filtered=true;
}
else 提示输入类型不对,请重新输入。
Top
13 楼babycathq2000()回复于 2005-03-16 11:33:31 得分 1
定义表时,类型为char,这应该没有问题把???Top
14 楼rcrain(东方细雨)回复于 2005-03-16 11:34:22 得分 1
不管时ADOTable还是ADOQuery,edit输入的内容做条件查询时都要先取出来判断,只有符合字段类型,才可以作为查询条件,ADOTable可以用filter,而ADOQuery,查询条件可以在sql语句的where子句中进行设置。Top
15 楼babycathq2000()回复于 2005-03-16 11:43:42 得分 1
Edit->text的ascii码在汉字的范围内???或者Edit->text的ascii码在字母的范围内???
这该怎么写???Top
16 楼rcrain(东方细雨)回复于 2005-03-16 12:12:05 得分 0
ASCII(X)>73 AND ASCII(X)<92 ,打个比方。字母ASCII码值要去查,当然这个方法是我自己想的,也不一定对。汉字有自己的码方式,不是ASCII.Top
17 楼babycathq2000()回复于 2005-03-16 13:55:38 得分 0
BCB中有ASCII(X)>73 AND ASCII(X)<92 这样的写法吗???Top
18 楼babycathq2000()回复于 2005-03-16 15:12:51 得分 0
大家帮帮忙Top
19 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 15:19:31 得分 0
多谢大家的指点!Top
20 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 15:24:59 得分 0
TO h98458(零点起飞)
还是不行Top
21 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 15:26:21 得分 0
if(RadioGroup1->ItemIndex==0)
{ try
{
DataSource1->DataSet=ADOTable1;
ADOTable1->Active=false;
ADOTable1->Filter="student_ID='"+Edit1->Text+" '";
ADOTable1->Active=true;
ADOTable1->Filtered=true;
}
catch(...)
{
ShowMessage("类型不正确!");
Application->Terminate();
}
}
else if (RadioGroup1->ItemIndex==1)
{ DataSource1->DataSet=ADOQuery1;
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from student_Info where student_ID like '%"+Edit1->Text+"%'");
ADOQuery1->Active=true;
ADOQuery1->Open();
}Top
22 楼zwlyh521(重头大戏)回复于 2005-03-16 22:45:17 得分 1
C++ BCB里弄的 控件和主件连接一顶要弄好呢Top
23 楼zwlyh521(重头大戏)回复于 2005-03-16 22:46:15 得分 0
C++ BCB里弄的 控件和主件连接一顶要弄好呢Top
24 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 22:55:36 得分 0
发现一比较怪现象,如果字段为char类型,这样就没有任何问题,ADOTable1->Active=false;
ADOTable1->Filter="student_ID='"+Edit1->Text+" '";
ADOTable1->Active=true;
ADOTable1->Filtered=true;
但是总不能要求字段INT??Top
25 楼xjp6688(大平/要做必须最好)回复于 2005-03-17 07:28:45 得分 0
怎么没人回答,总不能要求数据库中的字段都为char吧????
Top
26 楼xjp6688(大平/要做必须最好)回复于 2005-03-17 12:15:51 得分 0
高手们呢????Top
27 楼suny803(惊虹飞雪)回复于 2005-03-17 13:37:25 得分 1
你看一下你的student_ID的数据类型,看是不是String型的,如果是将空格去了试一下,用trim()Top
28 楼xjp6688(大平/要做必须最好)回复于 2005-03-17 15:20:26 得分 0
我的student_ID如果改成CHAR类型就没问题,不过我发现如果字段不是CHAR类型什么的,就不行,难到非的字段都是char类型吗,在这个问题上不知是怎么处理的??Top
29 楼xjp6688(大平/要做必须最好)回复于 2005-03-17 15:21:08 得分 0
大家怎么不谈谈经验???Top
30 楼xjp6688(大平/要做必须最好)回复于 2005-03-17 15:21:52 得分 0
用trim处理也不行!!!Top




