Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用Delphi AdoQuery获取插入后的最后一行数据_Sql Server_Delphi_Tadoquery - Fatal编程技术网

Sql server 使用Delphi AdoQuery获取插入后的最后一行数据

Sql server 使用Delphi AdoQuery获取插入后的最后一行数据,sql-server,delphi,tadoquery,Sql Server,Delphi,Tadoquery,在Delphi2007中使用ADOQuery 当我使用insert into将行添加到表中时 最后一排怎么走 我用这个加了一行 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_K

在Delphi2007中使用ADOQuery 当我使用insert into将行添加到表中时 最后一排怎么走

我用这个加了一行

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之后添加的最后一行?

没有测试它,但应该是这样的

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) SELECT :test = SCOPE_IDENTITY() ');
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;

QD_TEMP1.Parameters.ParamByName('test').Value is your new id
您可以使用该子句返回插入的记录集,无论您是否有标识列(从您的注释来看,您似乎没有标识列)

e、 g


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

如果将参数方向设置在“ExeSQL”之前,则它会起作用


干杯

您的表格中有身份栏吗我有5个身份栏是的,总共30个栏。不要问为什么。我不知道它是一个旧表,属于一家公司,但你只有一个主键:)我不知道delphi,但SQL在插入后的角度
SELECT@Id=SCOPE\u IDENTITY()
不管这里面有什么,只要作为一个
SELECT*从s_hasta\u Kabul那里pkColumn=@Id
你说的“5 IDENTITY column”是什么意思?每个表只能有一个标识列。@Jasper-不是我正在查看的图像。当问题的INSERT语句中只指定了4个值时,PK不仅包含5个值,而且在这4个值中,只有2个是PK的一部分(Okac_Kod和TC_Kimlik_No)。这是行不通的。首先,
QD_Temp1.Parameters.ParamByName('test')
before
QD_TEMP1.ExecSQL无法编译。其次,您缺少一个
插入
(在
选择
之前)的末尾。如果您仔细阅读我的答案,您将看到文本:“尚未测试”和文本“应该是这样的”。这是为了表明我是从头顶上键入的,没有对它进行测试,但它应该得到正确的操作方向。如果您在这里发布未经测试的、不可编译的代码作为答案,您可以预期它会被否决。如果你不知道它会起作用(通过测试),你要为你在这里的声誉承担责任。答案应该是正确和准确的,而不是猜测或从你的键盘编造的东西,显然是不正确的。我给了你一个改正的机会;你选择不这样做,真的吗?所以如果我手头没有delphi来测试确切的语法,我就不应该回答了?答案清楚地表明,该代码旨在帮助OP前进。你只想着你在这里的名声吗?好吧,好吧,做个孩子吧,投我一票,无论什么让你快乐,你都可以随时发布任何你想要的答案,不管是经过测试的还是未经测试的。如果它是错误的,那就让它被否决。这与我的名誉无关;这是这个网站的具体运作方式。对问题的回答应该是完整和正确的,而你的答案至少不符合后者。如果你不清楚的话,去看医生。在那里,请访问上的部分。至于帮助人们,错误的答案对任何人都没有帮助。[dsTest]是链接到[qryTest]的数据源欢迎访问SO。请围绕答案提供一些上下文和描述,以帮助解释决议。
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);
q.sql.text := 'insert into TABLE(x) values (:value) set :ID = scope_identity()';
q.Parameters.ParamByName('VALUE').value := 'XXXXX';
q.Parameters.ParamByName('ID').Direction := pdReturnValue;
q.ExecSQL;
ID := q.Parameters.ParamByName('ID').value;
qryTest.Close;

qryTest.SQL.Clear;
qryTest.SQL.Add(' INSERT INTO TEST_GET_IDX ');
qryTest.SQL.Add(' (SNAME, AGE) ');
qryTest.SQL.Add(' VALUES(:pSNAME, :pAGE) ' );
qryTest.SQL.Add(' SELECT IDX = SCOPE_IDENTITY() ' );   // IDX is IDENTITY

qryTest.Parameters.ParamByName('pSNAME').Value:= edSname.Text;
qryTest.Parameters.ParamByName('pAGE').Value:= edAge.Text;

qryTest.Open;

showMessage(dsTest.DataSet.FieldByName('IDX').AsString);