解决Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci错误-我的JAVA世界-51CTO博客

mikel阅读(823)

错误本质原因:出现了两种字符集。1.SHOW VARIABLES LIKE ‘character_set_%’; 查看一下 显示+————————–+—————————-+| Variable_name | Value |+————————–+——————

来源: 解决Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci错误-我的JAVA世界-51CTO博客

错误本质原因:出现了两种字符集。

1.

SHOW VARIABLES LIKE ‘character_set_%’; 查看一下 显示

+————————–+—————————-+

| Variable_name | Value |

+————————–+—————————-+

| character_set_client | utf8|

| character_set_connection | utf8|

| character_set_database | latin1 |

| character_set_results | utf8|

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /home/jh/mysql/share/mySQL/charsets

2.

再用 SHOW VARIABLES LIKE ‘collation_%’; 查看一下 显示

| Variable_name | Value |

+———————-+——————-+

| collation_connection | utf8_swedish_ci |

| collation_database | latin1_swedish_ci |

| collation_server | latin1_swedish_ci |

3.解决办法:

SET character_set_database =utf8;

SET character_set_results =utf8;

SET character_set_server =utf8;

SET character_set_system =utf8; /*此处utf-8也可以*/

SET collation_server = utf8_general_ci;

SET collation_database = utf8_general_ci;

执行完之后,请检查mySQL下每个数据库,表,字段是否都是utf8,不是则改过来,这样子就不会出现

二:最笨的方法是重装一下数据库。(一般不要用这种方法呀)

三:

.1 如果是windows版本的mysql,那么在安装的时候,系统就会提示用哪种编码。

如果安装的时候设置错误了,修改mysql安装目录下的my.ini文件:

[mysql]

default-character-set=utf8

# The default character set that will be used when a new schema or table is

# created and no character set is defined

default-character-set=utf8

配置好后,重启mysql。

1.2 如果是linux版本的mysql

修改mysql的配置文件,使数据库与服务器操作系统的字符集设置一致。

vi /etc/my.cnf 设置(如果没有发现这个文件,就新建1个)

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

default-character-set=utf8

增加的关键一句,使得数据库缺省以utf8存储)

当然,修改后,要重启数据库。(这样设置后对新建的数据库表才起作用)

用SHOW VARIABLES LIKE ‘character_set_%’;命令查看到如下内容:

+————————–+———————————————————————–+

| Variable_name | Value |

+————————–+———————————————————————–+

| character_set_client | utf8|

| character_set_connection | utf8|

| |character_set_database |utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8|

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /home/jh/mysql/share/mysql/charsets |

发现关键项目已经用了utf8,但这样还不够,还要保证客户端也是用utf8的字符集来操作的。

登录的时候,要用以下命令:mysql –default-character-set=utf8 -u root -p

这样才能保证客户端所发命令都是基于utf8格式的,比如说建立数据库和表,默认就会以utf8编码,而无须再次指定。(再次说一句对新建的数据库和表起作用)。

三:网上看到的,先记录一下。

1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题
2.修改数据库编码,如果是数据库编码不正确: 可以在phpmyadmin 执行如下命令:

ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8
3.修改表的编码:

代码如下 复制代码
ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

以上命令就是将一个表category的编码改为utf8
4.修改字段的编码:

代码如下 复制代码
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

以上命令就是将test表中 dd的字段编码改为utf8
5.如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可
, //这个正确就无问题了
6.这种情况也是修改页面charset即可

四:知识

linux平台及windows平台mysql重启方法

Linux下重启MySQL的正确方法:

1、通过rpm包安装的MySQL

service mysqld restart

2、从源码包安装的MySQL

// linux关闭MySQL的命令

$mysql_dir/bin/mysqladmin -uroot -p shutdown

// linux启动MySQL的命令

$mysql_dir/bin/mysqld_safe &

其中mysql_dir为MySQL的安装目录,mysqladmin和mysqld_safe位于MySQL安装目录的bin目录下,很容易找到的。

