hur.cn - 华软网

 热门搜索

PB怎么根据表结构创建DBF文件?

  作者:未知    来源:网络    更新时间:2019/4/16
我想向K3导入外部数据,从K3能够导出DBF资料,我怎么获得它的表结构和创建一个新的DBF资料,并把数据窗口的数据写入新的DBF资料里
------华软网友回答------
saveas
------华软网友回复------
saveas()
------华软网友回复------
如果是从DBF里面猎取结构:

INTEGER Li_Rtn
LONG    Ll_FileLen //资料长度 
LONG    Ll_ReadLen //读取长度
BLOB    Lb_File
LONG    i , j , k

//如果猎取资料犯错,前往。
Li_Rtn = GetFileOpenName("Select File" , Is_PathName , Is_FileName , "DBF" , "DBF Files (*.DBF),*.DBF")
IF Li_Rtn <> 1 THEN
RETURN
END IF

//如果资料长度为0,前往。
Ll_FileLen = FileLength(Is_PathName)
IF Ll_FileLen < 1 THEN
MessageBox("系统提醒!" , "资料长度为 0 !")
RETURN
END IF

//如果资料不是DBF资料,前往
IF Right(LOWER(Is_PathName) , 3) <> "dbf" THEN
MessageBox("系统提醒!" , "不是DBF资料!")
RETURN
END IF

//打开资料
Li_Rtn = FileOpen(Is_PathName , StreamMode! , Read! , LockRead!)
IF Li_Rtn = -1 OR IsNull(Li_Rtn) = TRUE THEN
MessageBox("系统提醒!" , "打开资料 " + Is_PathName + " 犯错,请先关闭该资料!")
RETURN
END IF

//将数组置空
FOR i = 1 TO UpperBound(Is_Name)
    Is_Name[i]     = ""
    Is_CType[i]    = ""
    Is_Width[i]    = ""
    Is_CDecimal[i] = ""  
END FOR

//猎取字段名称和类型并放入数组中,网友在运用时能够直接将其放到DW中。
Ll_ReadLen = FileRead(Li_Rtn , Lb_File)
k = 0
FOR i = 33 TO Ll_ReadLen STEP 32
    j = ASC(STRING(BLOBMID(Lb_File , i , 1)))
 IF j = 13 THEN  //32*i + 1 ,13 = 0D,是DBF资料字段定义的结束标志。
    Ii_FieldsTot = k
    EXIT
 END IF
 k = k + 1
 Is_Name[k]  = TRIM(STRING(BLOBMID(Lb_File , i  , 11)))         //32*i + 1 ,该位置起头为字段名称。
 Is_CType[k] = UPPER(TRIM(STRING(BLOBMID(Lb_File , i+11 , 1)))) //32*i + 11,该位置起头为字段类型,注意'C'和'M',有两种,要判断。
 //判断类型(Character、Numeric、Float、Double)以猎取width , decimal
 CHOOSE CASE Is_CType[k]
           CASE "C"
    IF UPPER(TRIM(STRING(BLOBMID(Lb_File , i+12 , 1)))) = "L" THEN
                Is_CType[k]    = "Character(binary)"
       Is_Width[k]    = STRING(ASC(STRING(BLOBMID(Lb_File , i+16 , 1))))
    Is_CDecimal[k] = ""
 ELSE
                Is_CType[k]    = "Character"
       Is_Width[k]    = STRING(ASC(STRING(BLOBMID(Lb_File , i+16 , 1))))
    Is_CDecimal[k] = ""
 END IF
           CASE "Y"
             Is_CType[k]    = "Currency"
    Is_Width[k]    = ""
 Is_CDecimal[k] = ""
           CASE "N"
             Is_CType[k]    = "Numeric"
    Is_Width[k]    = STRING(ASC(STRING(BLOBMID(Lb_File , i+16 , 1))))  //32*i + 16 ,该位置起头为字段长度。
 Is_CDecimal[k] = STRING(ASC(STRING(BLOBMID(Lb_File , i+17 , 1))))  //32*i + 17 ,该位置起头为字段小数位数。
           CASE "F"
             Is_CType[k]    = "Float"
    Is_Width[k]    = STRING(ASC(STRING(BLOBMID(Lb_File , i+16 , 1))))
 Is_CDecimal[k] = STRING(ASC(STRING(BLOBMID(Lb_File , i+17 , 1))))
           CASE "D"
             Is_CType[k]    = "Date"
    Is_Width[k]    = ""
 Is_CDecimal[k] = ""
           CASE "T"
             Is_CType[k]    = "DateTime"
    Is_Width[k]    = ""
 Is_CDecimal[k] = ""
           CASE "B"
             Is_CType[k]    = "Double"
    Is_Width[k]    = STRING(ASC(STRING(BLOBMID(Lb_File , i+16 , 1))))
 Is_CDecimal[k] = STRING(ASC(STRING(BLOBMID(Lb_File , i+17 , 1))))
           CASE "I"
             Is_CType[k]    = "Integer"
    Is_Width[k]    = ""
 Is_CDecimal[k] = ""
           CASE "L"
             Is_CType[k]    = "Logical"
    Is_Width[k]    = ""
 Is_CDecimal[k] = ""
           CASE "M"
    IF UPPER(TRIM(STRING(BLOBMID(Lb_File , i+12 , 1)))) = "D" THEN
                Is_CType[k]    = "Memo"
       Is_Width[k]    = ""
    Is_CDecimal[k] = ""
 ELSE
                Is_CType[k]    = "Memo(binary)"
       Is_Width[k]    = ""
    Is_CDecimal[k] = ""
 END IF
           CASE "G"
             Is_CType[k]    = "General"
    Is_Width[k]    = ""
 Is_CDecimal[k] = ""
           CASE ELSE
    MESSAGEBOX("系统提醒!" , "数据类型毛病!")
 RETURN
    END CHOOSE
END FOR
FileClose(Li_Rtn)

IF UpperBound(Is_Name) < 1 THEN
   MESSAGEBOX("系统提醒!" , "资料 " + Is_PathName + " 字段有错!")
RETURN
END IF

ddlb_1.Reset()
ddlb_2.Reset()
FOR i = 1 TO Ii_FieldsTot
 ddlb_1.AddItem(Is_Name[i])
 ddlb_2.AddItem(Is_Name[i])
END FOR
ddlb_1.SelectItem(1)

sle_1.Text = Is_PathName


------华软网友回复------
GZ

------华软网友回复------
学习
------华软网友回复------
学习      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。