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

请教delphi使用ADO连接数据库失败原因

发布网友 发布时间:2022-04-10 15:52

我来回答

2个回答

懂视网 时间:2022-04-10 20:13

untMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, IniFiles, ExtCtrls, DB, ADODB,ActiveX; type TFrmMain = class(TForm) Timer2: TTimer; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private declarations } public { Public declarations } procedure getXXData(); end; //ADO连接获取数据线程 TAdoThread = class(TThread) protected procedure execute; override; end; var FrmMain: TFrmMain; ConString: string; { 初始化临界区CS变量 } CS: TRTLCriticalSection; implementation uses untabout; {$R *.dfm} { TForm1 }{ 写程序异常日志 } procedure write_error_log(str: string); var F: TextFile; mfile: string; begin try //判断保存日志文件的目录是否存在 if not DirectoryExists(ExtractFilePath(ParamStr(0)) + ‘log‘) then MkDir(ExtractFilePath(ParamStr(0)) + ‘log‘); //按日期及时间设定保存日志的文件名 mfile := ExtractFilePath(ParamStr(0)) + ‘logErrLog_‘ + formatdatetime(‘yyyy-mm-dd‘, now) + ‘.txt‘; AssignFile(F,mfile); if not FileExists(mfile) then Rewrite(F);//如果文件不存在,则创建一个新的文件,并写入 Append(F); //追加写入 Writeln(F,str);//写入并换行 CloseFile(F); except end; end; procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin { 清除线程CS变量 } DeleteCriticalSection(CS); Timer2.Enabled := False; end; procedure TFrmMain.FormShow(Sender: TObject); var clientini: TIniFile; db_server,user,password:string; begin { 获取ini配置信息} clientini := TIniFile.Create(‘.config.ini‘); try if clientini<>nil then begin db_server := trim(clientini.readString(‘database‘,‘db_server‘,‘‘)); user := trim(clientini.readString(‘database‘,‘user‘,‘sa‘)); password := trim(clientini.readString(‘database‘,‘password‘,‘‘)); ConString := ‘Provider=SQLOLEDB.1;Persist Security Info=False;User ID=‘ +user+‘;Password=‘+password+‘;Initial Catalog=Testdb;Data Source=‘+db_server; end; finally clientini.Free; end; InitializeCriticalSection(CS);//初始化线程临界区 end; procedure TFrmMain.Timer2Timer(Sender: TObject); begin Timer2.Enabled := False; TAdoThread.Create(False); end; procedure TFrmMain.getXXData(); var ADOStoredProc1: TADOStoredProc; begin ADOStoredProc1 := TADOStoredProc.Create(nil);//动态创建ADO控件 try try ADOStoredProc1.ConnectionString := ConString;//采用独立的连接字符串 if ADOStoredProc1.Active then ADOStoredProc1.Active := false; ADOStoredProc1.ProcedureName := ‘GetData‘; ADOStoredProc1.Prepared := false; ADOStoredProc1.Parameters.Refresh; ADOStoredProc1.Prepared := true; ADOStoredProc1.ExecProc; except on E:Exception do begin write_error_log(FormatDateTime(‘yyyy-mm-dd hh:nn:ss‘,Now) + ‘>> 执行getXXData时发生异常!错误原因:‘+E.Message ); end; end finally ADOStoredProc1.Free; end; end; { TAdoThread } procedure TAdoThread.execute; begin inherited; FreeOnTerminate := True; //设置线程执行完成后自动释放 {进入线程临界区} EnterCriticalSection(CS); try CoInitialize(nil); //线程中使用ADO,必须调用(需Uses ActiveX) {读取HIS数据} FrmMain.getHisData(FrmMain.hasCharge); CoUninitialize; finally { 离开线程临界区 } LeaveCriticalSection(CS); end; FrmMain.Timer2.Enabled := True; end; end. ============================ 其他解决方法:未验证,资料来自: http://bbs.csdn.net/topics/390958648 ============================ Win7上ADO连接SQLServer过几十分钟后自动断网(被防火墙拦截等)问题终于解决了,困惑了很久 今天终于解决了!方法很简单,和大家共享一下。 问题现象:ADO连接SQLServer过几十分钟后(有的过几周)数据库连接无缘无故断开, 再做数据库操作报错“连接失败”。实际上此时数据库服务器可以ping通, 新创建其他ADO控件连接数据库也没问题。就这个ADO不行了。 问题分析: 刚开始想得比较简单,只要创建个线程或者Timer时时判断ADOConnecton1.Active属性=false不得了么。但实际上因为后台原因 或者服务断开再重连、被防火墙拦截等意外情况发生时ADOConnecton1.Active属性仍然是true!无法判断。 后来想到用ping,如果ping不通那就断开了?!但是ping通了未必说明数据库就能连通!ping无法判断数据库能否连通。 那么线程里面不断执行个select GetDate 之类简单SQL,如果失败就判断数据库断开行不行呢?显然不行, 多用户同时不断连接数据库对服务器压力太大了,不可取。 后来网上查了很多材料,有人提出捕获OleException的方法,既不创建线程和定时器判断数据库是否断开,而是当用户执行操作 发生Ole异常时捕获它,如果是数据库连接错误,那么恢复数据库连接即可,我在他们代码基础上完善了一下,以下是实现代码。 控件: Button1: TButton; ADOConnection1: TADOConnection; Button2: TButton; ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; ApplicationEvents1: TApplicationEvents; 代码: uses ComObj; {$R *.dfm} procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception); var I: integer; begin //请执行如下命令或者其他方法强制产生数据库连接断开情况,以触发如下异常。 //net stop MsSqlServer //net start MsSqlServer if (E is EOleException) and ((E as EOleException).ErrorCode= -2147467259) then begin ADOConnection1.Connected := False; try ADOConnection1.Connected := True; except On E2: Exception do begin MessageDlg(‘重连数据库发生错误:‘#13 + E2.Message, mtError, [mbOK], 0); end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); var sSQL: string; begin sSQL:= ‘Provider=SQLOLEDB.1;Password=YourPassword;Persist Security Info=True;‘ + ‘User ID=sa;Initial Catalog=YourDatabase;Data Source=.‘; with ADOConnection1 do begin LoginPrompt:= false; Connected:= false; ConnectionString:= sSQL; Connected:= true; end; ShowMessage(‘ok‘); end; procedure TForm1.Button2Click(Sender: TObject); begin with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(‘select * from Test‘); Open; end; end;

 