3、以上方法都无效的时候,可以通过强行命令:“killall mysql”来关闭MySQL,但是不建议用这样的方式,因为这种野蛮的方法会强行终止MySQL数据库服务,有可能导致表损坏

步骤或方法:RedHat Linux (Fedora Core/Cent OS)

1.启动:/etc/init.d/mysqld start

2.停止:/etc/init.d/mysqld stop

3.重启:/etc/init.d/mysqld restart

Debian / Ubuntu Linux

1.启动:/etc/init.d/mysql start

2.停止:/etc/init.d/mysql stop

3.重启:/etc/init.d/mysql restart

Windows

1.点击“开始”->“运行”(快捷键Win+R)。

2.启动:输入 net stop mysql

3.停止:输入 net start mysql

提示* Redhat Linux 也支持service command,启动:# service mysqld start 停止:# service mysqld stop 重启:# service mysqld restart

* Windows下不能直接重启(restart),只能先停止,再启动。

MySQL启动,停止,重启方法:

一、启动方式

1、使用 service 启动:service mysqld start

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start

3、使用 safe_mysqld 启动:safe_mysqld&

二、停止

1、使用 service 启动:service mysqld stop

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop

3、mysqladmin shutdown

三、重启

1、使用 service 启动:service mysqld restart

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart

使用Navicat for Oracle工具连接oracle的图文教程 - 郑文亮 - 博客园

mikel阅读(734)

来源: 使用Navicat for Oracle工具连接oracle的图文教程 – 郑文亮 – 博客园

点评:今天上网的时候偶然发现了一款oracle的客户端的图形化管理和开发工具,当看到这个界面的时候,感觉很舒服,便上网搜了一下这个工具,看百度百科之后感觉很出乎我的意料,这个产品对于许多的数据库竟都有支持

今天上网的时候偶然发现了一款oracle的客户端的图形化管理和开发工具,当看到这个界面的时候,感觉很舒服,便上网搜了一下这个工具,看百度百科之后感觉很出乎我的意料,这个产品对于许多的数据库竟都有支持,这也是吸引我的地方,于是我便下载了三个常用数据库的所对应的这个软件。这个工具可以用于任何版本 8i 或以上的 Oracle 数据库服务器,并支持大部份 Oracle 最新版本的功能,包括目录、表空间、同义词、实体化视图、触发器、序列、类型等。下边的这张图是oracle版的,MySQLSQL Server的基本上和它是一样的。先来看一下Oracle版的吧!

看到了这个界面,相信很多人都会喜欢,这个界面十分的简洁,没有多余的东西,我认为对于日常的操作基本上可以满足要求了,数据库的操作都十分的方便,我相信看过一眼,基本上就会了。以下是我对这个软件的安装和配置。希望对有需要的人有所帮助。

一、Navicat for Oracle的安装:

1、双击它的安装文件,出现如下所示的界面,这里我选择的是自定义安装,单击“下一步”继续安装,如图所示:

 

2、在出现的界面中,选择安装的目标文件夹,这里我选在了d盘,单击“下一步”继续,如图所示:

 

3、在出现的界面中,选择要安装的组件,单击“安装”按钮,如图所示:

 

4、经过几秒钟的时间,软件成功的安装了,接下来单击完成按钮,启动这个工具,如图所示:

 

二、Navicat for Oracle的配置

1、启动该工具,出现如下的开始界面,单击“连接”选项,进行连接数据库,如图所示:

6、在“新建连接”对话框中,输入任意的连接名,选择默认的连接类型,输入oracle数据库所在的服务器地址,这里我选择是“localhost”,输入oracle的端口号“1521”,输入数据库的SID或者是该数据库所对应的服务名,输入用户名和密码,这里我使用的是“scott”,单击“连接测试”按钮,进行测试,看看是否成功,如图所示:

 

