【发布时间】:2021-09-24 21:41:33
【问题描述】:
我会说我如何在 lazarus 上重现这个问题。 我有一个表单和一个使用 zeos 的数据模块来建立与本地 oracle 数据库的连接。 当我将一些代码与数据库对话时出现的问题。 这是一个例子:
OracleMng.ZQuery1.SQL.Clear;
这正是出错的那一行。 以下是表格的完整代码:
unit form1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBGrids, StdCtrls,
datamodule2;
type
{ TLogin }
TLogin = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Login: TLogin;
implementation
{$R *.lfm}
{ TLogin }
procedure TLogin.Button1Click(Sender: TObject);
begin
OracleMng.ZQuery1.SQL.Clear;
end;
end.
这是数据模块的代码:
unit datamodule2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, DB, ZConnection, ZDataset, ZSqlMonitor;
type
{ TOracleMng }
TOracleMng = class(TDataModule)
DataSource1: TDataSource;
ZConnection1: TZConnection;
ZQuery1: TZQuery;
private
public
end;
var
OracleMng: TOracleMng;
implementation
{$R *.lfm}
{ TOracleMng }
end.
我在努力
if (OracleMng <> Nil) and (OracleMng.Zquery1 <> Nil) then OracleMng.ZQuery1.SQL.add('select * from help');
if (OracleMng <> Nil) and (OracleMng.Zquery1 <> Nil) then OracleMng.ZQuery1.ExecSQL;
dbgrid1.refresh;
我没有更多错误,但 DBGrid1 未填充。
这是我的项目 lpr 文件:
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, zcomponent, datamodule2, form1
{ you can add units after this };
{$R *.res}
begin
RequireDerivedFormResource:=True;
Application.Scaled:=True;
Application.Initialize;
Application.CreateForm(TLogin, Login);
Application.Run;
end.
【问题讨论】:
-
出现该错误的最可能原因是没有创建 OracleMng 或 ZQuery1。将您的代码更改为
if (OracleMng <> Nil) and (OracleMng.Zquery1 <> Nil) then OracleMng.ZQuery1.SQL.Clear。您仍然收到错误消息吗? -
@MartynA 它没有给出错误,但 DBGrid1 没有显示查询结果。我正在使用 dbgrid1.refresh;但是现在对于每个查询我都应该这样做“如果”?
-
我认为您需要将minimal, reproducible example 添加到您的 q 中,包括您希望填充 DBGrid 的查询。
-
我添加了我在问题中使用的 3 行。在Delphi中,我使用了这段代码并且它正在工作(使用dbexpress):DataModule1.SQLQuery1.Close;数据模块1.SQLQuery1.SQL.清除; DataModule1.SQLQuery1.sql.add('update help set topic = :topic where info like :call'); DataModule1.SQLQuery1.ParamByName('topic').AsString := 'LAKO';//uso per forza ParamByName DataModule1.SQLQuery1.ParamByName('call').AsString := '%call from the local%';数据模块1.SQLQuery1.ExecSQL;
-
同样不适用于 zeos connect 的 lazarus。
标签: freepascal lazarus