当前位置:首页 » 数据仓库 » c压缩access数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c压缩access数据库

发布时间: 2023-05-25 19:13:22

‘壹’ C#开发中如何将sql数据库中的表导入到access数据库还有access数据库如何通过代码来压缩和解压

C#读取 SQL Server 数绝闷闷据库表的例子
http://hi..com/wangqing999/blog/item/b79ea1a9c2775f064a36d672.html

C# 写入 Access 数据库表的并弯罩昌例子
http://hi..com/wangqing999/blog/item/4c69018b16e830f5513d92e7.html

‘贰’ C# 如何实现Access数据库文件(.accdb)的压缩和修复拜托各位大神

C#压缩Access数据库 1、 /// <summary> /// connectionString 数据库连接字符串孝锋饥 /// mdwfilename 数据库绝对巧返路径+数据库名 /// </summary> /// <param name="connectionString"></param> /// <param name="mdwfilename"></param> static void CompactAccessDB(string connectionString, string mdwfilename) { object[] oParams; object objJRO = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine")); oParams = new object[] {connectionString, "Provider=Microsoft.Jet.OLEDB.4.0;Data;Source=C:\\temp.mdb;Jet OLEDB:Engine Type=5"}; objJRO.GetType().InvokeMember("CompactDatabase",System.Reflection.BindingFlags.InvokeMethod, null,objJRO,oParams); System.IO.File.Delete(mdwfilename); System.IO.File.Move("C:\\temp.mdb", mdwfilename); System.Runtime.InteropServices.Marshal.ReleaseComObject(objJRO); objJRO = null; } 2./// JetEngine x = new JetEngine(); x.CompactDatabase(connectstring, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp.mdb;Jet OLEDB:Engine Type=5;User ID=Admin;Password=;");//第二个参数是用来存放压缩后数据库的 System.IO.File.Delete(mdbfilename); System.IO.File.Move("C:\\temp.mdb", mdbfilename); /// 两种方法,第一种比较难理解,第二种添加dll,简单易用。我在程序中用的第一 种方法,避免了添加dll但是需要从数据库连接字符串里解析出mdwfilename。此 外,在调用上述方法前都得先关闭数据库连接,因为毕竟都得delete旧数据库的 。 另外,你可以参考基稿 http://www.codeproject.com/KB/database/mdbcompact_latebind.aspx 或者到csdn里多问问。

‘叁’ 教你如何解决access数据库连接错误

access数据库连接错误解决办法步骤一:请检查conn.asp中的连接字符是否正确,如果没有错误,还提示数据库连接出错,请往下看access数据库连接错误解决办法步骤二:把数据库下载到本地(默认数据库
database/#newasp.mdb),用ACCESS打开,压缩修复数据库(打开ACCESS
--
工具
--
数据库实用工具
--
压缩和修复数据库);然后重新上传access数据库连接错误解决办法步骤三:如果以前操作无误,照样出现数据库连接出错,那么就是权限问题了,下面以2003为例请对C:\WINDOWS
目录给
users用户加上读取权限(千万不要给完全权限,有读的权限就行了),加上权限后,如果数据库连接正确就OK了如果问题还没有解决,请查看:C:\WINDOWS\Temp
目录权限,给users
用户加上特别的权限,其它权限都可以去掉。可能你不知道这个特别权限不知道怎么加,方法如下:选择temp目录--右键--属性--安全--添加--高级--立即查找--选择Users用户--确定返回到安全选项,选择Users用户
--
高级
--
选择Users“编辑”
--
选择如下权限,其它权限全部取消以上详细的为大家介绍了解决access数据库连接错误的办法,希望能给大家带来帮助。

‘肆’ c语言如何使用access数据库

1、C/C++与数据库交互,像 mssql/ mysql / oracle 等,一般都有成熟的第三方库,这些库里面无非就是封装了与数据库通讯的方式和通讯协议搜一下要用的数据库相关的 API 文档,会说得很清楚任何文件都是二进制数据,关键是数据存储的组织方式通用扩展名的文件,像gif/doc/jpg/wav,格式都是固定的。
2、举个例子,连接SQL:

