老师刁难,请提供一点思路?

ken2002p4 2003-05-26 03:40:59
老师出的任务书上是要进行多数据库联合查询和统计的,但是现在不能用数据库。要用记录文件的方式,这样如何进行联合查询和统计,请提供一点思路?
...全文
93 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
勉励前行 2003-05-27
  • 打赏
  • 举报
回复
一點都用數據庫真的很難做啊,有個用TClientDataSet的方法也算不用數據庫系統吧。
要自己寫代碼,有時候是很必要的。先不用做成可變字段的做個固定字段表的來完成作業就好了。
如:
函數:
1,設置字段,在這個簡單的系統中所有字段設成字符型的
SetFields(TClientDataSet *DataSet , TStrings *FieldNames);
2,LoadDataset1FormTxtField(TmyDataSet1 *DataSet1, char *TxtFieldName);
要求文本文件的第一行是字段名用TAB做分隔符。這兩個函數不難寫吧。從一個文本文件生成一個TClientDataSet的代碼。現成的類約500行代碼。

如果上面這步未能完成,后面的就更難做的了。
設想實現以下:SQL語句,簡單統計:
select A , sum(B) From Table1
group By A
order By A
簡單聯合:
select A , B From Table1 , Table2
where Table1.ID = Table2.ID
這次作業完成這步把結果輸出成文本文件應該就可以算了吧。如果要完成更多,只好罷工了。
1。不做語法分析器,用固定的方式,要示用戶輸入:(為簡化設計而已你要寫也可以的)
簡單統計:
please input :
1. TxtTableName :
2. Group By Fields (用逗號分隔):
3. sum Fields (用逗號分隔):
從而得到
select A , sum(C) From Table1
group By A
order By A
所需要的變量。
然後:
1.LoadDataset1FormTxtField , 生成DataSet1 ;
2.生成結果數據集DataSet2 , 包括字段: A , B , C .//這也不算很難,BCB Help中有例子
3.計算TStrings sumStrings.
for(DataSet1->First();! DataSet1->Eof ; DataSet1->Next())
{
TLocateOptions Opts ;
//group by 如果
for(int i = 0 ; sumStrings->Count ; ++i)
{
AnsiString sunFieldName = sumStrings->strings[i];
if(DataSet2->Locate(sunFieldName,DataSet1->Fields(sunFieldName)->Value,Opts);
DataSet2->Edit();
else
DataSet2->Append();
DataSet2->Fields(sunFieldName)->Value += DataSet1->Fields(sunFieldName)->Value ;
//這就完成了Group By 要完成的動作的了
}
}
4.將結果集存成文本文件。

這里是提供一個思路,當然實際系統要比這復雜得多。你要想一下你的系統在你這次作業中完成到哪一步。使用TClientDataSet是免去了寫數據集這一部份,網上也有一些實現本地數據庫的代碼,你去找找吧
yangzhenhai 2003-05-27
  • 打赏
  • 举报
回复
类列表如下:
dbdictionary 数据字典类,存放表信息,表的列信息.要紧的是要有行的数量.
dbtable 存放表数据
dbrow 存放列数据
dbindex. 存放列的排序后的指针.
主要算法,二分法查找,用于索引对象查找
快速排序法,用于生成索引对象
ken2002p4 2003-05-27
  • 打赏
  • 举报
回复
“1。定义结构; 2。将数据从文件中通通读到内存中。形成struct(class)的链表。 3。根据关键字,在struct链中寻找,统计的话可以使用一个全局变量进行计数即可。”
各位兄弟、姐妹有没有这样的例子啊
ken2002p4 2003-05-27
  • 打赏
  • 举报
回复
不能用数据库,不能用数据库技术,比如ADO!
zahuifan 2003-05-27
  • 打赏
  • 举报
回复
什么叫 “不能用数据库” ?
老师不让用么?
那样的话别说多个数据库的联合查询,就是能作出一个数据库,我都佩服你。
ken2002p4 2003-05-27
  • 打赏
  • 举报
回复
可以啊!能不能再说的详细点关于“CB有现成的以“平面”文件为数据表的功能”
南郁 2003-05-27
  • 打赏
  • 举报
回复
可以用CB吗?CB有现成的以“平面”文件为数据表的功能。所谓平面就是指文本文件。
MAX°孟兆 2003-05-27
  • 打赏
  • 举报
回复
这个问题要解决的话也不是小工程啊,你老师怎么想的了.
你找一下dbase的代码研究一下吧
ken2002p4 2003-05-27
  • 打赏
  • 举报
回复
有没有例子啊
kehl 2003-05-27
  • 打赏
  • 举报
回复
up
ken2002p4 2003-05-27
  • 打赏
  • 举报
回复
谢谢各位的帮助,结贴!给分!
loking 2003-05-26
  • 打赏
  • 举报
回复
去跟你老师求求情,比较好
ken2002p4 2003-05-26
  • 打赏
  • 举报
回复
我没有例子啊!谁有啊!救命啊!(救我一个人,就等于就一个班的人)在这我先谢谢了
qibo999 2003-05-26
  • 打赏
  • 举报
回复
先接分吧
lifejoy 2003-05-26
  • 打赏
  • 举报
回复
楼主惨了!~去找几个简的文件数据库的代码看看:)
ken2002p4 2003-05-26
  • 打赏
  • 举报
回复
不会吧?兄弟有没有简单的方法啊!或者有没有简单的例子。我的邮箱:ken2002p4@sohu.com
先谢谢了!分不够可以再加!
netsys2 2003-05-26
  • 打赏
  • 举报
回复
很麻烦,实际上是让你自己写个数据库。

数据量少就一条条记录自己查找(MEMCMP),
数据量多就得引入索引字段。

13,822

社区成员

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

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