同时查询多个数据库问题?

luckhj 2004-08-21 04:12:21
比如我设定条件,在2004-7-1 到 2004-8-1之间,也就是以日期作为搜索条件,然后从多个已经存在的数

据库(如"dfc0002SM.DB , ps0011SM.DB , nt001SM.DB , ort001SM.DB , gggSM.DB"等等N个数据库),就

是从很多,N个数据库中查询符合2004-7-1 到 2004-8-1之间的数据库,并从这N个数据库中搜索显示它们

在2004-7-1 到 2004-8-1之间的测量值("dfc0002SM.DB , ps0011SM.DB ,nt001SM.DB ,ort001SM.DB ,

gggSM.DB"等等N个 数据库中都有这个测量值).实现这个的目的,就是不想在几个月后,手动去寻找要找

的值(那样很难找的),想通过SQL语句把它们搜索出来.

如何同时搜索查询N个数据库,谁能告诉我???
...全文
245 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckhj 2004-08-25
  • 打赏
  • 举报
回复
我安装的时候选择的是FULL,可以没有ADO啊
guanshangming 2004-08-25
  • 打赏
  • 举报
回复
不对啊,BC5企业版也有ADO
luckhj 2004-08-25
  • 打赏
  • 举报
回复
是啊,多谢你,我的是BCB5不是BCB6
guanshangming 2004-08-25
  • 打赏
  • 举报
回复
可以楼主对BC不太熟悉,是不是也应该找些BC的书籍看看.
guanshangming 2004-08-25
  • 打赏
  • 举报
回复
你的测量值是指什么,是字段吧?

在Paradox 7支持的SQL查询有限,太复杂的复合SQL语句可能不支持。所以你如果要把上面的查询结果输出到另一个表,可以新建一个空表,字段与上面查询的结果字段集设置成一样。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String sDate1 = DateTimePicker1->Date.DateString()+DateTimePicker2->Time.TimeString();
String sDate2 = DateTimePicker3->Date.DateString()+DateTimePicker4->Time.TimeString();
String sTmp = "select 字段名1 from 'c:\\dfc0002SM.DB' where 日期字段 BETWEEN '"+sDate1"' AND '"+sData2+"' "+
"union all "+
"select 字段名1 from 'c:\\ps0011SM.DB' where 日期字段 BETWEEN '"+sDate1"' AND '"+sData2+"' "+
"union all "+
"select 字段名1 from 'c:\\nt001SM.DB' where 日期字段 BETWEEN '"+sDate1"' AND '"+sData2+"' "+
"union all "+
"select 字段名1 from 'c:\\ort001SM.DB' where 日期字段 BETWEEN '"+sDate1"' AND '"+sData2+"' "+
"union all "+
"select 字段名1 from 'c:\\gggSM.DB' where 日期字段 BETWEEN '"+sDate1"' AND '"+sData2+"'";

Query1->Close();
Query1->ParamCheck = false; //设置为不检查参数,否则,踫到冒号字符如22:00如提示非法参数
Query1->SQL->Text = sTmp;
Query1->Open();
Table1->TableName = "c:\\Output.db"; //这个Output是你要输出的表名
Table1->EmptyTable(); //清空Output的所有记录
Table1->Open();
while(!Query1->Eof)
{
Table1->Append();
for(int i=0;i<Query1->FieldDefs->Count;i++)
{
Table1->Fields->Fields[i]->AsVariant=Query1->Fields->Fields[i]->AsVariant;
}
Table1->Post();
Query1->Next();
}
Table1->Close();
Query1->Close();
}
//---------------------------------------------------------------------------
luckhj 2004-08-24
  • 打赏
  • 举报
回复
TO: guanshangming()

多谢你,那2004-7-1 到 2004-8-1的时间限制怎么和这些数据库联系起来,另外
select FieldName1,FieldName2 from 'c:\\dfc0002SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\ps0011SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\nt001SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\ort001SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\gggSM.DB '
需不需要加在Query控件的SQL里面???
只是找1个测量值,是不是只需要FieldName1,不需要FieldName2 ?

另外,有多少专家分,才能有5个三角形?
等问题解决以后,我会再送你100分.
luckhj 2004-08-24
  • 打赏
  • 举报
回复
呵呵,我都快不好意思问了,不过还要再问一句

我搜索到的多个测量值,也应该就是你上面的sTmp(sTmp能不能代表多个测量值,因为我搜索的

不会只有1个测量值),我想把搜索到的测量值输出到一张表上,这张表我是不是要另外做一个数

据库来存放(如果不是,这个表要怎么做?)?那Query1->SQL-> 语句要怎么写?怎么用SQL语句控制测量值输出到表上?

再则,我的时间(时间是可以调整的,7-1到8-1,也可以是7-2到7-22)是用DateTimePicker1(日期7-1)和DateTimePicker2(时间19:17:21)到DateTimePicker3(日期8-1)和DateTimePicker4(时间22:11:14)这4个控件放在FORM上表示的,

是不是要String sTmp = "select 字段名1 from 'c:\\dfc0002SM.DB' where 日期字段 BETWEEN '7/1/2004' AND '8/1/2004'

成String sTmp = "select 测量值 from 'c:\\dfc0002SM.DB' where 日期字段