7、当我选择开始测试的时候,出现了错误:“ORA-12737: Instant Client Light: unsupported server character set CHS16GBK”,这个错误是很典型的,是由于服务器的编码不支持造成的,但是如果我改变了服务器的字符集编码,这是不现实的,所以上网找了解决的方案,最后知道了只要去oracle官网下载一个最新版的OCI的文件,将原先的OCI的文件的覆盖即可解决下,只不过文件稍微有点大。该文件在博客的末尾已经提供了,下面是文件的替换的过程,下载的文件是一个压缩的文件,取出的其中的4个文件:oci.dll,orannzsbb11.dll,oraocci11.dll,oraociei11.dll(这个文件最重要),按照如下的步骤将文件替换。选则“工具”菜单下的“选项”命令,如图所示打开选项的界面:

 

8、在“其它”的下边选择OCI,在右边的第一个的文件浏览的地方,选择oci.dll的位置,默认的位置是“安装目录\instantclient_10_2”,把从压缩文件中取出的四个文件放到该目录下,如图所示:

 

9、这样配置之后,重新启动该软件,并向前一步的连接配置,测试连接,这是连接就成功了,如图所示:

 

10、成功之后就可以看到”scott”用户的表了,可以很方便的操作数据库了。

 

我所使用的数据库是oracle10g,我们下载的是Instant client这个工具,它有11的和10的版本,对oracle9i及以上的版本使用11的。其他使用10版本的。

附上用到的软件的下载地址:

Navicat for Oracle工具下载:

http://www.jb51.net/database/84092.html

解决字符集的工具下载:

官方网站下载 http://www.oracle.com/technetwork/topics/winsoft-085727.html
或者到用迅雷下载http://download.oracle.com/otn/nt/instantclient/112030/instantclient-basic-nt-11.2.0.3.0.zip

参考文章:

http://wenku.baidu.com/view/319c742e4b73f242336c5fe2.html

http://www.jb51.net/softjc/84099.html

自己配置的WAMP环境,扩展oracle函数库(oci) - 安仲炜 - 博客园

mikel阅读(1040)

来源: 自己配置的WAMP环境,扩展oracle函数库(oci) – 安仲炜 – 博客园

同事昨天接到一个任务,要用php处理oracle数据库的内容,但是php打开oracle扩展不是像mySQL那样直接用就行,需要下一点东西才能打开

第一步 需要到oracle官方下载一个install client 包,在win下找到你对应系统版本的zip(注意这里是系统版本)

截止到2015-06-25,下载地址如下http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

例如选择 Instant Client for Microsoft Windows (x64)  因为php扩展的是OCI,所以必须选对应版本的最全的那个,别的都没有OCI,这里下载可能需要有个账号,验证以后就可以下载,直接用连接下载不好用,没有的话注册一下就好了

 

第二部,需要下载win系统中的扩展包也就是.dll文件  下载地址   http://pecl.php.net/package/oci8   下面一段废话是告诉你怎么找的

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 在这个地址下点击

official Instant Client site.  拉到最后 Related Developer Centers 里面点     “PHP – OCI8 extension”

然后选项卡 downloads  点OCI8  到   http://pecl.php.net/package/oci8

然后怎么下载就不多说了

 

到这里完成下载两个zip包,然后就是配置PHP

第三,解压下载的第一个文件,到电脑任意目录,解压后得到文件目录 instantclient_12 _1  建议把后面的 “_12_1″去掉,以后改版本就不用动环境变量了

进入这个目录后双击打开 adrci.exe

得到如下命令行窗口,证明这个客户端在你本地可用

复制目录,我的是  F:\dev\instantclient  配置到系统的path环境变量,

 

第四,解压下载的dll的压缩包,复制其中的  php_oci8.dll  php_oci8_11g.dll  php_oci8_12c.dll  我目前就是这三个,到php的扩展包文件,通常是 ……/php/ext/目录下

其实可以不替换,不过建议还是替换一下好,

然后打开php.ini 把扩展打开,最后一个是后来加进去的,php本来没有,反正上面包里有的dll文件都写进去应该错不了,顶多运行php的时候多加载几个库

extension=php_pdo_oci.dll

extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client
extension=php_oci8_12c.dll  ; Use with Oracle 12c   Instant Client

