DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: kailan_2022
今日帖子: 7
在线用户: 2
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 huo_v_wu (勇敢的螳螂) ★☆☆☆☆ -
盒子活跃会员
2022/6/22 22:43:48
标题:
关于生成DBF表的字段太长的问题 浏览:435
加入我的收藏
楼主: 我现在需要用程序生成一个dbf的表,但这个表有120个字段,我发现只要到了40个字典,就会报错delphi record size is too big for table table dose not exist
请问下这个问题该如何解决?
function DataExports(NZYH: string; NDataset: tadodataset): Boolean; //雕龙病案首页医保导出
var

  NConStr: string;
  NPath: string;
  NStr: string;
  BaseName: string;
  TableName: string;
  table: Ttable;
begin
  try
    table := TTable.Create(nil);
    table.Close;
    table.Active := false;
    table.Exclusive := true;
    table.TableName := NZYH;
    table.TableType := ttFOXPRO;
    with table.FieldDefs do
    begin
      Clear;
      with AddFieldDef do
      begin
        Name := 'USERID_';
        DataType := ftString;
        Size := 60;
      end;

      with AddFieldDef do
      begin
        Name := 'USERNAME';
        DataType := ftString;
        Size := 60;
      end;
.........
创建的字段超过40个就会报错
----------------------------------------------
-敢于学习,谦虚学习,鼓励批评!!
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
注册会员
2022/6/22 23:01:16
1楼: Table main = MyTableMainWith120Fields

MyTableMainWith120Fields ... MainFieldID = the main field

Solution: Divide in sub-tables and use "Master-Details" technic!

Tables
MyTableMainWith120Fields ... < 40  fields
...Field: MainFieldID
...

SubTable001 ... <40 fields
...Field: Sub001FieldID  
...Field: MainFieldID  >  the relationship Master-Details
...

SubTable002 ... <40 fields
...Field: Sub001FieldID  
...Field: MainFieldID  >  the relationship Master-Details
...

etc....
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!
作者:
男 huo_v_wu (勇敢的螳螂) ★☆☆☆☆ -
盒子活跃会员
2022/6/23 9:08:36
2楼: 没看懂这是什么意思
----------------------------------------------
-敢于学习,谦虚学习,鼓励批评!!
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
注册会员
2022/6/23 13:43:31
3楼: 我已经在其他时间回复了你的帖子!
DBF 文件具有您不能超过的技术限制!

DBase 4 (DBF 4) 每个表最多可以有 255 个字段。
如果您无法创建这 255 个字段,那么您可能做错了什么:

例如:
-- 每条记录的所有字段加起来超过 4,000 字节!


https://www.dbase.com/Knowledgebase/faq/dBASE_Limits_FAQ.html


DBASE Limits

Description
Open dBASE tables per system (16 Bit) = 256 tables-files
Open dBASE tables per system (BDE 3.0 - 4.0, 32 Bit) = 350 tables-files
Open dBASE tables per system (BDE 4.01, 32 Bit) = 512 tables-files
Record locks on one dBASE table (16 and 32 Bit) = 100 records
Records in transactions on a dBASE table (32 Bit) = 100 transactions
Records in a table = 1 Billion  = 1.000.000.000
Bytes in .DBF (Table) file = 2 Billion = 2.000.000.000
Size in bytes per record (dBASE 4) = 4.000
Size in bytes per record (dBASE for Windows) = 32.767
----------
Number of fields per table (dBASE 4) = 255 fields
Number of fields per table (dBASE for Windows) = 1024 fields
----------
Number of index tags per .MDX file = 47
Size of character fields = 254 chars
Open master indexes (.MDX) per table = 10
Key expression length in characters = 220 chars

----------
如果您愿意,可以使用“主 - 详细信息”技术创建表

在哪里:
Master = 将是具有主要字段的表,以与“详细信息”表建立关系

Details = 将是包含其余记录数据的表。

例如:

主表:PERSON = 人
idPerson = integer   == 29     <---- 
Name = 30 characters == Huo V Wu


明细表:PERSON_DOCS = 人员文件
id = integer  1
idPerson = integer   == 29   .....  table "PERSON"  <----
Driver_Card = string == 123.456.789-0
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!
作者:
男 huo_v_wu (勇敢的螳螂) ★☆☆☆☆ -
盒子活跃会员
2022/6/23 16:37:03
4楼: 只能允许一个表 一共有109个字段 导出格式需要是dbf 我该怎么处理 谢谢老师
----------------------------------------------
-敢于学习,谦虚学习,鼓励批评!!
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/6/23 21:25:56
5楼: 3楼都说了:
【DBase 4 (DBF 4) 每个表最多可以有 255 个字段。
如果您无法创建这 255 个字段,那么您可能做错了什么:

例如:
-- 每条记录的所有字段加起来超过 4,000 字节!】


这也是之前我在你的另外一个帖子里面说的,字段大小的问题。
----------------------------------------------
-
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
注册会员
2022/6/23 22:17:59
6楼: @huo_v_wu

Upload a "zip" with your code complete for analise!
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!
作者:
男 huo_v_wu (勇敢的螳螂) ★☆☆☆☆ -
盒子活跃会员
2022/6/24 13:16:17
7楼: 目前只有109个字段 为什么还是报错呢?
----------------------------------------------
-敢于学习,谦虚学习,鼓励批评!!
作者:
男 lsu (lsu) ★☆☆☆☆ -
普通会员
2022/6/24 13:56:24
8楼: 好像总的记录累计长度也不能超过多长,N多年不用了记不清楚了。

https://sourceforge.net/projects/tdbf/files/TDbf%20Win32_Linux/TDbf%207.0.1/tdbf701.zip/download

https://sourceforge.net/projects/tdbf/files/TDbf%20documentation/TDbf%20documentation%201.1/tdbf.pdf/download

https://github.com/lynxnake/tDBF

https://github.com/fatehsetif/TDBF-For-Delphi-10.3-Rio



比系统自带的更好用。

网上也有很多人的修改版,做了很多扩充,支持更多字段,更长数据。当然就不符合DBF官方标准定义,但是更方便,自己程序中使用不与其它应用互通是没问题的。

这么多字段是不是没有做好主从表。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行35.15625毫秒 RSS