我想在控件中接受一dataset对象,但我并不创建它,只是得到它的部分信息。
比如简化一下,我只需得到表的名称
我写了如下代码:
private
tablename:string;
published
property MyDataSet:TDataSet write SetMyDataSet;
...implementation
procedure TMyGrid.SetMyDataSet(Value: TDataSet);
begin
if value.Active then
tablename := ...;//这句怎么写,如何得到表名称
end;另外即使我随便写:
procedure TMyGrid.SetMyDataSet(Value: TDataSet);
begin
tablename := 'hello';
end;
这个控件在安装后,不能使用,报了很多错误,甚至delphi都无法关闭。请高手帮忙指点一下。
我是第一次写控件,有经验的朋友可以随便给点建议,分自然不在话下。
比如简化一下,我只需得到表的名称
我写了如下代码:
private
tablename:string;
published
property MyDataSet:TDataSet write SetMyDataSet;
...implementation
procedure TMyGrid.SetMyDataSet(Value: TDataSet);
begin
if value.Active then
tablename := ...;//这句怎么写,如何得到表名称
end;另外即使我随便写:
procedure TMyGrid.SetMyDataSet(Value: TDataSet);
begin
tablename := 'hello';
end;
这个控件在安装后,不能使用,报了很多错误,甚至delphi都无法关闭。请高手帮忙指点一下。
我是第一次写控件,有经验的朋友可以随便给点建议,分自然不在话下。
你的方法不行
只有TTable, TADOTable之类的组件才有TableName属性
只有TTable、TADOTable之类的组件才有TableName属性
先抛开这个问题不谈,假设我的是ADOTable,这个控件还是不正确啊!!!
关键是如何写这个控件,希望大家不吝赐教!!!
TADOTable(Value).TableName := ...;
if Value Is TTable Then
TTable(Value).TableName:='';
你为了得到一个表名,却来传整个table过来也太不合算了吧
Windows, Messages, SysUtils, Classes, Graphics, Controls, Dialogs,TypInfo,
Db, StdCtrls, ComCtrls;type
TMyEdit=Class(TEdit)
private
FTableName:String;
FDataset:TDataset;
procedure SetDataset(Value:TDataset);
public
published
Property Tablename:String read FTableName write FTableName;
property Dataset:TDataset read FDataset write setdataset;
end;procedure Register;implementationprocedure TMyEdit.SetDataset(Value: TDataset);
Var
PropInfo:PPropInfo;
begin
if Value <>nil then
begin
PropInfo:=GetpropInfo(Value,'Tablename',[]);
if PropInfo<>nil then
begin
FTableName:=GetPropValue(value,'TableName');
end
else
FTableName:='';
if FDataset<>Value then
FDataset:=Value;
end
else
FDataset:=Nil;
end;
procedure Register;
begin
RegisterComponents('Win32', [TMyEdit]);
end;end.
谢谢zjy6631(刘阿木)的代码,使我认识以前代码的不够正规。也许我说的不够明确,我的目的是传进来一个dataset,然后分析得到它的结构
以xml的格式记录下它的内容(仅仅是涉及的表名称和字段名),因为我不需要其中的数据,所有觉得在控件中给它生成一个dataset是浪费资源的。
我之前的代码是没有问题的,现在我感觉关键的问题是在这里:
property Dataset:TDataset read FDataset write setdataset;
这是个对象属性,那么是否一定要生成一个对应的对象呢?
至于错误完全是RTL的错误,导致delphi都不能够关闭。
我使用的是delphi6。
再次感谢楼上的各位弟兄。
能否提示一下如何分析dataset的commandtext我在原码中逛了一圈,毫无收获,但adodataset倒是可以的。
可以在传过去ADODataSet后设置Fitle使数据为空,再用TADOSet的SaveToFIle(FileName,pfXML)方法
非常感谢,哈哈,我原来是自己定义了一个格式,看来又要动大手术了。