sql-server - 使用 Delphi AdoQuery 插入后获取最后一行数据

标签 sql-server delphi tadoquery

在 Delphi 2007 中使用 ADOQuery 当我使用插入到表中添加一行时 我如何获得最后一行?

我正在用这个添加行。

QD_TEMP1.close;
QD_TEMP1.sql.Clear;
QD_TEMP1.SQL.Add('insert into s_hasta_Kabul (Protokol,Muay_ID,Ocak_Kod,Tc_Kimlik_No)  ');
QD_TEMP1.SQL.Add('values (:Protokol,:Muay_ID,:Ocak_Kod,:Tc_Kimlik_No) ');
QD_TEMP1.Parameters.ParamByName('Protokol').Value := 0;
QD_TEMP1.Parameters.ParamByName('Muay_ID').Value := 2;
QD_TEMP1.Parameters.ParamByName('Ocak_Kod').Value := 3;
QD_TEMP1.Parameters.ParamByName('Tc_Kimlik_No').Value := 4;
QD_TEMP1.ExecSQL;

如何在 execsql 之后获取最后添加的行?

最佳答案

您可以使用 OUTPUT返回插入的记录集的子句,无论您是否有标识列(从您的评论看来您没有)。

例如

QD_TEMP1.Close;
QD_TEMP1.sql.Clear;
QD_TEMP1.SQL.Add('insert into s_hasta_Kabul (Protokol,Muay_ID,Ocak_Kod,Tc_Kimlik_No)  ');

QD_TEMP1.SQL.Add('OUTPUT inserted.*');

QD_TEMP1.SQL.Add('values (:Protokol,:Muay_ID,:Ocak_Kod,:Tc_Kimlik_No) ');
QD_TEMP1.Parameters.ParamByName('Protokol').Value := 0;
QD_TEMP1.Parameters.ParamByName('Muay_ID').Value := 2;
QD_TEMP1.Parameters.ParamByName('Ocak_Kod').Value := 3;
QD_TEMP1.Parameters.ParamByName('Tc_Kimlik_No').Value := 4;

QD_TEMP1.Open; // ExecSQL does NOT return recordset
// QD_TEMP1 now contains the inserted result set
ShowMessage(QD_TEMP1.FieldByName('Tc_Kimlik_No').AsString);

请注意,我们使用 QD_TEMP1.Open(不是 ExecSQL)返回插入的记录集。

关于sql-server - 使用 Delphi AdoQuery 插入后获取最后一行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280954/

相关文章:

sql-server - 资源池 'default' 中系统内存不足,无法运行此查询

database - TClientdataset 的无效参数错误

delphi - 在不同的 Delphi 版本之间发送 TStringList

sql-server - 无法从另一个 SQL Server 连接到 SQL Server 命名实例

sql-server - 如何根据条件生成Row_number()?

sql-server - 执行 Excel VBA SQL 查询的最优雅方法是什么?

delphi - 无尽的进度条?

sql-server-2008 - Delphi - TADOQuery.RowsAffected 始终为 -1,带有 UPDATE SQL 语句

delphi - TDoquery 日期格式

Delphi、ADOQuery、客户端数据集