未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

本错误是由于你使用了ACCESS2007版本建立的数据库,但服务器中没有相配合使用的程序,所以出错.

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

下载2007 Office system 驱动程序:数据连接组件安装

http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe

此下载将安装一组组件,非 Microsoft Office 应用程序可以使用它们从 2007 Office system 文件中读取数据,
例如从 Microsoft Office Access 2007(mdb 和 accdb)文件以及 Microsoft Office Excel 2007(xls、xlsx 和 xlsb)文件中读取数据。这些组件还支持与 Microsoft Windows SharePoint Services 和文本文件建立连接。

此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用。

查看更多内容...

Posted in 数据库 at November 12, 2014. by 傻猫 .    Views: 3665    No Comments

mssql查询所有表和所有表记录数

select object_name(id) as tablename,rows from sysindexes
where id in (select id from sysobjects where xtype='U') and indid in (0,1)

Posted in 数据库 at April 9, 2014. by 傻猫 .    Views: 3519    No Comments

SQL查询数据库表名、表的列名

--读取库中的所有表名
select name from sysobjects where xtype='u'

--读取指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
获取数据库表名和字段
sqlserver中各个系统表的作用
    sysaltfiles      主数据库                  保存数据库的文件
syscharsets      主数据库                  字符集与排序顺序
sysconfigures    主数据库                  配置选项
syscurconfigs    主数据库                  当前配置选项
sysdatabases      主数据库                  服务器中的数据库
syslanguages      主数据库                  语言
syslogins        主数据库                  登陆帐号信息
sysoledbusers    主数据库                  链接服务器登陆信息
sysprocesses      主数据库                  进程
sysremotelogins主数据库                  远程登录帐号

syscolumns        每个数据库                列
sysconstrains    每个数据库                限制
sysfilegroups    每个数据库                文件组
sysfiles          每个数据库                文件
sysforeignkeys 每个数据库                外部关键字
sysindexs        每个数据库                索引
sysmenbers        每个数据库                角色成员
sysobjects        每个数据库                所有数据库对象
syspermissions 每个数据库                权限
systypes          每个数据库                用户定义数据类型
sysusers          每个数据库                用户

//
用什么方法可以得到一个表中所有的列名。SQl语句。
select      列名=name      from      syscolumns      where      id=object_id(N'要查的表名')

Posted in 数据库 at December 16, 2013. by 傻猫 .    Views: 3786    No Comments

关于多对多关系数据的比较算法

昨天搞了一个小软件,主要分析多对多关系的数据,刚开始一直没有想到办法,后来想到了通过数据库数据读取来循环操作,功能实现了,但是要读取数据库很多次,效率感觉不行,于是又重新想了想,用动态数组的方法来实现,不读写数据库,速度也很快,而且充分发挥了CS客户端的效率,可以交由客户端来完成一些事务处理,这个是BS无法比的,哈哈。现将demo分享一下。

1、两张表,一个是学生信息表UserInfo,一个学科信息Project表

UserInfo信息如下

id,  name, myProject
1    tom     1,2,3,4
2    jim      1,3
3   sam      2,4

Project信息如下

id,name
1    math
2    english
3   chinese
4   Japanese

 myProject字段信息记录学生的科目信息,现在是需要在listview列表里显示某个学生的科目信息,所学科目打钩。

1、首先将所有科目信息填充到listview,第一列为科目ID

2、取出某学生的学科信息myProject值temp

第一种实现方法,通过数据库循环操作:

      for i:=0 to lv_hdtc.Items.Count-1 do
      begin
             //通过数据循环操作获取相关信息
            mysql:='select id from Project  where id in ('+temp+')';
            with data do
            begin
                  qry_temp.Close;
                  qry_temp.SQL.Clear;
                  qry_temp.SQL.Add(mysql);
                  qry_temp.Open;
                  for j:=0 to qry_temp.RecordCount-1 do
                  begin
                        if Trim(qry_temp.fieldbyname('id').AsString)=lvtxt then
                        lv_hdtc.Items.Item[i].Checked:=True;

                        qry_temp.FindNext;
                  end;
            end;
                       
      end;

第二种实现方法,使用动态数组:

    //mytc: array of string;
     i:=0;
     SetLength(mytc,Length(temp));
     while True do
     begin
             if Pos(',',temp)>0 then
             begin
                  SplitString(temp,',',l,r);
                  mytc[i]:=Trim(l);
                  temp:=Trim(r);
                  i:=i+1;
             end
             else
             begin
                 if i=0 then
                 mytc[0]:=Trim(temp)
                 else
                 mytc[i]:=Trim(temp);
                
                 Break;
             end;
     end;


      for i:=0 to lv_hdtc.Items.Count-1 do
      begin
            //通过本地数组格式化进行操作
            lvtxt:=Trim(lv_hdtc.Items.Item[i].Caption);

            for j:=0 to Length(mytc)-1 do
            begin
                  if Trim(mytc[j])=lvtxt then
                  lv_hdtc.Items.Item[i].Checked:=True;
            end;
          
      end;

 