Delphi:ADOConnection连接SQLServer自动断网问题解决

标签:必须   字符   关闭   变量   推荐   res   init   class   you   

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

这个问题可以考虑两方面的情况:
第一,你的sql2000没有打sp3或以上的补丁;
第二,你的sql没有设置账号登陆,可以在(local)(windows
nt)上右键-属性-安全性-选上(sql
server和windows)-确定
问题应该就可以解决了……
delphi中用ADOConnection连接我的本地数据库,但老是报错”测试连接失败...

我想可能是适用于ADO的数据库连接驱动程序没有安装,或者该驱动程序损坏造成的,建议重新安装数据库连接。比如:对于 SQL Server,则重新安装客户端;对于 Oracle,则重新安装 Client;

delphi 中通过ADOQury连接数据库时出现“多步OLE DB 操作产生错误。”是...

猜想你的query里应该是一个update之类的保存数据的sql。然后你保存的内容可能大于某个字段所设置的最大长度,修改你的字段长度就可以了。

通过ADO建立Delphi与SQL Server数据库之间的链接,总是无法连接成功?

按图的顺序一步一步做,试试.SQL服务器一定要打开哟!如果SQL服务器和程序不在一个机器上,且SQL服务的机器是XP系统的话,那就很难说了,SQL一般装在WIN2000上要好办一些,XP防火墙的问题很不好解决.你问题中的提示我见到个.但确实不知道是什么原因,后来只好改装WIN2000问题才解决....

关于DELPHI用ADOQuery连接数据库出现数据类型不被支持的问题_百度知 ...

第一 select后要加空格,不要和后面连到一起,from前也要加空格 第二 从两个表里查数据,要将两个表关联起来 第三 where 后每个条件最好都用括号括起来 第四 把你拼出的字符串中数据库中运行一下,也就是不争程序里,直接在数据库中运行,看一下sql语句是否正确。回答完毕,谢谢。。。

DELPHI中设计登录界面用ADOQuery控件 出现用户登录失败该怎么办_百度...

ADOConnection 创建一个数据库连接 ADOConnection 的loginprompt 属性设为false ADOQuery的connecttion 指向 ADOConnection

我用Delphi开发了一个数据库系统,连接出现问题

1)就是使用windows默认的数据接口odoc(好想是,记不太准名称)在别的机器使用时,需要建立相应的数据连接 第二种就是delphi自带的数据连接程序,在另外机器使用需要安装那个数据库连接程序,在设置相应的操作。使用delphi自带的安装程序生产工具默认是不会附带数据库连接的相应dll,需要自己手动添加。

