delphi - 在 Delphi 中获取记录数据到类中

标签 delphi ms-access

我想我一定很笨,我是 Delphi 的新手,正在尝试将 sql 结果读入类以便轻松 Access 它。 我创建了一个虚拟类来进行这样的测试:

type
test_class = class
 id:integer;
 job_number:string;
 cust_name :string ;
 procedure get_record_data;
end;

然后我这样调用程序:

procedure test_class.get_record_data;
begin
 test_class.Create;
 test_class.id := tform3.adoQuery1.FieldByName('id').AsInteger;
 test_class.job_number := tform3.adoQuery1.FieldByName('job number').AsString;
 test_class.cust_name := tform3.adoQuery1.FieldByName('customer name').AsString;
end;

然后我像这样测试我的结果:

procedure TForm3.Button1Click(Sender: TObject);
begin
 showmessage('Id number is ' + inttostr(test_class.id));
end;

showmessage 行抛出一个编译器错误,指出需要方法标识符。

以 test_class.id:=、test_class.job_number:= 和 test_class.cust_name:= 开头的行 都给我相同的方法标识符预期以及缺少运算符或分号错误。

我做错了什么?有没有更简单的方法来解决这个问题?完成此操作后,空值会带来问题吗?

最佳答案

您不能将类用作实例。您将必须保留对创建的实例的引用,根据您的示例,它可能看起来像这样......

type
Ttest_class=class
 id:integer;
 job_number:string;
 cust_name :string ;
 Class Function get_record_data(ADS:TCustomAdodataset):Ttest_class;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  TC:Ttest_class;
begin
   TC := Ttest_class.get_record_data(AdoQuery1);
   try
   showmessage('Id number is ' + inttostr(TC.id));
   finally
     TC.Free
   end;
end;


class function Ttest_class.get_record_data(ADS: TCustomAdodataset): Ttest_class;
begin
 Result := Ttest_class.Create;
 Result.id:=ADS.FieldByName('id').AsInteger;
 Result.job_number:= ADS.FieldByName('job number').AsString;
 Result.cust_name:= ADS.FieldByName('customer name').AsString;
end;

根据@MarjanVenema 的建议并通过评论请求一个更可取的版本:

type
  Ttest_class = class
    id: integer;
    job_number: string;
    cust_name: string;
    Constructor Create(ADS: TCustomAdodataset);
  end;

Constructor Ttest_class.Create(ADS: TCustomAdodataset);
begin
  id := ADS.FieldByName('id').AsInteger;
  job_number := ADS.FieldByName('job number').AsString;
  cust_name := ADS.FieldByName('customer name').AsString;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TC: Ttest_class;
begin
  TC := Ttest_class.Create(ADOQuery1);
  try
    showmessage('Id number is ' + inttostr(TC.id));
  finally
    TC.Free
  end;
end;

关于delphi - 在 Delphi 中获取记录数据到类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18499798/

相关文章:

ms-access - 运行时错误 3464 : Data Type Mismatch in criteria expression

SQL用于解析多行数据?

c++ - 构建 ADO Recordset 时是否将数据拉入内存?

excel - Access - Excel 集成

delphi - 在 Delphi 中使用 DWM 非客户端绘制后,标题按钮不响应鼠标单击

delphi - "Exception of type ' System.OutOfMemoryException ' was thrown"一次编译多个项目时

c# - Delphi 4 和/或 Delphi 5 可执行文件能否集成到 C# 应用程序中?

delphi - 如果客户端关闭异常,通知Datasanap Server

delphi - 为什么在delphi 10.3中CopyRect翻转了第二张图像?

sql-server - 我的应用程序如何同时使用 MS Access 数据库和 SQL Server 数据库?