gpt4 book ai didi

delphi - 如何在 Delphi 中使用 ADO 获取 IDENTITY 列

转载 作者:行者123 更新时间:2023-12-03 15:58:11 27 4
gpt4 key购买 nike

我在 Delphi XE2 中使用 ADO 获取 IDENTITY 列时遇到问题。

问题ADO Fields 属性不返回/包含任何 IDENTITY 列。连接中是否存在可以获取 IDENTITY 列的属性或其他内容,或者这是一个已知的错误吗?

场景我有一个存储过程(在 SYBASE ASE 中),它获取 1 行 4 列。其中一列是 IDENTITY 列。

在此示例中:ADOQuery.Fields.Count 将返回 3 而不是 4。缺少 IDENTITY 列。

例如:

procedure TForm1.FormCreate(Sender: TObject);
var
test: string;
Password: String;
UserName: string;
ServerName : string;
NoRec: integer;
MyValue: integer;

begin

Password:='xxxx';
UserName:='yyyy';
ServerName := 'zzzzz';

ADOConnection := TADOConnection.Create(Application);

with ADOConnection do
begin
CommandTimeout := 0;
IsolationLevel := ilSerializable;
Attributes := [xaAbortRetaining];
KeepConnection := True;
LoginPrompt := False;

ConnectionString := 'Provider=ASEOLEDB.1;Password=' + Password +
';Persist Security Info=True' + ';User ID=' +
UserName + ';Data Source=' + ServerName;
end;

if not Assigned(ADOQuery) then
begin
ADOQuery := TADOQuery.Create(Application);
with ADOQuery do
begin
CommandTimeout := 0;
DisableControls;

CacheSize := 500;
Connection := ADOConnection;
CursorType := ctOpenForwardOnly;
end;
end;

ADOConnection.Open();
ADOQuery.SQL.Text:= 'sp_echo';
ADOQuery.Open;

NoRec:=ADOQuery.Fields.Count; //This will return: 3, the IDENTITY col is missing

//Trying to fetch the column this way, will fail (the field doesen´t exist):
//MyValue:=ADOQUery.FieldByName('col_1').AsInteger
end;

这是此示例的脚本、表、存储过程

create table tbl_echo
(
col_1 numeric(10,0) identity,
col_2 varchar(255),
col_3 int,
col_4 int
)

insert into tbl_echo (col_2, col_3, col_4) select 'testing', 100, 200

create proc sp_echo
as
select top 1 * from tbl_echo

最佳答案

您有两种不同的方式来获得您想要的东西:

  1. 您在 SP 中声明一个输出参数,并在插入后将 @@IDENTITY 分配给该参数。使用 TADOStoredProc 组件而不是 TADOQuery 组件执行此类 SP。 SP 完成后,当控件返回到 Delphi 代码时,您只需读取此类参数的值。

  2. 您只需选择@@IDENTITY,就会得到一个结果集,其中单行和单列包含生成的值。在这种情况下,您可以使用 TADOQuery,但在 Delphi 代码中,您使用 Open (而不是 ExecSQL)来检索这样的结果集并只需读取唯一字段的值为 has。

关于delphi - 如何在 Delphi 中使用 ADO 获取 IDENTITY 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20701804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com