问题一:
如何在程序中动态指定了数据类型后,生成相应的记录文件和记录文件类型?
比如我在某个编辑框中指明了记录的字段ID(整型),Name(字符型)。然后按某个按钮去生成这种类型的记录、记录文件类型、记录文件。难题在于:我觉得记录文件类型和它的字段都是在程序的最前面声明的。如何在程序执行过程中动态的实现这个效果呢?
问题二:
如何判断记录文件的类型?即:一个不清楚它包含纪录类型的记录文件(当然文件后缀可以一样),如何打开?(这个问题和上面的问题有点类似)
请各位多多指点,分不够再加。多谢!
25 个解决方案
#1
1.应该实现不了吧.我记得好像在 Delphi 深度探索(第二版)那本书后面讲的装饰者模式可以实现类似的功能.用类来组合.
2.不清楚啊..
2.不清楚啊..
#2
用数据库可以吗?根据用户的输入,动态建表。然后对它操作,最后存储。这样你的第2个问题也解决了。
#3
恩 数据库吧,好象符合你的要求。
#4
up
我也是觉得……如果用做dll的方法可以,但是只是这么想,实际操作不清楚……
我也是觉得……如果用做dll的方法可以,但是只是这么想,实际操作不清楚……
#5
up一下,是用记录文件类型。
不能用数据库。麻烦各位指点一下,分不够再加。
不能用数据库。麻烦各位指点一下,分不够再加。
#6
up
#7
用可变长记录类型不知道可不可以满足你的要求:
#8
记录文件和记录文件类型
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
#9
把所有可能字段全都考虑进去,绝对互斥的写成共用结构
,然后给各个结构加上标志,证明该字段是否有用,
当然为了节约空间,注意两个地方,一是,结构字段标志要放在一个专门的结构或数组中,存入文件的时候写在最前面,这样你每次打开就先读这个数组或结构,第二,由于各结构空间不固定,最好使用动态分配内存的方法
,然后给各个结构加上标志,证明该字段是否有用,
当然为了节约空间,注意两个地方,一是,结构字段标志要放在一个专门的结构或数组中,存入文件的时候写在最前面,这样你每次打开就先读这个数组或结构,第二,由于各结构空间不固定,最好使用动态分配内存的方法
#10
回复人: hqhhh(枫叶) ( ) 信誉:100
记录文件和记录文件类型
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
不是,记录文件是指Delphi可以操作的3种文件之一:文本/纪录/无类型文件。
记录文件由长度固定的若干条记录组成,可以很方便的对他们进行操作。
每条记录又可以包括若干个属性。比如id=1 ,name ='lee',sex='male'等。
记录文件和记录文件类型
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
不是,记录文件是指Delphi可以操作的3种文件之一:文本/纪录/无类型文件。
记录文件由长度固定的若干条记录组成,可以很方便的对他们进行操作。
每条记录又可以包括若干个属性。比如id=1 ,name ='lee',sex='male'等。
#11
To notruiyi(notruiyi):
你的大体意思我明白了,是不是不管你怎么自定义里面谁处于有用态,这个文件类型是始终不变的。所以我们
可以所有自定义格式的文件,并且判断里面那些有用?
但是还有如下问题不清楚:
1.什么是绝对互斥的共用结构?
2.如何动态分配内存?我只知道记录文件声明时要指明它的类型,string类型要指明它的宽度。但是如何在程序中动态分配呢?也就是说,刚才的方法解决了如何动态制定每条记录中的字段的问题,但字段类型动态获取我不太清楚,请详谈,谢谢。
你的大体意思我明白了,是不是不管你怎么自定义里面谁处于有用态,这个文件类型是始终不变的。所以我们
可以所有自定义格式的文件,并且判断里面那些有用?
但是还有如下问题不清楚:
1.什么是绝对互斥的共用结构?
2.如何动态分配内存?我只知道记录文件声明时要指明它的类型,string类型要指明它的宽度。但是如何在程序中动态分配呢?也就是说,刚才的方法解决了如何动态制定每条记录中的字段的问题,但字段类型动态获取我不太清楚,请详谈,谢谢。
#12
delphi我才学了一个多月,我不知道里面有没有共用体,
动态分配内存?实在不行你就做成类,用create动态创建需要的数据,
结构中的字段自动是引用类型
动态分配内存?实在不行你就做成类,用create动态创建需要的数据,
结构中的字段自动是引用类型
#13
我也只是一个月多一点。
做成类的话也需要指明类型啊,而且是动态指定类型……总之就是在程序过程中搞出一系列指定名称和类型的纪录文件来。
做成类的话也需要指明类型啊,而且是动态指定类型……总之就是在程序过程中搞出一系列指定名称和类型的纪录文件来。
#14
up
#15
up
#16
用xml存储试试看吧
#17
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;
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;
#18
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;
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;
#19
这个定义方式如果可以执行的话,应该是可以解决动态分配类型的问题的;问题是
1.你有没有试过这样分配,而且定义出这种纪录的文件类型来?
2.程序中能够动态指定出d_is_Manager并分配么?
就是说你实际是否这么做过动态分配?
原谅我问的罗索,我曾经打算用variant,觉得一准行,十拿九稳。但后来发现variant不支持纪录。
1.你有没有试过这样分配,而且定义出这种纪录的文件类型来?
2.程序中能够动态指定出d_is_Manager并分配么?
就是说你实际是否这么做过动态分配?
原谅我问的罗索,我曾经打算用variant,觉得一准行,十拿九稳。但后来发现variant不支持纪录。
#20
var person_list :file of T_person;
#21
我从object pascal语言参考手册上找到的
#22
你自己试一下,我没用过,应该可行吧,另外,d_is_manager应该是记录的一个成员吧、
你可以在集成环境里试一下,看T_person对象后面的点后面会不会出现这个 d_is_manager
你可以在集成环境里试一下,看T_person对象后面的点后面会不会出现这个 d_is_manager
#23
首先对不起各位,实在抱歉,我封闭培训了两周,两天前刚刚放出来。
notruiyi:我试了这个方法了,也查了帮助,但这个方法只能给一个变量动态赋类型(语法规定的,有且只有一个动态类型区)。如果目标就是一个记录文件中又一个动态变量的话,那这个办法堪称完美,但是它不能解决给纪录里所有类型赋动态类型的问题……又一个希望破灭了 :(
up一下,大家还有没有其他的办法啊?!谢谢各位了!
notruiyi:我试了这个方法了,也查了帮助,但这个方法只能给一个变量动态赋类型(语法规定的,有且只有一个动态类型区)。如果目标就是一个记录文件中又一个动态变量的话,那这个办法堪称完美,但是它不能解决给纪录里所有类型赋动态类型的问题……又一个希望破灭了 :(
up一下,大家还有没有其他的办法啊?!谢谢各位了!
#24
好像难度比较大,如果必须要这样做,我觉得数据结构设计的就不合理了,导致你的代码很难实现,但仅对于这个问题,方法可能不多。
#25
楼上说的是,我打算明天告诉头头,这样实现不了,我要换成数据库!实在是顶不住了!
不过也怪不得别人,我自己选的要用纪录的……
也不能怪我啊……我才学delphi俩月…… :(
不过也怪不得别人,我自己选的要用纪录的……
也不能怪我啊……我才学delphi俩月…… :(
#1
1.应该实现不了吧.我记得好像在 Delphi 深度探索(第二版)那本书后面讲的装饰者模式可以实现类似的功能.用类来组合.
2.不清楚啊..
2.不清楚啊..
#2
用数据库可以吗?根据用户的输入,动态建表。然后对它操作,最后存储。这样你的第2个问题也解决了。
#3
恩 数据库吧,好象符合你的要求。
#4
up
我也是觉得……如果用做dll的方法可以,但是只是这么想,实际操作不清楚……
我也是觉得……如果用做dll的方法可以,但是只是这么想,实际操作不清楚……
#5
up一下,是用记录文件类型。
不能用数据库。麻烦各位指点一下,分不够再加。
不能用数据库。麻烦各位指点一下,分不够再加。
#6
up
#7
用可变长记录类型不知道可不可以满足你的要求:
#8
记录文件和记录文件类型
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
#9
把所有可能字段全都考虑进去,绝对互斥的写成共用结构
,然后给各个结构加上标志,证明该字段是否有用,
当然为了节约空间,注意两个地方,一是,结构字段标志要放在一个专门的结构或数组中,存入文件的时候写在最前面,这样你每次打开就先读这个数组或结构,第二,由于各结构空间不固定,最好使用动态分配内存的方法
,然后给各个结构加上标志,证明该字段是否有用,
当然为了节约空间,注意两个地方,一是,结构字段标志要放在一个专门的结构或数组中,存入文件的时候写在最前面,这样你每次打开就先读这个数组或结构,第二,由于各结构空间不固定,最好使用动态分配内存的方法
#10
回复人: hqhhh(枫叶) ( ) 信誉:100
记录文件和记录文件类型
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
不是,记录文件是指Delphi可以操作的3种文件之一:文本/纪录/无类型文件。
记录文件由长度固定的若干条记录组成,可以很方便的对他们进行操作。
每条记录又可以包括若干个属性。比如id=1 ,name ='lee',sex='male'等。
记录文件和记录文件类型
是不是指数据表的字段名和字段类型,
请楼主说清楚一些!
不是,记录文件是指Delphi可以操作的3种文件之一:文本/纪录/无类型文件。
记录文件由长度固定的若干条记录组成,可以很方便的对他们进行操作。
每条记录又可以包括若干个属性。比如id=1 ,name ='lee',sex='male'等。
#11
To notruiyi(notruiyi):
你的大体意思我明白了,是不是不管你怎么自定义里面谁处于有用态,这个文件类型是始终不变的。所以我们
可以所有自定义格式的文件,并且判断里面那些有用?
但是还有如下问题不清楚:
1.什么是绝对互斥的共用结构?
2.如何动态分配内存?我只知道记录文件声明时要指明它的类型,string类型要指明它的宽度。但是如何在程序中动态分配呢?也就是说,刚才的方法解决了如何动态制定每条记录中的字段的问题,但字段类型动态获取我不太清楚,请详谈,谢谢。
你的大体意思我明白了,是不是不管你怎么自定义里面谁处于有用态,这个文件类型是始终不变的。所以我们
可以所有自定义格式的文件,并且判断里面那些有用?
但是还有如下问题不清楚:
1.什么是绝对互斥的共用结构?
2.如何动态分配内存?我只知道记录文件声明时要指明它的类型,string类型要指明它的宽度。但是如何在程序中动态分配呢?也就是说,刚才的方法解决了如何动态制定每条记录中的字段的问题,但字段类型动态获取我不太清楚,请详谈,谢谢。
#12
delphi我才学了一个多月,我不知道里面有没有共用体,
动态分配内存?实在不行你就做成类,用create动态创建需要的数据,
结构中的字段自动是引用类型
动态分配内存?实在不行你就做成类,用create动态创建需要的数据,
结构中的字段自动是引用类型
#13
我也只是一个月多一点。
做成类的话也需要指明类型啊,而且是动态指定类型……总之就是在程序过程中搞出一系列指定名称和类型的纪录文件来。
做成类的话也需要指明类型啊,而且是动态指定类型……总之就是在程序过程中搞出一系列指定名称和类型的纪录文件来。
#14
up
#15
up
#16
用xml存储试试看吧
#17
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;
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;
#18
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;
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;
#19
这个定义方式如果可以执行的话,应该是可以解决动态分配类型的问题的;问题是
1.你有没有试过这样分配,而且定义出这种纪录的文件类型来?
2.程序中能够动态指定出d_is_Manager并分配么?
就是说你实际是否这么做过动态分配?
原谅我问的罗索,我曾经打算用variant,觉得一准行,十拿九稳。但后来发现variant不支持纪录。
1.你有没有试过这样分配,而且定义出这种纪录的文件类型来?
2.程序中能够动态指定出d_is_Manager并分配么?
就是说你实际是否这么做过动态分配?
原谅我问的罗索,我曾经打算用variant,觉得一准行,十拿九稳。但后来发现variant不支持纪录。
#20
var person_list :file of T_person;
#21
我从object pascal语言参考手册上找到的
#22
你自己试一下,我没用过,应该可行吧,另外,d_is_manager应该是记录的一个成员吧、
你可以在集成环境里试一下,看T_person对象后面的点后面会不会出现这个 d_is_manager
你可以在集成环境里试一下,看T_person对象后面的点后面会不会出现这个 d_is_manager
#23
首先对不起各位,实在抱歉,我封闭培训了两周,两天前刚刚放出来。
notruiyi:我试了这个方法了,也查了帮助,但这个方法只能给一个变量动态赋类型(语法规定的,有且只有一个动态类型区)。如果目标就是一个记录文件中又一个动态变量的话,那这个办法堪称完美,但是它不能解决给纪录里所有类型赋动态类型的问题……又一个希望破灭了 :(
up一下,大家还有没有其他的办法啊?!谢谢各位了!
notruiyi:我试了这个方法了,也查了帮助,但这个方法只能给一个变量动态赋类型(语法规定的,有且只有一个动态类型区)。如果目标就是一个记录文件中又一个动态变量的话,那这个办法堪称完美,但是它不能解决给纪录里所有类型赋动态类型的问题……又一个希望破灭了 :(
up一下,大家还有没有其他的办法啊?!谢谢各位了!
#24
好像难度比较大,如果必须要这样做,我觉得数据结构设计的就不合理了,导致你的代码很难实现,但仅对于这个问题,方法可能不多。
#25
楼上说的是,我打算明天告诉头头,这样实现不了,我要换成数据库!实在是顶不住了!
不过也怪不得别人,我自己选的要用纪录的……
也不能怪我啊……我才学delphi俩月…… :(
不过也怪不得别人,我自己选的要用纪录的……
也不能怪我啊……我才学delphi俩月…… :(