然后重启httpd服务,打开 phpinfo(); 应该能看到

PDO support enabled
PDO drivers mySQL, oci, odbc

 

OCI8 Support enabled
OCI8 DTrace Support disabled
OCI8 Version 2.0.8
Revision $Id: f04114d4d67cffea4cdc2ed3b7f0229c2caa5016 $
Oracle Run-time Client Library Version 12.1.0.2.0
Oracle Compile-time Instant Client Version 10.2

这样就说明扩展打开成功了

 

最后就是连接oracle数据库了

这里给一个实例连接 原文连接 http://www.orczhou.com/index.php/2010/09/php-oci8-oracle/

 1 <?php  
 2 //配置信息
 3 $ora_host = "172.16.1.150";
 4 $ora_port="1521";
 5 $ora_sid = "cop";
 6 $ora_username = "webdev";
 7 $ora_password = "webdev";
 8 $charset = "UTF8"; ### zhs16gbk ###
 9 
10 //构建Easy Connect string
11 //(如果tnsnames.ora中已经有了,可以直接使用Connect Name)
12 $ora_connstr = "(description=(address=(protocol=tcp)
13 (host=".$ora_host.")(port=".$ora_port."))
14 (connect_data=(service_name=".$ora_sid.")))";
15 //连接数据库
16 $conn = oci_connect($ora_username, $ora_password,$ora_connstr);
17 //执行Query,这里$res接收的是一个boolean值
18 $stid = oci_parse($conn, 'select * FROM dq_try_app');
19 $res = oci_execute($stid);
20 
21 //在while循环中使用oci_fetch_array遍历结果。
22 while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
23     
24     foreach ($row as $item) {
25         echo $item."***";
26     }
27     echo "<br>";
28     
29 }
30 //var_dump($stid);   
31 ?>

至此,整个的扩展加连接就完成了

Windows PHP/phpStudy 连接 甲骨文Oracle 数据库 oci8 - 让我们荡起双桨的博客 - CSDN博客

mikel阅读(1041)

来源: Windows PHP/phpStudy 连接 甲骨文Oracle 数据库 oci8 – 让我们荡起双桨的博客 – CSDN博客

好多好多年前,我也玩过一次PHP连接Oracle数据库,因为Oracle不是大众民用所以使用到的概率也很低。今天难得遇到了一个配置的机会,就要试试咯。

一般我们开启扩展支持,只需要在php.ini中打开扩展就可以,比如要连接oracle数据库,我们就只要打开 php_oci8.dll 和 php_oci8_11g.dll 就可以了。但是我们打开后,查看phpinfo()并没有开启,也没错误提示这个问题就有点大,经过一番百度百度后,回想起来,还需要安装客户端的事情,所以这里我们还需要下载oracle的客户端,这里我们就不要下载带工具的1.5G的了,直接下载只有客户端支持库的,官方要注册麻烦,这里同我收藏的。。。

32位:http://pan.baidu.com/s/1ntqTIzf

64位:http://pan.baidu.com/s/1hq7YVQk

注意这里的32位,64位不是指的系统,而是要根据你安装的PHP的位数,就好比今天我纠结了好久的为什么不行,然后注意到安装的是64位的客户端,按照系统看的。而PHP却是32位的(我是用的是集成环境 phpStudy),后更换成32位的客户端安装就真的可以了。

所以对于PHP开启Oracle扩展有问题的,就有如下几点要注意。

1.PHP.ini中开启扩展,最好2个都开启,这样就不需要管客户端版本

2.安装Oracle客户端,不安装单独扩展是不行的

3.注意客户端和PHP的位数,32就配32,64就配64

免安装oracle客户端数据库,使用PL/SQL连接服务器oracle数据库 - skyfull - 博客园

mikel阅读(853)

来源: 免安装oracle客户端数据库,使用PL/SQL连接服务器oracle数据库 – skyfull – 博客园

