最近的一个程序中需要用到如下的操作:问题一:
如何在程序中动态指定了数据类型后,生成相应的记录文件和记录文件类型?
比如我在某个编辑框中指明了记录的字段ID(整型),Name(字符型)。然后按某个按钮去生成这种类型的记录、记录文件类型、记录文件。难题在于:我觉得记录文件类型和它的字段都是在程序的最前面声明的。如何在程序执行过程中动态的实现这个效果呢?问题二:
如何判断记录文件的类型?即:一个不清楚它包含纪录类型的记录文件(当然文件后缀可以一样),如何打开?(这个问题和上面的问题有点类似)请各位多多指点,分不够再加。多谢!

解决方案 »

  1.   

    1.应该实现不了吧.我记得好像在  Delphi 深度探索(第二版)那本书后面讲的装饰者模式可以实现类似的功能.用类来组合.
    2.不清楚啊..
      

  2.   

    up
    我也是觉得……如果用做dll的方法可以,但是只是这么想,实际操作不清楚……
      

  3.   

    回复人: hqhhh(枫叶) ( ) 信誉:100  
     记录文件和记录文件类型 
     是不是指数据表的字段名和字段类型,
     请楼主说清楚一些! 不是,记录文件是指Delphi可以操作的3种文件之一:文本/纪录/无类型文件。
     记录文件由长度固定的若干条记录组成,可以很方便的对他们进行操作。
     每条记录又可以包括若干个属性。比如id=1 ,name ='lee',sex='male'等。
      

  4.   

    To  notruiyi(notruiyi):
    你的大体意思我明白了,是不是不管你怎么自定义里面谁处于有用态,这个文件类型是始终不变的。所以我们
    可以所有自定义格式的文件,并且判断里面那些有用?
    但是还有如下问题不清楚:
    1.什么是绝对互斥的共用结构?
    2.如何动态分配内存?我只知道记录文件声明时要指明它的类型,string类型要指明它的宽度。但是如何在程序中动态分配呢?也就是说,刚才的方法解决了如何动态制定每条记录中的字段的问题,但字段类型动态获取我不太清楚,请详谈,谢谢。
      

  5.   

    delphi我才学了一个多月,我不知道里面有没有共用体,
    动态分配内存?实在不行你就做成类,用create动态创建需要的数据,
    结构中的字段自动是引用类型
      

  6.   

    type
     T_person = Record d_frist_name:string;
     d_last_name:string;
     birth_date:TDate; case d_is_Manager:Boolean of
       false:d_annual_salary:double;
       true:(
             d_country:string;
             d_entry_date:TDate;
             d_Hourly_salay:double
             );
    end;
      

  7.   

    type
     T_person = Record d_frist_name:string;
     d_last_name:string;
     d_birth_date:TDate; case d_is_Manager:Boolean of
       false:(d_annual_salary:double);
       true:(
             d_country:string;
             d_entry_date:TDate;
             d_Hourly_salay:double
             );
    end;
      

  8.   

    这个定义方式如果可以执行的话,应该是可以解决动态分配类型的问题的;问题是
    1.你有没有试过这样分配,而且定义出这种纪录的文件类型来?
    2.程序中能够动态指定出d_is_Manager并分配么?
    就是说你实际是否这么做过动态分配?原谅我问的罗索,我曾经打算用variant,觉得一准行,十拿九稳。但后来发现variant不支持纪录。
      

  9.   

    var person_list :file of T_person;
      

  10.   

    我从object pascal语言参考手册上找到的
      

  11.   

    你自己试一下,我没用过,应该可行吧,另外,d_is_manager应该是记录的一个成员吧、
    你可以在集成环境里试一下,看T_person对象后面的点后面会不会出现这个 d_is_manager
      

  12.   

    首先对不起各位,实在抱歉,我封闭培训了两周,两天前刚刚放出来。notruiyi:我试了这个方法了,也查了帮助,但这个方法只能给一个变量动态赋类型(语法规定的,有且只有一个动态类型区)。如果目标就是一个记录文件中又一个动态变量的话,那这个办法堪称完美,但是它不能解决给纪录里所有类型赋动态类型的问题……又一个希望破灭了 :(up一下,大家还有没有其他的办法啊?!谢谢各位了!
      

  13.   

    楼上说的是,我打算明天告诉头头,这样实现不了,我要换成数据库!实在是顶不住了!不过也怪不得别人,我自己选的要用纪录的……
    也不能怪我啊……我才学delphi俩月……    :(