问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样打开.db的数据库文件啊

发布网友 发布时间:2022-04-22 02:57

我来回答

6个回答

热心网友 时间:2022-04-10 18:59

如果你的要求是用一种语言来打开数据库的话,那么你必须首先了解dbf文件的格式,这一点非常的重要。下面是一个c语言写的读dbf文件的小程序,你看看吧!,你可以编辑一下,看可否达到你的要求!
#include <stdlib.h>
#include <stdio.h>

#define NFIELDS 5
#define TRUE 1
#define FALSE 0

/* DBF文件头结构 */
struct dbf_head{
char vers;
unsigned char yy,mm,dd;
unsigned int no_recs;
unsigned short head_len,rec_len;
char reserved[20];
};

/* DBF字段描述结构 */
struct field_element{
char field_name[11];
char field_type;
unsigned int offset;
unsigned char field_length;
unsigned char field_decimal;
char reserved1[2];
char dbaseiv_id;
char reserved2[10];
char proction_index;
};

char *dbf_fields_name[NFIELDS]={
"a", "b","c","d","e"
};

/* 全局变量 */
struct dbf_head file_head;
struct field_element *fields;
int *length;
unsigned int *offset;

/* 整形数字节顺序改变函数 */
void revert_unsigned_short(unsigned short *a)
{
unsigned short left,right;
left=right=*a;
*a=((left&0x00ff)<<8)|((right&0xff00)>>8);
}

void revert_unsigned_int(unsigned int *a)
{
unsigned int first,second,third,forth;
first=second=third=forth=*a;
*a=((first&0x000000ff)<<24)|((second&0x0000ff00)<<8)|
((third&0x00ff0000)>>8)|((forth&0xff000000)>>24);
}

/* 主函数代码 */
void main()
{
register int i,j;
FILE *fp_dat;
char *buffer;
char *allspace;
int fields_count, matched=FALSE;
unsigned int counts;

/* 打开dbf文件 */
if((fp_dat=fopen("a.dbf","rb"))==NULL){
fprintf(stderr,"Cannot open dbf file to read!\n");
exit(1);
}

/* 读取表头纪录 */
fseek(fp_dat,0L,SEEK_SET);
fread((void*)&file_head,sizeof(struct dbf_head),1,fp_dat);
revert_unsigned_int(&file_head.no_recs);
revert_unsigned_short(&file_head.head_len);
revert_unsigned_short(&file_head.rec_len);

/* 计算字段数 */
fields_count=(file_head.head_len-sizeof(struct dbf_head)-1-263)/sizeof(struct field_element);

/* 开辟存储字段子记录的空间 */
if((fields=(struct field_element*)malloc(sizeof(struct field_element)*fields_count))==NULL){
fprintf(stderr,"Cannot allocate memory for fields array !\n");
fclose(fp_dat);
exit(2);
}

/* 开辟存储一条数据记录的空间 */
if((buffer=(char*)malloc(sizeof(char)*file_head.rec_len))==NULL){
fprintf(stderr,"Cannot allocate memory for record buffer!\n");
fclose(fp_dat);
exit(3);
}

/* 开辟一个全为空格的纪录,以便后面做比较 */
if((allspace=(char*)malloc(sizeof(char)*file_head.rec_len))==NULL){
fprintf(stderr,"Cannot allocate memory for all_space record buffer!\n");
fclose(fp_dat);
exit(4);
}
else{
memset((void*)allspace,'\x20',file_head.rec_len-1);
allspace[file_head.rec_len]='\0';
}

/* 读取所有的字段子记录,调整整形数的字节顺序 */
fread((void*)fields,sizeof(struct field_element),fields_count,fp_dat);
for(i=0;i<fields_count;i++)
revert_unsigned_int(&fields[i].offset);

/* 计算各个字段的字节偏移量,第一字节为删除标记 */
fields[0].offset=1;
for(i=1;i<fields_count;i++)
fields[i].offset=fields[i-1].offset+(unsigned short)fields[i-1].field_length;

/* 开辟存储字段长度和偏移量的数组 */
length=(int*)malloc(sizeof(int)*fields_count);
offset=(unsigned int*)malloc(sizeof(unsigned int)*fields_count);
if(length==NULL||offset==NULL){
fprintf(stderr,"Cannot allocate memory for array length or offset.\n");
exit(-1);
}

/* 找到所需字段的偏移量和长度,如果没有相应字段,程序退出 */
for(i=0;i<NFIELDS;i++)
{
for(j=0;j<fields_count;j++)
{
if(strcmp(dbf_fields_name[i],fields[j].field_name)==0)
{
offset[i]=fields[j].offset - 1;
length[i]=fields[j].field_length;
matched=TRUE;
break;
}
if(!matched){
fprintf(stderr,"dbf file structure is invalid, field %s not found.\n", dbf_fields_name[i]);
exit(-1);
}
else
matched=FALSE;
}
}

/* 定位文件指针到数据记录的开始位置 */
fseek(fp_dat,(long)file_head.head_len,SEEK_SET);

/* 读取每条记录的字段数据 */
for(counts=0;counts<file_head.no_recs;counts++)
{
/* 如果有删除标记,跳到下一条记录 */
if(fgetc(fp_dat)==(int)'\x2a')
{
fseek(fp_dat,(int)file_head.rec_len-1,SEEK_CUR);
continue;
}
fread((void*)buffer,(int)file_head.rec_len-1,1,fp_dat);
buffer[file_head.rec_len]='\0';

/*去掉全为空格的记录行*/
if(strcmp(buffer,allspace)==0)
continue;
}

fclose(fp_dat);

/* 释放开辟的空间 */
free(buffer);
free(allspace);
free(offset);
free(length);
}