一般要连接oracle数据库,我们都是用PLSQL Developer。然而它必须在本地安装一个oracle客户端,或者精简版的客户端才有用。这样就非常麻烦了,但是有一款叫Instant Client的软件就能很好的解决我们的问题。

Instant Client官网下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html ,选择与操作系统信息对应的版本下载。

接受许可条款,然后选择需要的版本,下载之后解压至任意位置。

 

(我自己有一个PL/SQL和InstantClient的集成包。地址:链接: http://pan.baidu.com/s/1ntF3vPf   密码: 2j1m)

下面按照从网盘里下载的文件为例操作(从官网下载的操作基本一致),下载后我解压至D:\PLSQL Developer v11.0.2.1766

修改InstantClient/NETWORK/ADMIN/tnsnames.ora里面的内容并保存。

# tnsnames.ora Network Configuration File: F:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

easdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.209.25)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = easdb)
)
)

 

配置环境变量

将在Path中添加D:\PLSQL Developer v11.0.2.1766\instantclient_12_1;

新建一个系统变量TNS ADMIN:D:\PLSQL Developer v11.0.2.1766\instantclient_12_1\NETWORK\ADMIN;

新建一个系统变量:NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK;   (添加之后使用PL/SQL查看数据库中文不会乱码)

 

安装PLSQLDeveloper,完成之后打开PL/SQL。点击确定,就能成功登陆。

 

Oracle 11G Client 客户端安装步骤(图文详解) - CSDN博客

mikel阅读(766)

来源: Oracle 11G Client 客户端安装步骤(图文详解) – CSDN博客

http://www.cnblogs.com/jiguixin/archive/2011/09/09/2172672.html

下载地址:

http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_client.zip

先将下载下来的ZIP文件解压,并运行setup.exe文件。

image

image

image

image

执行到第四步之后,出现错误,直接点全部忽略就可以了。

image

image

image

把上面的步骤执行完了,那么就该等待ORACLE的安装了。

image

 

现在这个就搞定了

1。安装Oracle 11G Client后可以在开始菜单中找到

选择NETCA->本地网络服务名配置

选择添加本地网服务名配置

这里的服务名:指的是也就是数据库名

在网络中架设C/S 客户端选择TCP类型

输入服务器的IP地址,选用默认端口

测试下是否连通

默认是连不成功以,更换用户试试

scott

成功啦

这个服务名是保存在客户机上的,可以自己随意填写,但在PL/SQL连接中用到 如:SQLplus scott/Y124@mhis  看的懂吧

好啦

Android出现:Your project path contains non-ASCII characters. - CSDN博客

mikel阅读(832)

 

来源: Android出现:Your project path contains non-ASCII characters. – CSDN博客

导入Project的出现:

Error:(1, 0) Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See http://b.android.com/95744 for details.

This warning can be disabled by using the command line flag -Dcom.Android.build.gradle.overridePathCheck=true, or adding the line ‘com.Android.build.gradle.overridePathCheck=true’ to gradle.properties file in the project directory.

其实很好解决啦,就是你的工程项目路径或者项目名称包含了中文,修改相关的名称就好了!

出现这个错误说明什么,咱们还是要专业一点儿,别再项目路径名称中去搞另类弄什么中文名,要专业!!!!!

window7+wamp环境配置Oracle数据库连接 - phpdragon - 博客园

mikel阅读(944)

来源: window7+wamp环境配置Oracle数据库连接 – phpdragon – 博客园

最近开发需要使用的oracle数据库!翻看了PHP手册,也在网上找了些帖子!
功夫不负有心人,花费了四五个小时的时间,终于找到了Oracle的配置方法。
下面就讲解下如何配置Oracle数据库连接吧!

本人使用的开发环境是Win7+wamp环境:
首先我们要扩展Oracle数据库连接,先去官网下载客户端连接库。
地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

我这里就用最新的连接库instant Client for Microsoft Windows (32-bit)来做讲解吧!
这里下载客户端连接库,要先注册一个Oracle帐号(免费注册)!