Posted in 数据库 at June 20, 2013. by 傻猫 .    Views: 3948    No Comments

mysql笔记——mysql特点,常用命令,基本数据类型

1.MySQL数据库具有以下主要特点:

1. 同时访问数据库的用户数量不受限制;

2. 可以保存超过50,000,000条记录;

3. 是目前市场上现有产品中运行速度最快的数据库系统;

4. 用户权限设置简单、有效。

2.MySQL常用的命令:

help (\h) 显示命令帮助

(\h) 作用同上

clear (\c) 清除屏幕内容

connect (\r) 重新连接服务器,可选参数为 db(数据库)和 host(服务器)

exit (\) 退出mysql数据库,作用与quit命令相同

go (\g) 将命令传送至mysql数据库

print (\p) 打印当前命令

quit (\q) 退出mysql数据库

status (\s) 显示服务器当前信息

use (\u) 打开数据库,以数据库名称作为命令参数

注:mysql数据库要求使用者在所有命令后面加上“;”作为命令的结束。

3.MySQL数据类型:

1)char:用于表示固定长度的字符串,最多包含255个字符。

eg. car_model char(10);

2)varchar:用于保存可变长度的字符串,最多包含255个字符。对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。虽然VARCHAR使用起来较为灵活,但是从整个系统的性能角度来说,CHAR数据类型的处理速度更快,有时甚至可以超出VARCHAR处理速度的50%。

car_model VARCHAR(10);//最多包含10个字符

varchar类型的占用空间是它的值的实际长度+1,这个字节用于保存实际使用了多大的长度。

3) INT (M) [Unsigned]

  DECIMAL和NUMERIC,它们是同一种类型。它严格的说不是一种数字类型,因为他们实际上是将数字以字符串形式保存的;他的值的每一位(包括小数点)占一个字节的存储空间,因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定,在运算中不会" 失真",所以比较适合用于"价格"、"金额"这样对精度要求不高但准确度要求非常高的字段。

整数类型。从只占一个字节存储空间的TINYINT到占8个字节的BIGINT,挑选一个"够用"并且占用存储空间 最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT占用存储空间分别为1字节、2字节、 3字节、4字节和8字节,就无符号的整数而言,这些类型能表示的最大整数分别为255、65535、16777215、4294967295和 18446744073709551615。如果用来保存用户的年龄(举例来说,数据库中保存年龄是不可取的),用TINYINT就够了;九城的《纵横》 里,各项技能值,用SMALLINT也够了;如果要用作一个肯定不会超过16000000行的表的AUTO_INCREMENT的IDENTIFY字段, 当然用 MEDIUMINT 不用 INT ,试想,每行节约一个字节,16000000行可以节约10兆多呢!

INT数据类型用于保存从- 2147483647 到2147483648范围之内的任意整数数据。如果用户使用Unsigned选项,则有效数据范围调整为0-4294967295。举例如下:

light_years INT;

  按照上述数据类型的设置,-24567为有效数据,而3000000000则因为超出了有效数据范围成为无效数据。

再例如:

light_years INT unsigned;

这时,3000000000成为有效数据,而-24567则成为无效数据。

4)float(M,D)

表示数值较小的浮点数据,可以提供更加准确的数据精度。其中,M代表浮点数据的长度(即小数点左右数据长度的总和),D表示浮点数据位于小数点右边的数值位数。

rainfall FLOAT (4,2);

  按照上述数据类型的设置,42.35为有效数据,而324.45和3.542则因为超过数据长度限制或者小数点右边位数大于规定值2成为无效数据。

5) DATE    分为:DATETIME、DATE、TIMESTAMP、TIME和YEAR

  DATE数据类型用于保存日期数据,默认格式为YYYY-MM-DD。MySQL提供了许多功能强大的日期格式化和操作命令,

the_data DATA ;

6) TEXT / BLOB

TEXT和BLOB数据类型可以用来保存255 到65535个字符,如果用户需要把大段文本保存到数据库内的话,可以选用TEXT或BLOB数据类型。TEXT和BLOB这两种数据类型基本相同,唯一的区别在于TEXT不区分大小写,而BLOB对字符的大小写敏感。

