Win32下Foxbase 資料庫瀏覽程式的編寫

2021-04-17 07:46:19 字數 2281 閱讀 8009

一、目的

硬體:cpu (cyrix 200mhz ), 記憶體16m,硬碟4g

要求:在windows98的資源管理器中滑鼠雙擊任何乙個foxbase+資料庫檔案圖示(每個檔案資料記錄在一萬條以下),程式開啟資料庫檔案並顯示資料庫內容。

二、步驟

foxbase+資料庫檔案格式(參照mark sadler的檔案格式說明和相應c語言源程式檔案)

程式設計中發生的問題:

以下是mark sadler的dbf.h檔案部分內容:

typedef unsigned char uchar;

struct field_record     /* this structure is filled in memory */

;struct dbf

status;

uchar num_fields;       /* number of fields */

/* the following 7 variables are filled with a fread, do not change order or size */

uchar dbf_version;     /* version character */

uchar update_yr;      /* date of last update - year (-1900) */

uchar update_mo;      /* date of last update - month */

uchar update_day;       /* date of last update - day */

unsigned long int records;   /* number of records in dbf */

unsigned int header_length;  /* length of header structure */

unsigned int record_length;  /* length of a record */

/*                */

struct field_record *fields_ptr; /* pointer to field array */

char *record_ptr;       /* pointer to current record struct */

};int d_addrec(struct dbf *d);

int d_blank(struct dbf *d);

int d_close(struct dbf *d);

int d_cpystr(struct dbf *s,struct dbf *d);

char d_getfld(struct dbf *d,int f,char *buff);

int d_getrec(struct dbf *d,unsigned long int r);

int d_open(struct dbf *d);

int d_putfld(struct dbf *d,int f,char *buff);

int d_putrec(struct dbf *d,unsigned long int r);

以上資料中提供的函式都提供了源程式,雖然大部分都是使用ansi c,但卻是針對dos方式下的。如更新日期:

inregs.h.ah=0x2a;

intdos(&inregs,&outregs);

d->update_day=outregs.h.dl;

d->update_mo=outregs.h.dh;

d->update_yr=outregs.x.cx-1900;

這顯然在win32下無法編譯通過。但在dos下完全可以編譯通過,並準確地讀出各條記錄資訊。

修改以上各函式,使之符合win32特點,編譯通過。

執行程式,發現無法正確顯示資料庫內容。

由於函式實現部分已經全部修改為win32可以接受的形式,沒什麼問題,只有檢查dbf.h。

dos的int與char一樣為8bit, 而win32中,int 為32bit,**allint 為8bit。

修改dbf.h檔案,將struct中所有的int 改為**allint,long int 改為int。

編譯通過,程式能正常執行。

三、總結

在win32沿用dos方式下的c程式時,要特別注意不同平台下的區別。

以上程式還可適當加強,如:讀入各項資料時應新建一線程,並增加一進度條顯示資料庫檔案讀入情況,再編寫一些函式(如find、delete等),增加一些功能,使程式更加完美。

本文是幾年前所作,希望對初學者有所幫助。

win32下C Socket程式設計

這個例子是從網上轉抄過來的,經過本人測試,沒有任何問題,想學socket程式設計的人可以看一下,非常不錯的入門程式。伺服器端 include include using namespace std const unsigned short listen port 7788 pragma commen...

win32 下使用資料庫

由於操作window下的資料庫,需要引用mfc的庫函式,所以得把mfc包含進來,如下圖中設定,以vs2008為例 use of mfc 中設定為 use mfc in a shared dll 接下來建立資料庫 cdaodatabase db 資料庫 cdaorecordset recset db ...

Win32程式設計

win32 malloc函式的底層實現是win32api utf 16編碼以16位無符號整數為單位,注意是16位為乙個單位,不是乙個字元就只有16位,這個要看字元的unicode編碼處於什麼範圍而定,有可能是2個位元組,也可能是4個位元組現在機器上的unicode編碼一般就是指utf 16 以兩個位...