数据库表的字段如何有选择的导出?

中骑士 2003-08-29 09:27:25
常看到好多数据库应用软件有这样一个功能:在导出向导中,让用户选择需要的字段然后导出为文本文件(即用复选框CheckBox->Checked是否等于true)),我想知道程序算法步骤,是怎样实现的?
我想问的是:
我用
fprintf(fp,"%4s%20s%8s%2s",字段1,字段2,字段3,字段4);//估且这样写吧
语句写入到文本文件中。我想问的是,如果字段3没被选中,如何把“%8s”这个字符串和后边的“字段3,”字样去掉?或者字段2也没选中?或者字段1和4都没选中?千万别对我说,直接删掉不就行了?因为编译好的程序已经发布出去了,可没法让你改了。况且情况很多,没法写明各种是否选中的情况:比如假设有3个字段,那么用户就有数十种选择:选中1个字段,选中2个字段,3个字段,4个字段;而且选中1个字段时,就有选中字段1,选中字段2,选中字段2,选中字段3,选中字段4四种情况。
---------------------
唉哟累死我了,各位看着也累吧?
这是个技术问题,谁慷慨助我,我是不会吝啬分数的。(而且200分是给一个人的,绝不散分!)
不过没解决这前,我是不会结帖的。
-------------------------------
帖子最多给100分,所以我开了两个帖,解决后我会让他在另一帖里也露一小脸,我好再给分。这样就达到了给200分的目的!
...全文
210 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
中骑士 2003-08-29
  • 打赏
  • 举报
回复
这么复杂?看不懂看不懂看不懂看不懂,放弃!!!!!!!!!!
问题没解决,
wawxj 2003-08-29
  • 打赏
  • 举报
回复
对不起,刚才的回复没有考虑到导入。当考虑到导入时,在组成卖出数据时加上你字段中不可能出现的字符(如ASCII码255)作分隔,在导入时以该字符作分隔(用strtok函数)进行循环处理就可以了。
wawxj 2003-08-29
  • 打赏
  • 举报
回复
全是字符那就好办多了。
先提供一张表,让用户选择需要导出的字段,然后就可以得到一个字段列表。假设用户要导出COL1、COL3、COL5,那么写一个过程可以得出select语句的字段列表为“col1,col3,col5”,组织一下就可以得到:
select ''''||col1_name||''''||col2_name||''''||col3_name||'''' as sjdc from dual
union
 select ''''||col1||''''||col2||''''||col3||'''' from tablename [where condition]
打开后依次写文件即可。

  上述代码关键在于动态,col1是数据库中的实际字段,而col1_name是它的字段名描述(必须是字符型),就是实现文件的第一行---导出字段的描述信息。
wawxj 2003-08-29
  • 打赏
  • 举报
回复
老大,我不懂Paradox,我可以用Oracle的语法说吗?
中骑士 2003-08-29
  • 打赏
  • 举报
回复
to:海原
1。不要说地太复杂了,我看不懂哇,其实我只有一个表,表中全部是字符串型的字段(我用Bcb的Database Desktop建立,是Paradox7数据库,字段类型全是Alpha),能否针对性的答答?
2。不采用Printf,“以查询的方式写到文件中”?怎么以查询的方式写到文件中?能介绍一下吗?
---------看来需要散分的!-------
wawxj 2003-08-29
  • 打赏
  • 举报
回复
另外:建议你不要采用printf等方式(尽管我的说明是针对它们),可以在后台把要导出的数据组织好,然后以查询的方式写到文件中。
wawxj 2003-08-29
  • 打赏
  • 举报
回复
对了,忘了说了:
  当用户选择需要导出的字段的同时,也就得到了选择要导出数据的Select语句--想想,如果我要从数据库中导出A、B、C三个字段,我是不是需要从库中查出它们???
wawxj 2003-08-29
  • 打赏
  • 举报
回复
我觉得能否采用这种方式:
  首先建立一个系统字典(最小包括表、字段,而这是每个系统都会做到的),在字典中包括表名、表号、字段明细(明细包括类型、大小、是否允许NULL等)---当然最好采用主从表方式,然后对用户选择再建立一张表,包括:用户编号或其它唯一性标识符(避免并发操作可能导致的异常)、字段名或字段编号、要导出的表号、是否导出,然后提供界面让用户选择(实际上只是一个简单的选择“是否”的过程),再对这张表被选择的记录(实际也就得到用户选择的要导出的字段)进行解析:
  如果字段是char型、varchar型(MS SQL SERVER)或varchar2型(Oracle)等字段型,那么根据字段的长度(在系统字典中)可以得到如“%6s”或“%20s”的描述;
  如果字段是数字型,则更可以采用“%f"等格式了;
  如果字段是日期型,我觉得根据所用的具体DBMS来处理要好些:如Oracle,对日期采用“to_date(字段值,'日期值格式')”进行转换要稳当一些,而对SQL Server则可以直接给出“yyyy-mm-dd”格式的值;
  对NULL值的处理,可以判断若值为NULL,则直接给出NULL,否则就进行转换;
  另外需要注意的是:在这种情况下,最好是在导出文件本身或相关描述中加上一行----导出的是哪些字段,这些字段的顺序是什么等。

如果你用的是Oracle或SQL Server,我可以向你提供类似的源代码。
中骑士 2003-08-29
  • 打赏
  • 举报
回复
我的思路绝对行不通!
我是想让大家看懂我的意思,好来教我!我是抛砖引玉。
谁有好的算法?
gdyt007 2003-08-29
  • 打赏
  • 举报
回复
我不赞成你的思路!
gdyt007 2003-08-29
  • 打赏
  • 举报
回复
查询唆选出来后再操作!

1,178

社区成员

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

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