1、下载好以后,我这里把下载包解压到D盘符,路径为D:\PLSQL\instantclient_11_2。
2、在D:\PLSQL\instantclient_11_2文件夹下找到oci.dll、oraociei11.dll、orannzsbb11.dll这三个文件。

把这三个文件放置在C:\Windows\System32系统文件目录下。

3、找到PHP的配置文件php.ini文件,打开并找到这一行extension=php_oci8.dll ,配置如下
;extension=php_oci8.dll
;extension=php_oci8_11g.dll
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll

修改配置为:
extension=php_oci8.dll
;extension=php_oci8_11g.dll
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_odbc.dll
也就是删除extension=php_oci8.dll、extension=php_pdo_oci.dll、extension=php_pdo_odbc.dll

前面的注释符 “;”。开启php的php_oci8、php_pdo_oci、php_pdo_odbc扩展。

4、 配置系统环境变量

NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
TNS_ADMIN:D:\PLSQL\instantclient_11_2

 

5、重启apache服务,现在我们就可以使用phpinfo()函数来查看是否开启了OCI扩展了!
如果显示如下,说明你已经配置成功!那么现在,你的开发环境已经支持Oracle数据库了!

现在我们写一段数据库链接测试代码,看看是否成功链接!

复制代码
1 if ($conn = oci_connect("用户名",'密码','127.0.0.1:1521/test')) {
2     echo "SUCCESS ! Connected to database\n";
3 } else {
4     echo "Failed :-( Could not connect to database\n";
5 }
6 oci_close($conn);
7 
8 exit;
复制代码

 

 

 

关于Oracle管理软件PL/SQL Developer的文件配置,请看我的下篇博文:

window7环境,不安装Oracle,使用PL/SQL Developer结合oracle精简客户端,管理Oracle数据库

http://www.cnblogs.com/phpdragon/archive/2012/06/03/2532859.html

DBGridEh Footer的设置和使用 - CSDN博客

mikel阅读(2210)

DBGridEh的Footer的设置。DBGridEh物有的Footer,极大地方便用户,能通过增加Footer,显示字段的和(小计)和其它特殊的统计要求。

来源: DBGridEh Footer的设置和使用 – CSDN博客

    DBGridEh拥有Foote功能r,极大地方便用户。能通过在DBGridEh的底部增加Footer行,可以显示相关提示字符和字段的(合计、平均值、行数等)功能,以及其它特殊的统计要求。操作如下:

    一、语句说明

    1、设置Footer行数

DBGrideh1.FooterRowCount:=1; // 定义行数

    2、增加Footer

DBGridEh1.Columns[0].Footers.Add; // 加入Footer首行

DBGridEh1.Columns[0].Footers.Add; // 加入Footer次行

    3、删除Footer

DBGridEh1.Columns[0].Footers.Delete(1); // 删除Footer

    4、Sum合计操作

DBGridEh1.SumList.Active:=True; // 合计操作

DBGridEh1.SumList.Active:=False; // 取消合计操作

    5、Footer显示颜色

DBGridEh1.FooterFont.Color:=clRed; // 字体色

DBGridEh1.FooterColor := clYellow; // 背景色

    6、Footer数据类型

DBGrideh1.Columns[0].Footer.ValueType:=fvtStaticText; //  定义Foolter数据类型

    7、Footer显示样式

DBGrideh1.Columns[0].Footer.Alignment:=tacenter;        // 标题字符对齐方式

   taRightJustify  // 右对齐

   taLeftJustify  // 左对齐

   taCenter // 居中对齐

    8、Footer数据类型

DBGrideh1.Columns[0].Footer.ValueType:=fvtStaticText; // 定义Foolter数据类型

TFooterValueType = (fvtNon, fvtSum, fvtAvg, fvtCount, fvtFieldValue, fvtStaticText);

    fvtNon // 无

    fvtSum // 合计数

   fvtAvg //  平均值

   fvtCoun // 行数

   fvtFieldValue // 字段数据

   fvtStaticText) // 静态文本

   9、Footer数据显示格式

