dtabase.open的时候有没有什么错误提示?
解决方案 »
- 怎样将一个excel中的第二行至最后一行,复制到另一个excel中的第二行至最后一行
- 怎么不显示异常信息?
- 为何SOCKET接收到PCHAR类型数据无法读取?
- 如何用richedit实现逐行显示,其数据是从数据库中提取。(数万条记录)
- 谁有 GDI+ 的单元文件?有帮助文件就更好了。
- 关于时间的查询!!!
- web app debugger 类型的服务程序怎么发布? hairun(莘之·) 在吗?
- 笑话
- 边个可以话比我知,installshieldprofessional6.21的安装密码
- 如何在delphi中实现与sql server数据库连接
- 将DBGrid内容显示到Excel中
- 怎样用DELPHI找到工作,需要学什么?请各位指教
try
Service.DataBase.Open;
except
On E : Exception do
begin
FStream := TFileStream.Create(.......);
FStream.Write(E.Message);
end;
end;
....
用文本方式得到的错误竟然是"Unknow Database";
但是同样的设置,如果放在一个有窗体的程序中,完全正常.所以我觉得应该不可能是Database设置的问题吧?
不知道是为什么.....
database.connect 和database.open有什么不同吗?
数据库服务器跑在我的本机上,机器上把常用的几个协议都装好了的.刚才发了信给一个台湾的朋友,他告诉我说这是由于控制面板的机制造成的,很难解决,劝我要不就不要用Service,不要就不要用Database.
但是我不用database,直接用query也是连接不上的.看来我得放弃Service,把程序写成一个没有窗体的应用程序算了,真是不爽!
而且别说这个啦,我在未运行的Delphi IDE里边点属性页都可以改变Connect属性的值都是完全正常的.但是就是在程序里运行不正常.
我把例子的源码贴出来,希望哪位有兴趣的可以试一试.program Project1;uses
SvcMgr,
Unit1 in 'Unit1.pas' {Service1: TService},
Unit2 in 'Unit2.pas',
Unit3 in 'Unit3.pas' {DataModule3: TDataModule};{$R *.RES}begin
Application.Initialize;
Application.CreateForm(TService1, Service1);
Application.CreateForm(TDataModule3, DataModule3);
Application.Run;
end.
-------------------------------------------------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
unit2,unit3, DB, DBTables, WSSockets;type
TService1 = class(TService)
Database1: TDatabase;
procedure ServiceExecute(Sender: TService);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;var
Service1: TService1;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure TService1.ServiceExecute(Sender: TService);
var
Thread : TestThread;
begin
Thread.Create(false);
While not terminated do
ServiceThread.ProcessRequests(false);
end;end.
--------------------------------------------------------------------
unit Unit2;interfaceuses
Classes,unit3,SysUtils;type
testThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;implementation
uses unit1;{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure bvb.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }{ bvb }procedure testThread.Execute;
var
DM : TDataModule3;
F : TFileStream;
begin
{ Place thread code here }
try
Service1.Database1.Open ;
except
On E : Exception do
begin
F:=TFileStream.Create ('C:\001.log',fmCreate);
F.Write(E.message,200);
F.Free ;
end;
end; DM := TDataModule3.Create(Service1) ;
DM.Query1.Close;
DM.Query1.SQL.Clear ;
DM.Query1.SQL.Add('select * from table');
try
DM.Query1.Open;
except
On E : Exception do
begin
F:=TFileStream.Create ('C:\002.log',fmCreate);
F.Write(E.message,200);
F.Free ;
end;
end;
end;end.
---------------------------------------------------------------
unit Unit3;interfaceuses
SysUtils, Classes, DB, DBTables;type
TDataModule3 = class(TDataModule)
Query1: TQuery;
private
{ Private declarations }
public
{ Public declarations }
end;var
DataModule3: TDataModule3;implementation
uses unit1;{$R *.dfm}end.
---------------------------------------------------------------
其中,until1是Service程序,里边有一个Database.Until2是线程程序;Until3是一个DataModule,里边有一人Query,它的DatabaseName指向刚才的那个Database的DatabaseNmae.