写控件中一个小问题,大伙来看看.......... 在线等待.....(100) (100分)

  • 主题发起人 Puma Wang
  • 开始时间
P

Puma Wang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Delphi 6 里想做一个实现定时读取数据库和修改数据库的小工控控件,
我 如下代码 老是在adcMaster.Execute 提示 :
“[Microsoft][ODBC 驱动程序 管理器] 未发现数据源名称并且未指定默认驱动程序”
的错误。

数据库是 SQL Server 7.0 和2000 试过都一样的错。以下是简单的示意代码 :
interface

uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls,ADODB;

type
TTestPanel = class(TCustomPanel)
private
{ Private declarations }
Timer1 :TTimer ;
adcMaster :TADOCommand ;

FConnection :TADOConnection ;
FTimerEnabled: Boolean;

Procedure DoUpdate(sender :TOBject) ;

procedure SetTimerEnabled(const Value: Boolean);
procedure SetConnection(const Value: TADOConnection);

procedure SetadcMaster ;
procedure SetTimer ;
procedure SetConn ;
protected
{ Protected declarations }
public
{ Public declarations }
Constructor Create(AOwner :TComponent) ;override ;
Destructor Destroy ;override ;
published
{ Published declarations }
property TimerEnabled :Boolean Read FTimerEnabled write SetTimerEnabled Default True ;
property Connection :TADOConnection Read FConnection Write SetConnection ;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('PumaTestLable', [TTestPanel]);
end;

{ TTestPanel }

constructor TTestPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
SetAdcMaster ;
SetTimer ;
SetConn ;
end;

destructor TTestPanel.Destroy;
begin
if assigned(Timer1) then Timer1.Destroy ;
if assigned(adcMaster) then adcMaster.Destroy ;
inherited;
end;

procedure TTestPanel.DoUpdate(sender: TOBject);
begin
if (assigned(FConnection)) and FConnection.Connected then
Begin

adcMaster.CommandText :='insert into OnHand Values ('+ Quotedstr('003') +
',getDate(),'+Quotedstr('This is Address')+')' ;
adcMaster.Execute ; // 就这里出错!!!!!
End ;
end;

procedure TTestPanel.SetadcMaster;
begin
if (assigned(adcMaster)) then exit ;
if csDesigning in ComponentState then exit ;
adcMaster :=TADOCommand.Create(self);
if assigned(FConnection) then
adcMaster.Connection :=FConnection ;

end;

procedure TTestPanel.SetConn;
begin
if not assigned(Connection) then
Begin
FConnection :=TADOConnection.Create(self) ;
FConnection :=Connection ;
if assigned(adcMaster) then
adcMaster.Connection :=FConnection ;
End ;
end;

procedure TTestPanel.SetConnection(const Value: TADOConnection);
begin
FConnection := Value;
end;

procedure TTestPanel.SetTimer;
begin
if csDesigning in ComponentState then exit ;
Timer1 :=TTimer.Create(self);
Timer1.Interval :=1000 ;
Timer1.OnTimer :=DoUpdate ;
Timer1.Enabled :=True ;
end;

procedure TTestPanel.SetTimerEnabled(const Value: Boolean);
begin
FTimerEnabled := Value;
end;
end.

兄弟们 帮我看看。
 
写控件我还没有开窍。:-(

在控件里引用一个 ADOCommand 然后执行,这样写是不是不行呀?
 
谁能留下个QQ ,帮帮我好吗?
 
问题太简单不屑回答,还是大家都不知道?????
谁能帮我搞定我再奖励100 分。
 
我想你这里因该有问题
getDate() 函数的返回值因该加字符串
 
哇你整个构驾都有问题建议你看一下ADODB。PAS文件
和ADOCONED。PAS不懂再问我
 
wyismail :
谢谢你回答,
1。为什么在 Form?里执行的 TADOCommand 好好的,到了这里照样也是 TADOCommand
就不行呢?
2。我看了 ADODB.pas ,我去修改了代码,ADOCommand 用CommandObject :_Command 来代替。
可是 创建时 :
CommandObject := CreateADOObject(CLASS_Command) as _Command;
老说 :CreateADOObject UnDeclare.. 是不是我的方法不对,还是根本不用,那该怎样呢?
 
将DoUpdate改成下面这段看看,不过老兄你种写法实在不值的推荐
procedure TTestPanel.DoUpdate(sender: TOBject);
begin
if (assigned(FConnection)) and (Assigned(adcMaster)) and (FConnection.Connected) then
Begin
if adcMaster.Connection <> FConnection then
adcMaster.Connection := FConnection;
adcMaster.CommandText :='insert into OnHand Values ('+ Quotedstr('003') +
',getDate(),'+Quotedstr('This is Address')+')' ;
adcMaster.Execute ; // 就这里出错!!!!!
End ;
end;
 
小隐 :
还是前面的报错,没有变化。
我的问题的焦点是,在控件中去写代码直接去更新数据库,能用Dataset 去select ..
可用ADOCommand 做Update 或者Insert 就出错。
同样的代码 我要是不在控件中执行,就可以,到了控件里就出错。
你知道是什么原因吗?
刚开始学写控件,让你见笑了。
 
给个妹儿,我把QQ给你
 
我的QQ : 70513654
 
谢谢小隐了。
 
顶部