TINYTEXT最大长度为255,占用空间是实际长度+1,TEXT最大长度65535,占用空间是实际长度+2,MEDIUMTEXT最大长度16777215,占用空间实际长度+3,LONGTEXT最大长度4294967295,占用空间长度实际长度+4;

7)SET

  SET数据类型是多个数据值的组合,任何部分或全部数据值都是该数据类型的有效数据。SET数据类型最大可以包含64个指定数据值。

       transport set(“truck”,“car”)NOT NULL ;

根据上述数据类型的设置,truck,car,以及truck,car都可以成为transport的有效值。

8)ENUM

  ENUM数据类型和SET基本相同,唯一的区别在于ENUM只允许选择一个有效数据值。且最多可以定义65535种不同的字符串中作出选择,占用空间是一个或两个字节。例如:

transport ENUM ("truck", "wagon") NOT NULL;

  根据上述设置,truck或wagon将成为transport的有效数据值

Posted in 数据库 at March 1, 2012. by 傻猫 .    Views: 4074    No Comments

mysql笔记(1)——varchar与char的区别

用了这么多年数据库,varchar和char都在使用,只知道两者都是字符串类型,两者的长度不一样,其实长度是一样的,最大为255个字符,最大的区别在于char用于固定长度的字符串,varchar用于可变长度的字符串,char数据类型处理速度更快,最高可以超出varchar处理速度的50%。

-----------------------以下内容为MYSQL varchar与char的区别--------------------------------

char:用于表示固定长度的字符串,最多包含255个字符。

car_model char(10);

varchar:用于保存可变长度的字符串,最多包含255个字符。对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。虽然VARCHAR使用起来较为灵活,但是从整个系统的性能角度来说,CHAR数据类型的处理速度更快,有时甚至可以超出VARCHAR处理速度的50%。

car_model VARCHAR(10);  //最多包含10个字符

varchar类型的占用空间是它的值的实际长度+1,这个字节用于保存实际使用了多大的长度。

-----------------------以下内容为MSSQL varchar、nvarchar与char的区别--------------------------------

字符串数据类型:char、varchar、nvarchar 这三种都是我们常用的数据类型;
varchar与nvarchar比较相似,主要区别在于字符存储字节不同,所以先区分与char的区别:

1、char  固定长度,最长为2000个字符。比如char(50),就算你只存储一个字符,数据库也要为它分配50个字符的空间,这种类型在访问速度上优于varchar,nvarchar,也就是我们常说的空间换时间,经常需要修改更新,且长度不一的字段可以用char。
2、varchar、nvarchar 可变长度字符串。比如varchar(50),你定义的只是最长字符长度为50,实际数据库分配空间根据实际储存字符串长度决定。

3、varchar与nvarchar的区别,主要区别是存储方式不同:
      varchar:按字节存储,比如:varchar(50)可以存储50个英文字母或数字,但只能存储25个汉字,因为汉字是双字节的。
      nvarchar:按字符存储,每字符占2个字节。比如nvarchar(50)不管存储英文字母还是中文汉字都能存储50个字符,存储50个字符时它需要分配100个字节的空间。

     varchar可变长度,最长为8000个字符。适合存储英文数字字符串,如密码。
     nvarchar可变长充,最长为4000个字符。适合存储中英文混合的名称字段,如登录的用户名。

 

Posted in 数据库 at March 1, 2012. by 傻猫 .    Views: 4844    No Comments

如何用MDF文件恢复数据库

由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。
    如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息
    设备激活错误。

    物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误。
    已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。

 

查看更多内容...

Posted in 软件开发,Web开发 at November 15, 2011. by 傻猫 .    Views: 4795    No Comments

mssql 2008维护计划创建失败的解决方法

今天在MSSQL2008创建维护计划时,报下面错误,始终建不起,在网上搜索一下,得到以下解决方法:

标题: 维护计划向导进度,创建维护计划失败。其他信息:

从 IClassFactory 为 CLSID 为 {17BCA6E8-A95D-497E-B2F9-AF6AA475916F} 的 COM 组件创建实例失败,原因是出现以下错误: c001f011。 (Microsoft.SqlServer.ManagedDTS)------------------------------

从 IClassFactory 为 CLSID 为 {17BCA6E8-A95D-497E-B2F9-AF6AA475916F} 的 COM 组件创建实例失败,原因是出现以下错误: c001f011。 (Microsoft.SqlServer.ManagedDTS)

解决方法:

在命令行执行:regsvr32    “c:\Program Files\MicrosoftSQL Server\100\DTS\Binn\dts.dll”

将dts.dll重新注册一次,然后重新打开管理器,再进行创建维护计划,搞定。

 

Posted in 数据库 at August 3, 2011. by 傻猫 .    Views: 7434    No Comments