我写这段代码:
Var Q : TFDQuery;
begin
Q := TFDQuery.Create(Self);
Q.Connection := FDConnection1;
Q.Params.CreateParam(ftString,'N',ptOutput);// Try also ptResult
Q.Params.CreateParam(ftInteger,'ID',ptInput);
Q.SQL.Text := 'SELECT NOM FROM EMPLOYEE WHERE ID_EMP = :ID';
Q.Params.ParamByName('ID').Value := 1;
Q.Active := True;
ShowMessage( VarToStr(Q.Params.ParamByName('N').Value) );
结果应该是雇主的名字。
我收到错误:
' N'参数未找到
如何使用参数?
从Query中获取结果如果我不能,那么它的功能是什么:
ptOutput
ptResult
答案 0 :(得分:3)
无需手动创建参数。数据访问组件足够智能,可以解析SQL字符串并自行填充参数集合
要获得结果,您还必须阅读查询的字段。在Query组件上调用 $(function () {
/* user run query click event*/
$('#run_query').click(function () {
populateDataTable(sample_ajax);
});
function populateDataTable(json_obj) {
console.log(json_obj)
/*extract fields from ajax return*/
var keys = Object.keys(json_obj[0]);
var columns_obj = [];
$.each(keys, function (i, it) {
columns_obj[i] = { data: it, title: it };
});
/*draw html table container*/
var html_table = '<table id="example" class="display" width="100%" cellspacing="0"><thead></thead><tbody></tbody></table>';
$('#query_output').html(html_table);
$('#query_output table').DataTable({
data: json_obj,
columns: columns_obj
});
}
});
时,将使用您在Open
SQL语句中指定的字段填充字段集合
作为旁注,我建议您使用类型安全版本从SELECT [fields]
或TField
对象中获取值:See more here
TParameter
答案 1 :(得分:3)
试试这段代码:
procedure TForm1.ExecuteQuery;
var
SQL : String;
Q : TFDQuery;
begin
SQL := 'select ''Sami'' as NOM'; // Tested with MS Sql Server backend
try
Q := TFDQuery.Create(Self);
Q.Connection := FDConnection1;
Q.Params.CreateParam(ftString, 'Nom', ptOutput);// Try also ptResult
Q.SQL.Text := SQL;
Q.Open;
ShowMessage( IntToStr(Q.ParamCount));
Caption := Q.FieldByName('Nom').AsString;
finally
Q.Free; // otherwise you have a memory leak
end;
end;
一旦打开FDQuery,您将看到创建的参数不再存在,因为FireDAC&#34;知道&#34;它无能为力。
然后,将Q.Open
替换为Q.ExecSQL
。执行时会出现异常
消息
无法执行命令返回结果集。 提示:对类似SELECT的命令使用Open方法。
这就是你的问题。如果使用SELECT语句,则会得到结果集 你喜欢与否,访问其内容的方式是做
之类的事情Nom := Q.FieldByName('Nom').AsString
您在评论中询问了ptOutput
参数的重点。假设您的数据库有一个像这样定义的存储过程
创建过程spReturnValue(@Value varchar(80)out) 如 选择@Value =&#39;&#39;
然后,在您的代码中,您可以
SQL := 'exec spReturnValue :Value'; // note the absence of the `out` qualifier in the invocation of the SP
try
Q := TFDQuery.Create(Self);
Q.Connection := FDConnection1;
Q.Params.CreateParam(ftString, 'Value', ptOutput);// Try also ptResult
Q.SQL.Text := SQL;
Q.ExecSQL;
ShowMessage( IntToStr(Q.ParamCount));
Caption := Q.ParamByName('Value').AsString;
finally
Q.Free; // otherwise you have a memory leak
end;
,它将存储过程的输出参数检索到Q的Value参数。