热心网友 时间:2022-04-10 20:17

这是数据库数据存放文件。每种软件都有它自己的存放格式,就是数据的排列方式。后缀名均为DB。
delphi
、VB、VC等等编程类软件都可以打开的。但显示的数据方式不一定一样。
手上没有这些软件的话,试试office里的access。
有些专用软件DB数据是加密不公开的,普通方式还无法打开。
你是不是想看看QQ目录中的QQglobal.db文件里有什么?那里面没啥东西的
跟他的聊天室、搜索、短信等功能有相关。所以是加密的。又没什么特别文件。普通的编程工具无法读取的。使用winhex和UE等可基本判断内容。
另外提醒,乱动数据库文件会使你已经正常使用软件可能发生故障。

热心网友 时间:2022-04-10 21:52

这是数据库数据存放文件。每种软件都有它自己的存放格式,就是数据的排列方式。后缀名均为DB。delphi 、VB、VC等等编程类软件都可以打开的。但显示的数据方式不一定一样。 手上没有这些软件的话,试试office里的access。有些专用软件DB数据是加密不公开的,普通方式还无法打开。另外提醒,乱动数据库文件会使你已经正常使用软件可能发生故障。

热心网友 时间:2022-04-10 23:43

如果有SQL2000 可以使用SQL数据库还原方法
先随便建立一个数据库
把数据库文件作为一种备份文件来打开

首先登录到远程数据库服务器:
1. 打开SQL Server企业管理器,选择要还原的数据库,单击鼠标右键,单击“所有任务”下的“还原数据库”。
2. 在新弹出的窗口下的“还原”项选择“从设备”单选框,再单击下面的“选择设备”按钮。
3. 在新弹出的“选择还原设备”窗口选择“磁盘”再单击“添加”按钮,选择要还原的备份文件。
4. 确定所有的设置,系统就会将你的数据库进行还原。

热心网友 时间:2022-04-11 01:51

不知道楼主到底是什么意思,db数据库文件分vf表文件和access表文件,vf表文件的扩展名是.dbf,access表文件的扩展名是.mdb,不同的数据库文件需要用相应的软件打开。另外,楼主如果是要破解qq的数据库文件,那我看你是还是免了吧,如果这个都能破解,腾讯就别活了

热心网友 时间:2022-04-11 04:16

你用FOXPRO试试
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 火车票到达时间后面+1是什么意思 db格式文件怎么打开 火车时刻表上写+1是什么意思 后缀为.db的文件怎么打开阅读 火车票中的‘加1车’是什么意思?车厢在哪儿? 如何打开加密过的*db数据库文件?(知道密码) 请问火车票这个后面+1或者+2是什么意思(红数字) db格式的文件怎样在电脑上打开 火车票+1什么意思 db文件是什么格式 如何打开 火车票加1车什么意思 火车票座位号中“加1车”是什么意思? 网上买火车票上面显示的到达时间后面加了一个1天是... 火车票到达时间后面+1是什么意思? 请问火车票这个后面+1或者+2是什么意思(红数字)? 存款保险制度的含义及其所存在的问题 管理层凌驾于内部控制之上的风险是什么意思 名词解释:风险负担 期货中的“交易头寸限制制度”指是什么意思? 2019年中级经济师《中级金融》考试大纲 在去哪儿网查的火车票有个+1是什么意思 db格式的数据库文件怎么打开? 火车票后面的(+1天)是什么意思? db数据库文件怎么打开 网上买火车票括号里加1什么意思 如何打开db数据库文件 支付宝购买火车票加1是什么意思 后缀是.db的文件是什么文件 智行火车票上面购买火车票,后面有一个+1什么意思 安卓手机怎么打开db文件? 网上买火车票点数后面加1是什么意思? (*.db)格式的数据库文件怎么打开? 火车车票上有加1车这是什么意思? 手机上的db文件怎么才能打开 如何直接打开Database File数据库文件 DB数据库文件用什么软件可以打开 怎么打开数据库文件 *.db 是一个怎样的数据库文件?怎样才能打开并编辑它 华为手机热点怎么开让别人连接 华为热点怎么开让别人连接