DBGrideh1.Columns[7].Footer.DisplayFormat:=’#0.00′; // 显示格式

DBGrideh1.Columns[7].Footer.DisplayFormat:=’###,###,##0.00′; // 显示格式化

   10、读取Footer的值

   通过函数 DBGridEh1.GetFooterValue(行数,DBGridEh1.Columns[n]))获取。 第1个参数:Foolter行数:0..n 。第2个参数TColumns类型,Columns[n]中的n,是列数0..ount-1。例:

FloatValue:=StrToFloat(DBGridEh1.GetFooterValue(0,DBGridEh1.Columns[7])); // 参数0,Footer的第1行, Columns[7]第8列的Sum值

    二、实用语句

   1、加入Footer

DBGrideh1.FooterRowCount:=1; // 定义合计化为 1行

DBGrideh1.SumList.Active:=True; // 确定使用合计 列

DBGridEh1.FooterFont.Color:=clRed; // 字体色
DBGridEh1.FooterColor := clYellow; // 背景色

    2、Footer加入字符Column

如:设置第1列,在Footer显示 “合计”字符

DBGrideh1.Columns[0].Footer.ValueType:=fvtStaticText; // 定义合计标题类型

DBGrideh1.Columns[0].Footer.Value:=’合计’; // 合计标题显示字符

DBGrideh1.Columns[0].Footer.Alignment:=tacenter; // 标题字符对齐方式

DBGrideh1.Columns[0].Footer.Color:= clBlue;

    3、Footer加入合计Column

如,设置第8列,作为合计字段

DBGrideh1.Columns[7].Footer.ValueType := fvtSum; // 合计列的类型

DBGrideh1.Columns[7].Footer.DisplayFormat:=’#0.00′; // 格式化

DBGrideh1.Columns[7].Footer.Alignment := taRightJustify; // 设置对齐方式

    4、Footer取列的平均值

如,设置第5列flooter,作为平均值

DBGrideh1.Columns[4].Footer.ValueType := fvtAvg;  //  平均值

DBGrideh1.Columns[4].Footer.DisplayFormat:=’#0.00′; // 格式化

DBGrideh1.Columns[4].Footer.Alignment := taCenter; // 设置对齐方式

    三、事件

    1、OnShow事件初始化(设置)Footer

procedure TFrom1.OnShow(Sender: TObjec);

begin

// 设置Footer

  DBGridEh1.Flat:=True;

  DBGridEh1.FooterRowCount:=2; // Footer行数

  DBGridEh1.FooterColor:=clYellow; // 背景色

  DBGridEh1.FooterFont.Color:=clRed; // 前景色

  DBGridEh1.Columns[0].Footers.Add; // 加入Footer首行

// 设置首行第1列

  DBGridEh1.Columns[0].Footers[0].ValueType:=fvtStaticText; // 显示文本

  DBGridEh1.Columns[0].Footers[0].Value:=’合计’;

  DBGridEh1.Columns[0].Footers[0].Alignment:=taCenter; // 中心对齐

  DBGridEh1.Columns[0].Footers.Add; // 加入Footer次行

// 设置首行第2列

  DBGridEh1.Columns[0].Footers[1].ValueType:=fvtCount; // 计数

  DBGridEh1.Columns[0].Footers[1].FieldName:=’编号’; // 字段名

  DBGridEh1.Columns[0].Footers[1].Alignment:=taCenter; // 中心对齐

  DBGridEh1.Columns[3].Footers.Add; // 加入首行第4列

// 设置首行第4列

  DBGridEh1.Columns[3].Footers[0].ValueType:=fvtSum; // 数据类型:合计

  DBGridEh1.Columns[3].Footers[0].FieldName:=’金额’; // 字段名

  DBGridEh1.Columns[3].Footers[0].DisplayFormat:=’#,###,###.00′; // 显示格式

  DBGridEh1.Columns[3].Footers.Add; // 加入次行第4列