delphi adoconnection 连接不上,怎么弄

是你数据库链接不上吧!用户名,密码正确?通过connection string 创建试试!可以先测试数据库能否连接成功 数据库没问题,把provider属性LoginPrompt属性设为false

大侠!再次请教你一个问题!关于用delphi的ADO组件对access数据库插入数 ...

添加一个ADOConnection1,设置一下,应该会的吧(这里指定数据库的)添加一个ADOQuery1,设置SQL属性:select * from tablename,我一般都直接写死的,再设置active为true, 有问题的话,没有启动成功的话,检查一下,然后下面是添加数据的代码://***添加数据 ADOQuery1.Insert;ADOQuery1['这里是表...

delphi中使用ADO执行SQL语句时,提示出错:INSERT INTO语法错误。 经测试...

关键字段用中括号,SEX,[language],MTVORVCD就能解决!请关注我的网站:www.csframework.com C#程序设计资料

如何获得delphi的adoconnection1控件连接数据库失败?

失败事件的确没有。但是 先用ADOConnection1.Open方法连接 后用ADOConnection1.Connected属性判断是否连接成功.

delphi判断数据库连接失效 delphi7连接sql数据库 delphi如何连接数据库 delphi连接数据库 delphi连接多个数据库 delphi数据库连接方式 delphi7公用数据库模块 delphi对sql数据库查询 delphi7数据库
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样在家中做出简单又好吃的酸奶小蛋糕? 酸奶麻花有哪些家常做法? 写作(50分)有一家英国报纸以“世界上最大的快乐是什么?”为题,作有... 作文《快乐的大世界》 湖南农大自考什么意思 如何挑选蚬子肉 ...规律算一算1o个人每2个人合影一次一共拍多少张双人照请教_百度知 ... 有10个小朋友照相,每2个人合一张照,要照多少张 我想开网店,可以教我开吗?可我还没满十八岁,但我有银行卡!晚怎么做... 18岁孩子开网上公司!急 平安银行税贷 平安银行的税贷有 机刷一对文玩核桃要多少钱 文玩核桃刷子哪里有卖的 北京哪里卖文玩核桃抛光机 delphi 中如何实现断网后不退出程序,ADO自动重新连接SQL 数据库 vivo y66感觉充电慢,耗电快,怎么回事? 为什么vivo Y66第一次充电要3,4个小时? vivoy66不支持闪充,那么用9v2a和5v1.6a充电器充电速度是不是一样啊 vivoy66充电要充四个多小时才能充满? 十亿以上的土建工程,中介费能有多少? 我介绍一个房地产工程给施工方,协议价约1亿元,大致能拿多少介绍费 1亿1千万的工程信息费给多少钱? 我帮建筑公司介绍一个上亿的工程,要和工司签个居间合同,居间费应该取多少???_百度问一问 我介绍了2亿的工程应得多少中介费? 我是公司员工,给老板介绍了一个一亿的工程,我该拿介绍费用吗? 螺丝拧不开? 我帮建筑公司介绍一个上亿的工程,要和工司签个居间合同,居间费应该取多少??? 我介绍一个10亿的工程给包工头,我应收取多少中介费、是按总价的两个点收取吗? 螺丝拧紧了拧不开怎么办 什么叫下引号? 双引号的右半边叫什么? 下面引号的作用是什么? 上(前)引号和下(后)引号的英文是什么? 写文章在什么情况下打引号 下面引号起什么作用? 什么情况下使用引号?(中文) 电脑自带的office2016要花钱,自己安装了office+2013,从QQ下载的excel表格_百度问一问 Excel表格修改需要购买的吗?为什么我一登进去想要修改它就提示我 说适应版已过期需要购买? 第 联想笔记本更新了w8做表格要付费吗? 需要Excel软件 网上下载都要付费 想找个好心人发一份? 小米手机怎么把灰抖出来? 手机照相抖动跟进灰有关系么? 在Delphi中的ADOConnection连接SQL数据库问题 木锅铲洗不干净泡沫 竹子做的锅铲发霉了要怎么清洗掉 本人英语专业考研,想考山东师范大学的心理学,都需要考什么科目 山东师范大学心理学专硕347书目有哪些 山东师范大学发展与教育心理学考研书目 高分求关于山东师范大学应用心理学考研,是报考学术型还是专业型(应用心理硕士)?