// 打开数据库
strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s"), m_strUnEntryptMdbFilePath,m_strMDBPassword);
// 创建连接
HRESULT hr = m_pConnection.CreateInstance(_uuidof(Connection));
_ConnectionPtr m_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified);
// 声明表单指针
_RecordsetPtr pBandRecordset;
pBandRecordset.CreateInstance(__uuidof(Recordset));
// 执行语句
CString strSQL(L"SELECT * FROM [Band]");
m_pConnection->Execute((LPCTSTR)strSQL,NULL,0);
// 提取某一项 例如BandInfo
int iBandInfo = wcscmp(colum, L"BandInfo");
while(!recordsetPtr->adoEOF)
{
var = recordsetPtr->GetCollect(colum);
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
recordsetPtr->MoveNext();
}

‘伍’ 教你如何解决access数据库连接错误

步骤一:请检查conn.asp中的连接字符是否正确,如果没有错误,还提示数据库连接出错,往下看access数据库连接错误。

步骤二:把数据库下载到本地(默认数据库 database/#newasp.mdb),用ACCESS打开,压缩修复数据库(打开ACCESS -- 工具 -- 数据库实用工具 -- 压缩和修复数据库);然后重新上传access数据库连接错误。

步骤三:如果以前操作无误,照样出现数据库连接出错,那么就是权限问题了需要更改权限。

‘陆’ 怎么解决ACCESS数据库太大造成运行慢的问题

1.时候在使用Access文件的时候,随着增删改的不断的连续,会导致文件越来越大。即使手动删除或者使用delete语句删除了大量的数据记录,会发现文件的大小依然没有减掉,而且随着你再往里写数据,又会增大。
2.产生这个现象的原因跟Access本身的机制有关,具体也不清楚,好像是有什么历史记录还是什么存储碎片。ACCESS数据库在进行删除操作后,并不从该数据库中把数据清除掉,而是删除其索引相关的东西,虽然显示不出来,但是那些东西还是在文件中存在的,所以会引起ACCESS数据库文件越来越大。即使是我们不通过代码来访问access文件,而只是通过用户界面访问,随着文件的增大,也会带来一系列的问题。其症状包括:对象可能打开得更慢,查询可能比正常情况下运行的时间更长,各种典型操作通常似乎也需要使用更长时间。更何况如果在网站应用中,采用的是Access作为数据库的话,这里就有了性能上的问题。文件越来越大,会影响查询的速度,而且ACCESS是采用独占方式工作的,也就是说一次只能一个进程打开这个数据库执行操作,如果是多个用户的话就要"排队"了,所以ACCESS数据库如果变为很大的话,执行一个查询时间就会变长,而进程"排队"的等待时间也就会变得很久,专业型的数据库就不同,可以同时接收多个并发的访问,可以采用SQL数据库或其它大型并发数很强的数据库。

3.但是很多时候我们是需要Access文件,往不同的地方拷贝的,比如说,一个Server上生成了一个Access文件,需要拷贝到另外的Server上,而且Server间如果网速不是很好的话,会需要很长的时间来传输这个文件。所以这时候我们希望这个文件在内容不变的前提下,越小越好。所以我们可以去除这个Access的冗余信息。

4.Office Access本身就有这种功能,我们可以通过菜单找到这个工具,然后单击这个图标手动压缩。

5.执行以下这几句代码就可以了。
首先引用C:Program FilesCommon FilesSystemadomsadox.dll,该DLL包含ADOX命名空间;
接着引用C:Program FilesCommon FilesSystemadomsjro.dll,该DLL包含JRO命名空间
注意:如,导入dll不成功,手动把com组件 导入为 .net组件,在用vs.net工具导入

///压缩修复ACCESS数据库,mdbPath为数据库绝对路径
public void Compact(string mdbPath)
{
if (!File.Exists(mdbPath)) //检查数据库是否已存在
{
throw new Exception("目标数据库不存在,无法压缩");
}
//声明临时数据库的名称
string temp = DateTime.Now.Year.ToString();
temp += DateTime.Now.Month.ToString();
temp += DateTime.Now.Day.ToString();
temp += DateTime.Now.Hour.ToString();
temp += DateTime.Now.Minute.ToString();
temp += DateTime.Now.Second.ToString() + ".bak";
temp = mdbPath.Substring(0, mdbPath.LastIndexOf("\") + 1) + temp;
//定义临时数据库的连接字符串
string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + temp;
//定义目标数据库的连接字符串
string mdbPath2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=l1epc2";
//创建一个JetEngineClass对象的实例
JetEngineClass jt = new JetEngineClass();
//使用JetEngineClass对象的CompactDatabase方法压缩修复数据库
jt.CompactDatabase(mdbPath2, temp2);
//拷贝临时数据库到目标数据库(覆盖)
File.Copy(temp, mdbPath, true);
//最后删除临时数据库
File.Delete(temp);
}

‘柒’ 优化Microsoft Access提高速度


摘要
这篇文章介绍了在设计、编写和实现Microsoft Access 数据库应用程序时为保证拥有最高速度而需要注意的几点。
介绍
作为一名数据库程序员,你的主要任务是让你的用户能快速地选择、管理和访问他们所需要的信息。其他的工作几乎都是一成不变的,只要你的数据库应用程序执行速度越快,你的程序效率越高。这篇文章的目的就是突出各种不同的技巧和策略,通过优化程序来提高速度,让你的Microsoft Access 数据库应用程序的效率更高,这样也可以帮助你完成作为一名数据库开发者的主要使命。
硬件
瞄准速度问题的根本
为了提高你的数据库程序的速度,自然而然地你会想到去注意影响速度最基本的几个部分,我们将从处理这几个部分着手。在你力图提高你的数据库程序性能的时候,你的程序所运行的硬件平台将是唯一的决定因素弯差。显而易见,实现优化的第一条原则应该是较快的硬件=较快的数据库_比_PU和RAM是这个等式的核心所在。相信你一定注意到Microsoft Access 所声明的,要达到一个令人满意的性能,至少需要8MB的RAM和一个80486的CPU。一般情况下,用户注意到这一点是理所应当的,但我却见过许多用户为他们的Microsoft Access 的执行速度而感到沮丧,当我问及他们使用什么机器运行此程序时,他们告诉我是一台80386,并且是在运行一台服务器上的一个MSACCESS.EXE。所以,在相信你的汪迹用户通过下面的方法固然能提高其程序性能的同时,始终需要强调的仍然是,在Microsoft Access 执行过程中,硬件才是关键的问题。
有效的磁盘访问
假定已经有了一个令人满意的硬件配置,下面让我们讨论一下如何才能提高Microsoft Access 在此平台上的运行速度。就这个问题,对你的数据库程序而言,影响其性能的第二位因素就是磁盘访问了。在执行过程中,对物理磁盘的访问总是一个速度的瓶颈(与访问存储在 RAM中的数据相比较而言),所以,你应该尽量减少对磁盘的访问。然而,由于你的应用程序总是要和一些磁盘或其他一些物理设备打交道,所以,你的目标应该是保证所有的磁盘访问都尽可能有效。要实现这一点,方法是经常整理你的磁盘数据碎片,整理你的数据库所在的磁盘驱动器以及所有你执行你的数据库程序时要涉及的磁盘驱动器,而且你还应提醒你的用户定期清理磁盘碎片,以此保证磁盘访问一直有效。这将最大程度地减少在对物理磁盘进行读写而花费的时间,尽管这些读写是不可避免的,同时优化了整个体系的性能。
使RAM最大化/对磁盘访问的频率最小化
下一个主题是使你的数据库程序与物理磁盘驱动器打交道的频率最小。要做到这一点关键是尽可能多的释放RAM空间给你的应用程序使用。要实现这一点,你需要做到以下几点:
增加最大缓冲区的尺寸
首先涉及到你对最大缓冲区尺寸的设置。最大缓冲区的尺寸指的是Microsoft Access作为困闹并内部存储空间而保留的RAM的数目。存储空间越大,用户需求的数据能在RAM中找到可能性越大,同时减少了对物理磁盘的访问频率。Microsoft Access 需要的最小缓冲区是512KB,如果你的硬件系统有多于4MB的RAM,那么你就可以为Microsoft Access 多分配一些供其使用(这样也增加了系统的性能)。要做到这一点,只需要在MSACCESS.INI(在你的windows目录下)文件中增加对最大缓冲区的设置,使用你的文本编辑器,例如记事本,在此文件中找到 [Option] 段,在其中加这样一句话:
MaxBufferSize = xxxxx
这其中的xxxxx即是为你的应用程序对存储空间分配而作的新设置(例如,设置MaxBufferSize=2048将为Microsoft Access分配2MB的缓冲区空间)。那么,你究竟应该分配多少才算合适呢?除了“尽可能多”,其他的还真难说。你需要手动地调节这个设置,同时需要试着让你的硬件都能提供以下条件:1)不能妨碍用户同时正在运行的程序,2)不会影响其自身底层操作系统的运行效率(你可能会在程序启动时想通过.INI文件查看一下Microsoft Access自身的配置,因此,任何对MSACCESS.INI文件的修改都将只能在下一次Microsoft Access启动时才能奏效,而对现在正在运行的Microsoft Access程序没有任何的影响)。
避免装载Wizards
为了释放更多的内存以供Microsoft Access使用,另一个你可以采取的步骤是:如果你不使用Wizards,那么就不要装载它。你可以打开MSACCESS.INI文件,找到[libraries]部分,在“wizards.mdb=ro”这一句之前加一个分号,这样就避免了自动加载Wizards。这样做将能够释放315B的RAM提供给Microsoft Access以作己用,这样做的好处不仅在于提高了运行时间的性能,同时使每个应用程序平均减少了大约10秒的安装时间。
解除墙纸/背景位图
解除标准windows墙纸背景可以释放RAM中任何一处25K到350K的空间。解除复杂的位图将释放更多的内存空间。
创建永久交换文件
创建一个永久交换文件(相对于临时文件而言)将增加你额外的性能。关于这一点,你可以求助于关于这方面的帮助文档,它将指导你在运行数据库应用程序的机器上创建这一文件。
到现在为止,我们已经解决了有关硬件平台、最大的磁盘访问效率的问题,并且为你的应用程序增加了有效的RAM存储空间,接下来让我们转向优化应用程序本身。
Microsoft Access自身特点
压缩、压缩
要保证经常性的压缩你的程序代码。当你在开发和使用Microsoft Access数据库时,你要经常性地增加和删除数据、代码等等。现在的问题是Microsoft Access并不能有效地释放已分配的但被删除的对象空间,这将意味着即使你删除了一个对象,而这个对象仍然在你的数据库中占据空间。压缩数据库将迫使Microsoft Access真正删除这些对象并回收其占据的空间,从而使得你的数据库尽量小但却更有效。我曾把逐字逐句查询的平均时间减少了30%——50%,而做到这一点仅仅是通过去压缩那些由于经常使用又缺乏压缩而变得过度膨胀的数据库程序,因此,在运行程序的过程中,不要忽视压缩过程的重要性。正如你要定期清除硬盘数据碎片一样,你和你的用户也应当定期压缩数据库来保证它始终最有效地运行。
只用代码
你可能希望通过宏操作来搭建一个应用程序的模型,一旦你开始优化你的程序的最终性能,一定要把所有的宏重新写成代码。这主要是因为Microsoft Access代码要比宏运行得快的多。但遗憾的是有三个宏操作你不能将他们改写成代码,这三个宏是Autokeys、Autoexec和Addmenu操作,这三个宏在Microsoft Access中没有相应的等价类,因此你只能被迫使用他们。不过,你可以克服Autoexec的限制,只需要定义Autoexec为调用你的Access Basic Autoexec函数。
优化数据类型声明
当你在你的代码中声明数据类型时,你应该试着尽可能精确。因为若是一个变量的类型(如果没有特别声明,缺省为可变类型)非常灵活自由的话,那么这种类型同时也将是最浪费内存的一种类型。这样一来,如果你知道check Balance这个变量不需要超过4位小数精度的话,那么就把它定义成确定类型而不是可变类型。对你的过程函数的定义同样也可以如此操作(比如说,把函数PostCredit()声明为整形,而不是Function PostCredit())。请注意这样一个事实,如果你估计一个变量将会被处理成一个空值,那么你需要去把它定义成一个可变类型而不是一个确定的严格的数据类型,否则你会得到一个错误信息。同样地,要注意整形除法和浮点除法之间的差别。
经常使用From/Report变量
在你的程序中,你需要保证你能提前解决尽可能多的查询工作。这意味着什么呢?举个例子来说明:如果你想在代码中查阅一个名为[NetPrice]的文本框,你可以使用这样一条语句:
Mytemprariable=Forms![Customer Invoice]![Net price]
对于这条指令,Microsoft Access首先在Forms对象里搜索名为[Customer Invoice]的表,一旦它找到这张表,Microsoft Access接下来寻找名为[NetPrice]的控制,并进行正确的操作。从这个例子可以看出,Microsoft Access经过两次查询最终确定我们指定的控制。如果你想在同一程序(函数或者子函数)中再次查询[Customer Invoice]表中任一控制,你可以删除可能会在下次出现的多余语句,而只使用如下语句:
Dim F as form
Set F = Forms![Customer Invoice]
现在,你的Form变量将自动指向Form[Customer Invoice],允许Microsoft Access 避免每次在你需要查找[Customer Invoice]表中任一对象时,都要把数据库的Form对象中全部搜索一次。为了查阅控制[NetPrice],你只需要简单地使用下面的语句:
Mytempvariable=F![NetPrice]
你也可以对Report对象作相同的操作(比如,set R=Reports![MyReport])。当你在一个函数中仅仅只对一个Form或Report访问一次,你可能在速度性能方面得不到什么太大得好处,但是一旦你开始在同一个Form或Report中进行的访问操作超过一次,你将会看到明显的时间减少。于是,通过使Microsoft Access避免作多余的查阅,你将大大地提高你程序的速度。
在可以应用的地方使用windows函数
无论何时,只要相关,总是可以用一个windows函数调用来代替Access Basic代码执行同一个操作。这样你将节省开发时间,因为windows函数调用是已经完成编码并经过优化,同时也因为它们是用C语言编写的(机器可执行),而Access Basic代码则要被编译成P代码形式,同时需要在执行时一行一行地解释。一个最普通的例子是custom.ini设置。你可以使用Access Basic文件函数去得到一个自由文件指针,打开文件,读/写文件,然后关闭它。但是如果你完全可以简单地使用GetPrivateProfileString和WritePrivateProfileString函数来实现,它们既快且已经编码优化随手可用,你为什么还要自寻烦恼呢?(参考:“Enhanced Microsoft Access: Using the Win16 API”)
你的Microsoft Access数据库应用程序运行速度越快,你就能更好地完成你的任务,也就是向你的用户提供最有效的选择、管理、发送他们的数据的能力。我真诚希望以上这些小技巧能协助你达到这个目标。

‘捌’ c语言连接access

如果是纯昌野C语链辩言的话需要引用头文件。
引用iostream.h以及msado15.dll方可进行棚迅缺连接ACCESS数据库的操作。

代码量比较大,这里贴不出来。需要的话可以联系我。

‘玖’ ACCESS问题

修复ACCESS数据库的几种常见方法:

技术支持部在日常工作中经常会碰到因非正常退出、网络不稳定或病毒等原因造成的Access数据库损坏。损坏了的Access数据库会造成软件运行不稳定,出现各种运行错误,为解决这类问题就必须对Access数据库进行修复。

修复Access数据库,我们一般使用微软Office 97中带的Access 97对数据库进行修复和整理。Access数据库被损坏分以下几正蠢种情况:1、严重损坏;2、轻度损坏;3、有些表被损坏或有些表的部分记录被损坏。下面就分情况介绍解决办法。

1、使用游清塌Access97打不开数据库、系统提示"不可识别的数据库格式"或"不是该表的索引"等信息,这样的数据库都是损坏比较严重的。损害严重的数据库一般来说都是无法修复的,只有恢复备份了,好在这种情况比较少见。

2、如果数据库损坏的不严重,只需要使用Access 97菜单上的“修复数据库”和“压缩数据库”就可以把数据库修复好。因为数据库轻微损坏的时候,一般也不会导致软件出什么问题,所以也不会神圆引起人的注意,只有当数据库的某一个或几个表损坏了的时候,才会使软件变得不稳定,所以这种情况才是我们最常遇到的。

3、如何确定数据库中哪几个表有问题呢,我们首先利用Access 97建立一个空数据库,利用系统提供的“引入数据库”功能,选择目标数据库所有的表进行引入,Access 97当引入到有问题的表时系统会提示一些错误信息,把这个表的名字记下来以备以后修复时使用。

接下来利用Access97打开有问题的数据库,准备修复表。修复损坏的表的方法依照表损坏程度不同而不同,下面分情况介绍处理的办法:

一、表损坏的非常严重,表现为无法打开表,系统提示“Microsoft jet 找不到对象”、“没有读写权限”或“不可识别”等信息。

处理方法:这种表的已经损坏得非常严重了,一般无法修复。如果这个表不很重要或通常情况下表的内容为空的话,例如“常用凭证表”、“科目共享锁定表”或“凭证共享锁定表”,我们可以通过引入的方法把其他数据库的表引入,然后把有问题的表删除即可。

二、表中有几行内容非常混乱或字段内标有“#已删除”字样,但当要删除这些记录时就会出现错误信息不许删除。

处理办法:既然不让删除这些记录,我们可以通过使用SQL语句把没有问题的记录复制到一个新的表中,然后把老表删除把新表的名字改过来即可。例如“凭证及明细账表GL_ACCVOUCH”中有错误记录有无法删除,我们可以使用如下SQL语句把好的记录复制到GL_ACCTEMP中:

SELECT GL_ACCVOUCH.* INTO GL_ACCTEMP

FROM GL_ACCVOUCH WHERE {筛选的条件}

然后删除表GL_ACCVOUCH,再把表GL_ACCTEMP的名字改为GL_ACCVOUCH即可解决问题。

修复ACCESS数据库的注意事项,首先,我们在修复数据库前一定要做好备份,以防数据丢失或损坏;有一些数据库中有RELATION(关系)来维护数据的一致性,但当数据库异常后相关表的RELATION也就丢失了,在修复好数据库后一定要把RELATION再联好,有些软件可以自动修复RELATION,比如用友公司的ERP8.XX系列产品的数据库可以通过把表accinformation中的[cSysid]='AA' and [项目号]='99'的记录,把[设置值]和[缺省值]改为'8.0A0',重新进入系统时,系统会自动升级并重建索引。
以上回答你满意么?

‘拾’ 如何在c程序中调用access数据库

c语言不能连接数据库,只能用文件保存数据;
我在学习的时候也曾遇到过这样的问题,请教老师,老师告诉我C语言主要用来开发系统的,还有就是用来开发游戏的。一般用文件保存数据。不会用到数据库;
要用数据库的语言有VB,java,c#,Dephi等等