// 设置次行第4列

  DBGridEh1.Columns[3].Footers[1].ValueType:=fvtFieldValue; // 数据类型:字段值

  DBGridEh1.Columns[3].Footers[1].FieldName:=’账号’; // 字段名

  DBGridEh1.Columns[3].Footers[1].Font.Style:=[fsBold]; // 文字格式

  DBGridEh1.Columns[3].Footers[1].Font.Color:=clBlue; // 文字尺寸

  DBGridEh1.SumList.Active:=True; // 确定 统计合计

end;

2、GetFooterParams事件,动态修改背景、字体颜色和Cell颜色

procedure TFrom1.DBGridEh1GetFooterParams(Sender: TObject; DataCol,Row: Integer; Column: TColumnEh; AFont: TFont; var Background: TColor;

var Alignment: TAlignment; State: TGridDrawState; var Text: String);

begin

  if Column.Index=7 then // 通过列名访问

// if Column.Field.FieldName=’金额’ then // 通过字段名访问

  Begin

    if Text<>” then

    if StrtoFloat(Text)>1000 then

    begin

      Column.Color:=clRed; // 修改Column的Cell列的背景色

      Column.Font.Color:= clBlue; // 修改Column的Cell列的字符色

      Column.Footer.Color:= clBlue; // 修改Column的Footer的背景色

      Column.Footer.Font.Color:= clRed; // 修改Column的Footer的字符色

    End

    else begin

      Column.Color:=clBlue;

      Column.Font.Color:= clRed;

      Column.Footer.Color:= clRed;

      Column.Footer.Font.Color:= clBlue;

    end;

  end;

end;

彻底解决Delphi的DBGrid控件鼠标滚轮问题(转) - neights - 博客园

mikel阅读(1920)

来源: 彻底解决Delphi的DBGrid控件鼠标滚轮问题(转) – neights – 博客园

Delphi的DBGrid控件对鼠标滚轮的支持有问题,不仅不能连续滚动,显示的内容还会错误。

在网上找了很多代码段,发现大家都只是针对一个Form页面提出解决方法,而且这些方法都存在一个同样的问题,那就是,如果DBGrid控件里正在进行编辑,则鼠标滚轮根本不起作用。

结合这些方法,本人提出了一个通用的解决方案,这个方案只需要在应用程序的主Form里加入处理程序就可以达到整个应用程序的所有DBGrid控件都得到支持。

原理是:当有鼠标滚轮事件发生时判断程序当前激活的界面里激活(或者是获得焦点)的控件类名如果是TDBGrid(当未处于编辑状态时是这个类名)或者是TDBGridInplaceEdit(当DBGrid处于编辑状态时是这个类名)则按加入的程序进行相应的滚动处理。

具体如下:

注意,只需要在主Form里按以下加入红色的代码段即可。

 

 

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure OnMouseWheel(var Msg :TMsg;var Handled:Boolean); //新加的鼠标滚轮处理程序
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

 

{$R *.dfm}

 

//新加的鼠标滚轮处理程序

procedure TForm1.OnMouseWheel(var Msg :TMsg;var Handled:Boolean);
begin
try //注意,这里使用容错处理的目的是屏蔽可能引起的错误
if (Msg.message = WM_MouseWheel)
and ((Screen.ActiveForm.ActiveControl.ClassName=’TDBGrid’)
or (Screen.ActiveForm.ActiveControl.ClassName=’TDBGridInplaceEdit’)) then begin
if Msg.wParam > 0 then
SendMessage(Screen.ActiveForm.ActiveControl.Handle,
WM_VSCROLL,
SB_PAGEUP, //SB_PAGEUP按页上滚,SB_LINEUP按行上滚
0)
else
SendMessage(Screen.ActiveForm.ActiveControl.Handle,
WM_VSCROLL,
SB_PAGEDOWN, //SB_PAGEDOWN按页下滚,SB_LINEDOWN按行下滚
0);
Handled:= True;
end;
except
end;
end;

 

//在Form的OnCreate事件里加入以下截获鼠标滚动事件到自己加的处理程序
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=OnMouseWheel;
end;

end.