0

我遇到的问题是我想在 delphi 中创建一个连接到 MS access 数据库的类,但我不允许使用任何类型的数据集、查询或表组件。我找到了一种连接数据库的方法(代码如下):

procedure TForm1.FormCreate(Sender: TObject);
begin

conn := TADOConnection.Create(nil);

conn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files (x86)\Delphi7SE\Projects\Bpl\Database11.mdb;Persist Security Info=False';
conn.LoginPrompt := False;
qr := TADOQuery.Create(nil);
try
  conn.Connected := True;
except on e: EADOError do
  begin
      MessageDlg('Error while connecting', mtError, [mbOK], 0);
      Exit;
end;
end;

try
conn.Open;
  qr.Connection := conn;
  ListBox1.Items.Clear;
  qr.SQL.Text := 'Select * FROM Customer';
  qr.Open;
  while NOT qr.Eof do
  begin
      //ListBox1.Items.Add(IntToStr(qr.SQL.Add('SELECT FirstName FROM Customer;')));
      ListBox1.Items.Add(qr.FieldByName('FirstName').Value);
      qr.Next;
  end;
  conn.Close;
finally
  conn.Free;
  qr.Free;
end;

end;

我想把它放到课堂上,但我不知道怎么做,因为我只在 10 到 12 年级做过 delphi。

4

2 回答 2

5

目前尚不清楚您的潜在雇主要求什么,但我将给您留下这个答案,因为评论太长了。

首先,您使用的TADOQuery是在代码中创建的组件。TADOQuery这与使用放在表单上的 a完全相同。

从最严格的意义上讲,没有组件的数据库访问意味着您不应该使用任何从 TComponent 派生的类。如果可以使用 TADOConnection,则可以直接从该 TADOConnection 执行 SQL 语句,但这只是一种在现实世界中永远不会使用的“面试问题”技术。

其次,如果您希望通过 OLEDB 提供程序(例如 ADO)连接到可用的数据库,则可以直接访问 Microsoft 的 OLEDB 或 ADO COM 接口并连接到它们。Delphi 非常擅长使用您可以命名的任何 COM 接口。但是,以一种不只是 hack 或演示的方式来实现所有这些,远远超出了我期望任何人在面试期间能够完成的任何事情的范围。

如果您有一个没有 COM/ADO/OLEDB 接口功能的数据库,则可以编写自己的类来加载数据库客户端代码,也许作为 DLL,并以这种方式与数据库通信。您甚至可以在 delphi 中编写自己的 ODBC 客户端。毕竟,这些预先编写和预先测试的数据库访问组件使用的任何底层技术都可以由您完成。这会是您的雇主经营业务的明智方式吗?不会。但是因为您甚至可以研究任何现有组件的来源,并且由于您的雇主可能希望雇用可以找到并修复组件中的错误的人,即使该错误不是他们编写的,这可能就是他们的正在找; 深入堆栈的技术知识。

我最好的猜测是你的面试官想知道你是一个了解整个技术堆栈的好奇的开发人员,还是一个只了解你使用的顶级技术堆栈的货物狂热程序员。

于 2013-04-02T11:47:06.450 回答
0

Delphi自带TAccessApplication组件(其实最多3个,Office 2000+,Office XP+,Office 2010+)

您连接到 Access 应用程序(和/或启动它)并控制它的组件。

谷歌使用 COM 或 OLE 自动化进行 Delphi 交互。您将获得大量有关控制 Word 或 Excel 的示例,但通常相同的规则和精神适用于 Access。但是 CreateOLEObject 和 Variant vars 最好用TAccessApplication组件和相关类型代替。

还搜索 Access 的 VBA 示例,甚至制作一个(如果 Access 具有代码自动生成功能,如 Excel 和 Word 的“记录宏”菜单)——因为 MS Office 对象的 VBA 文档是 TAccessApplication 的文档,而 VBA 代码几乎是字面意思翻译成 Delphi 代码,除了你可以从其他 COM 示例中学到的一些怪癖。

还有https://www.google.ru/search?client=opera&q=Delphi+TAccessApplication&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

顺便说一句,你的 Delphi 版本是哪个?您将编辑您的问题并将 Delphi 版本添加到tags中。

于 2013-04-02T09:29:45.313 回答