㈠ delphi 中adoconnection连接断开后的自动重连接问题
一般如果你的项目里使用的是数据感知控件比如dbedit,dbmemo
如果断开了,那基本数据就没了!再连接也是刷新的
如果你用的只是edit memo那可以手动重新连接,此时是否刷新现有的控件里的数据是可控的。
如果不涉及数据的刷新,可以用TTIMER 频率不可设太高,检测下如果断了,就retry
㈡ delphi动态设置数据库连接
SQLConnection1.Params.clear
然后再添上你自己修改的值
SQLConnection1.Params.Values['ServerName'] := '192.168.0.112';
SQLConnection1.Params.Values['Database'] := 'trackData';
SQLConnection1.Params.Values['User_Name'] := 'sa';
SQLConnection1.Params.Values['Password'] := '123456';
SQLConnection1.Open;
㈢ delphi SO_KEEPALIVe保活机制,和断线重连
服务端有客户端连上来后,Accept就会返回一个套接字,然后你起一个线程一直recv这个套接字,当客户端发数据来的时候revc就会返回接收数据的长度,如果客户端断了它就返回-1(或SOCKET_ERROR),这里你就把这个socket关闭,退出线程就行了。至于重连那应该是客户端的事,客户端当send时,如果断开它也会返回-1(或SOCKET_ERROR),这时你再重连就行了
㈣ Delphi中数据库连接
假设你的数据库名字为“我的数据库.mdb”,你可以在form的OnCreat事件写代码
procere TForm1.FormCreate(Sender: TObject);
begin
ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(ParamStr(0))+'我的数据库.mdb;Persist Security Info=False';
end;
这样系统就能自动连接可执行文件所在文件夹下的数据库文件了
㈤ delphi连接mysql出现MySql server has gone away怎么解决
MySQL server has gone away 问题的解决方法
mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了。
造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入)。
产生这个问题的原因有很多,总结下网上的分析:
原因一. MySQL 服务宕了
判断是否属于这个原因的方法很简单,进入mysql控制台,查看mysql的运行时长
mysql> show global status like 'uptime';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Uptime | 3414707 |
+---------------+---------+
1 row in set或者查看MySQL的报错日志,看看有没有重启的信息
如果uptime数值很大,表明mysql服务运行了很久了。说明最近服务没有重启过。
如果日志没有相关信息,也表名mysql服务最近没有重启过,可以继续检查下面几项内容。
原因二. mysql连接超时
即某个mysql长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭。
此后再通过这个connection发起查询的时候,就会报错server has gone away
(大部分PHP脚本就是属于此类)
mysql> show global variables like '%timeout';
+----------------------------+----------+
| Variable_name | Value |
+----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| wait_timeout | 28800 |
+----------------------------+----------+
10 rows in set
wait_timeout 是28800秒,即mysql链接在无操作28800秒后被自动关闭
原因三. mysql请求链接进程被主动kill
这种情况和原因二相似,只是一个是人为一个是MYSQL自己的动作
mysql> show global status like 'com_kill';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_kill | 21 |
+---------------+-------+
1 row in set原因四. Your SQL statement was too large.
当查询的结果集超过 max_allowed_packet 也会出现这样的报错。定位方法是打出相关报错的语句。
用select * into outfile 的方式导出到文件,查看文件大小是否超过 max_allowed_packet ,如果超过则需要调整参数,或者优化语句。
mysql> show global variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)
修改参数:
mysql> set global max_allowed_packet=1024*1024*16;
mysql> show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)
以下是补充:
应用程序长时间的执行批量的MYSQL语句。执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理。都容易引起MySQL server has gone away。
今天遇到类似的情景,MySQL只是冷冷的说:MySQL server has gone away。
大概浏览了一下,主要可能是因为以下几种原因:
一种可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可。
还有一种可能是因为某些原因导致超时,比如说程序中获取数据库连接时采用了Singleton的做法,虽然多次连接数据库,但其实使用的都是同一个连接,而且程序中某两次操作数据库的间隔时间超过了wait_timeout(SHOW STATUS能看到此设置),那么就可能出现问题。最简单的处理方式就是把wait_timeout改大,当然你也可以在程序里时不时顺手mysql_ping()一下,这样MySQL就知道它不是一个人在战斗。
解决MySQL server has gone away
1、应用程序长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。或者长时间闲置数据库连接(我的项目就是这样)
解决方案:
在my.cnf文件中添加或者修改以下两个变量:
1 wait_timeout=2880000 2 interactive_timeout = 2880000
关于两个变量的具体说明可以google或者看官方手册。如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
1 sql = "set interactive_timeout=24*3600";
2 mysql_real_query(...)
2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理
解决方案:
在my.cnf文件中添加或者修改以下变量:
1 max_allowed_packet = 10M(也可以设置自己需要的大小)
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。
最近在做一个项目,需要程序24小时开着,而中间会有很多闲置时间,于是每天早上过来第一次操作数据库时,就出现了“MySQL server has gone away”这样的错误提示,而这个问题的原因是由于数据库连接由于长时间没有操作而会被自动关闭。解决这个问题,我的经验有以下两点,或许对大家有用处:
第 一种方法:
当然是增加你的 wait-timeout值,这个参数是在my.cnf(在Windows下台下面是my.ini)中设置,我的数据库负荷稍微大一点,所以,我设置的值 为10,(这个值的单位是秒,意思是当一个数据库连接在10秒钟内没有任何操作的话,就会强行关闭,我使用的不是永久链接 (mysql_pconnect),用的是mysql_connect,关于这个wait-timeout的效果你可以在MySQL的进程列表中看到 (show processlist) ),你可以把这个wait-timeout设置成更大,比如300秒,呵呵,一般来讲300秒足够用了,其实你也可以不用设置,MySQL默认是8个小 时。情况由你的服务器和站点来定。
第二种方法:
这也是我个人认为最好的方法,即检查 MySQL的链接状态,使其重新链接。 (用mysql_ping())
可能大家都知道有mysql_ping这么一个函数,在很多资料中都说这个mysql_ping的 API会检查数据库是否链接,如果是断开的话会尝试重新连接,但在我的测试过程中发现事实并不是这样子的,是有条件的,必须要通过 mysql_options这个C API传递相关参数,让MYSQL有断开自动链接的选项(MySQL默认为不自动连接),但我测试中发现PHP的MySQL的API中并不带这个函数,你重新编辑MySQL吧,呵呵。但mysql_ping这个函数还是终于能用得上的,只是要在其中有一个小小的操作技巧:
附录:
mysqli_options()
定义和语法
mysqli_options() 函数设置额外的连接选项,用于影响连接行为。
mysqli_options() 函数可以被调用若干次来设置若干个选项。
注释:mysqli_options() 函数可以在mysqli_init()之后和mysqli_real_connect()之前被调用。
语法:
1 mysqli_options(connection,option,value);
connection:必需。规定要使用的 MySQL 连接。
option:必需。规定要设置的选项。可以是下列值中的一个:
MYSQLI_OPT_CONNECT_TIMEOUT - 以秒为单位的连接超时时间
MYSQLI_OPT_LOCAL_INFILE - 启用/禁用 LOAD LOCAL INFILE
MYSQLI_INIT_COMMAND - 在连接到 MySQL 服务器之后的执行命令
MYSQLI_READ_DEFAULT_FILE - 从已命名的文件而不是 my.cnf 中读取选项
MYSQLI_READ_DEFAULT_GROUP - 从 my.cnf 或者 MYSQLI_READ_DEFAULT_FILE 中指定的文件中的已命名组中读取选项
MYSQLI_SERVER_PUBLIC_KEY - 基于 SHA-256 认证的 RSA 公共密钥文件
value:必需。规定option的值。
mysql_ping()
mysql_ping指:本函数可用于空闲很久的脚本来检查服务器是否关闭了连接。
定义和语法
nt STDCALL mysql_ping(MYSQL *mysql);
描述:
检查与服务端的连接是否正常。连接断开时,如果自动重新连接功能未被禁用,则尝试重新连接服务器。该函数可被客户端用来检测闲置许久以后,与服务端的连接是否关闭,如有需要,则重新连接。
返回值:
连接正常,返回0;如有错误发生,则返回非0值。返回非0值并不意味着服务器本身关闭掉,也有可能是网络原因导致网络不通。
错误码:
CR_COMMANDS_OUT_OF_SYNC 命令以不正确的顺序执行
CR_SERVER_GONE_ERROR 服务器连接断开
。。。
语法
mysql_ping(connection)
connection:可选。规定 MySQL 连接。如果未规定,则使用上一个连接。
㈥ delphi连接数据库
不知道你连接的是SQL Server 还是Access?在连接不同的数据库时会有一点差别.
连接到SQL Server:
以下是设置:(以前回答别人的时候写的,这里修改了下)
1,新建Project。
2,在FORM中放入ADOConnection控件。
3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择
“Microsoft OLE DB Provider For SQL Server ”,然后点击“下一步”按钮,
在“连接”页中选择要连接的SQL数据库的路径和数据库的文件名.如果数据库没
有密码,那就可以了,如果有密码,在下面的两个编辑框中输入用户名和密码.
添入
用户名和密码后,点击“测试连接”按钮,出现“测试连接成功”的对话框。
5.把 ADOConnection控件的LoginPromtp设为false.
http://..com/question/26380588.html
连接access第3步有差别.
3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“Microsoft Jet 4.0 OLE DB Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件名.如果数据库没有密码,那就可以了,如果有密码,这时如果点“测试连接”按钮时,出现“初始化提供者时发生错误,测试连接失败,密码无效”的错误提示(看步骤4)。
4,这时点“所有”页,然后双击“Jet OLEDB:Database Password”,出现对话框,添入密码后,选择“连接”页中的“测试连接”按钮,出现“测试连接成功”的对话框。
http://..com/question/16723147.html
设置AdoConnection控件的LoginP。。(忘记怎么写了)属性设置为false
这个属性是设置连接数据库时是否提示输入用户名和密码的。
㈦ Delphi如何与SQL数据库连接
AdoConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=Sample;Data Source=.';
Adoconnection1.LoginPrompt:=False;
Adoconnection1.Connected:=True;
上面这段抄代码为SQL数据库的袭联接方式:最后一句Data Source=. 其中的“.”表示为数据库在本机,如果数据在其它地方,则将点改为IP地址或是服务器名称。 sample是我数据库名,可以改成你自已的,123是密码,也可以改成你自已的
㈧ delphi 中如何实现断网后不退出程序,ADO自动重新连接SQL 数据库
可以在访问或操作数据库时连接,平常可以断开。这样就不会受断网影响了。或者在程序中做个断网检测,检测到后对数据库连接错误做个处理,而不会使程序崩溃或退出。
㈨ delphi如何连接oracle数据库
Delphi作为强大的数据库前端开发工具,提供了很多数据库存取方式的封装控件。对于Oracle的数据存取控件,不管何种数据库引擎,一般都会封装一个Connection作为数据集的连接控件,因此只要设定Connection的相关属性即可,其它dataset控件,如query,table等只要指定此Connection即可,客户端应用程序要连接到Oracle的Schema,一般都需要安装Oracle Client,并使用Net Manager设置客户端可以访问的Oracle Database Server的主机名称及存取协议、Port等信息。可以使用以下的方式连接
dbExpress:dbExpress比较适合连接SQL的数据库,据说效率挺高的。放置一个dbExpress页签下的SQLConnection,在此控件上点击鼠标右键,选择“Edit Connection Properities”功能,并依下图设置即可。其中Database栏位要设置为Oracle Client中设置的服务名,如果需要记住密码,而不用每次连接的时候输入密码,请将 LoginPrompt属性设置为False,设置OK后即可测试将Connected:=True看看是否成功,其它数据处理控件请选择相应dbExpress页签下的控件即可。
不使用控件,比如使用原生的ADO组件,不太建议这种方法,既然Delphi已经做了封装,何必又要回到原始状态呢。以上连接方法都需要安装Oracle Client软件,但是Oracle官方的Client太过庞大,安装非常不便,目前网上有人发布一个精简版的Oracle Client软件,比较小,可以满足连接Oracle的需要,可以去下载这个软件,而不用去安装复杂的官方版本。
下载ODAC控件,此控件不需要安装Oracle Client,而是使用OCI的方式透过TCP/IP协议直接连接到Oracle Server,可以将程序做成瘦客户端,程序分发的时候比较方便。此控件支持Delphi的大部分版本以及C++Builder以及kylix以及.net,而且提供源代码,有兴趣的可以研究一下。具体安装使用方法请参考控件的相关说明以及帮助文档。
㈩ DELPHI中连接数据库有几种方法
在bde
中新建一个别名来!然后连接路径自!就可以在程序中用Tdatabase.Tquery.Ttable.连接了
用TADoconnection连接!
用ODBC建立一个新别名.在delphi可以直接用!(实际上也是通过bde)
还有很多啦!
主要就是用这些