BETWEEN 'DateTimePicker1 , DateTimePicker2' AND 'DateTimePicker3 ,DateTimePicker4'
(不知道这样写对不对)
?
本来说1句,结果说了这么多,呵呵!

我给你分的帖子,我可以把这个帖子粘贴过去,别人看到就不会说你到分了,呵呵


guanshangming 2004-08-24
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//2004-7-1 到 2004-8-1
String sTmp = "select 字段名1 from 'c:\\dfc0002SM.DB' where 日期字段 BETWEEN '7/1/2004' AND '8/1/2004' "+
"union all "+
"select 字段名1 from 'c:\\ps0011SM.DB' where 日期字段 BETWEEN '7/1/2004' AND '8/1/2004' "+
"union all "+
"select 字段名1 from 'c:\\nt001SM.DB' where 日期字段 BETWEEN '7/1/2004' AND '8/1/2004' "+
"union all "+
"select 字段名1 from 'c:\\ort001SM.DB' where 日期字段 BETWEEN '7/1/2004' AND '8/1/2004' "+
"union all "+
"select 字段名1 from 'c:\\gggSM.DB' where 日期字段 BETWEEN '7/1/2004' AND '8/1/2004' ";

Query1->Close();
Query1->SQL->Text = sTmp;
Query1->Open();
}
//---------------------------------------------------------------------------

在Paradox 7里这样写。同样,上面的字段名要替换到你实际的字段名。

2000~5000之间专家分就是5个三角了。

另加100分就不用了。搞不好,别人还以为我倒分,呵呵。
luckhj 2004-08-24
  • 打赏
  • 举报
回复
上面的问题还没答啊
guanshangming 2004-08-24
  • 打赏
  • 举报
回复
不可以,数据库引挚没有这么模糊的打开方法。

像这些问题,你自己一试就知。
luckhj 2004-08-24
  • 打赏
  • 举报
回复
再问一下:
对于dfc0002SM.DB , ps0011SM.DB , nt001SM.DB , ort001SM.DB , gggSM.DB
我可不可以这样:
select FieldName1,FieldName2 from 'c:\\*SM.DB '
因为它们都有SM , 能不能就用c:\\*SM.DB 这1个式子来搜索所有的dfc0002SM.DB , ps0011SM.DB , nt001SM.DB , ort001SM.DB , gggSM.DB 这些数据库?
guanshangming 2004-08-24
  • 打赏
  • 举报
回复
应该是
select FieldName1,FieldName2 from 'c:\\dfc0002SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\ps0011SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\nt001SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\ort001SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\gggSM.DB '

上面FieldName1,FieldName2应该换为你实际的字段名,注意,下面的查询的FieldName1,FieldName2应该是最开始的查询类型一致。
cchao 2004-08-23
  • 打赏
  • 举报
回复
是啊是啊
呵呵
luckhj 2004-08-23
  • 打赏
  • 举报
回复
可是,我要同时查询这些表啊,难道是这样:
select FieldName1,FieldName2 from 'c:\\dfc0002SM.DB '
union all
select FieldName1,FieldName2 from 'c:\\ps0011SM.DB '
select FieldName1,FieldName2 from 'c:\\nt001SM.DB '
select FieldName1,FieldName2 from 'c:\\ort001SM.DB '
select FieldName1,FieldName2 from 'c:\\gggSM.DB '


???

guanshangming 2004-08-22
  • 打赏
  • 举报
回复
第一、你的表是否Paradox 7的表或DBase的表。是的话

'c:\\Table1.db' A 代表指C盘的Table1表,并起为别名A,以方便下面的操作,你可以用
dfc0002SM.DB , ps0011SM.DB , nt001SM.DB , ort001SM.DB , gggSM.DB等任一个表名代替Table1.

A.FieldName3>100 and B.FieldName3>150 意思是上面别名为A(即我写的Table1)的表内的字段名为FieldName3的值大于100并且别名为B(即Table2)的字段FieldName3值大于150
luckhj 2004-08-22
  • 打赏
  • 举报
回复
"dfc0002SM.DB , ps0011SM.DB , nt001SM.DB , ort001SM.DB , gggSM.DB"

select FieldName1,FieldName2 from 'c:\\Table1.db' A
union all
select FieldName1,FieldName2 from 'c:\\Table2.db' B
where A.FieldName3>100 and B.FieldName3>150
有什么联系?
DBase和Paradox有什么区别?

'c:\\Table1.db' A 代表什么?
A.FieldName3>100 and B.FieldName3>150 这个条件又是什么意思?
不好意思,我刚学C++ Builder5
guanshangming 2004-08-22
  • 打赏
  • 举报
回复
其实也就是联合查询的问题。
guanshangming 2004-08-22
  • 打赏
  • 举报
回复
你的DB是不是Paradox 7的数据表?,可以这样试试
select FieldName1,FieldName2 from 'c:\\Table1.db' A
union all
select FieldName1,FieldName2 from 'c:\\Table2.db' B
where A.FieldName3>100 and B.FieldName3>150
luckhj 2004-08-22
  • 打赏
  • 举报
回复
我的问题主要是查询多个数据库的SQL语句应该怎么写?

再有,你说的将查询的结果存入该数据库的语句应该怎么写?
c2y 2004-08-22
  • 打赏
  • 举报
回复
比较简单的办法是新建一个查询结果数据库,将查询的结果存入该数据库,然后再显示。

1,178

社区成员

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

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