Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 德尔菲-我在这个查询中遗漏了什么_Sql_Sqlite_Delphi_Delphi Xe4 - Fatal编程技术网

Sql 德尔菲-我在这个查询中遗漏了什么

Sql 德尔菲-我在这个查询中遗漏了什么,sql,sqlite,delphi,delphi-xe4,Sql,Sqlite,Delphi,Delphi Xe4,我正在尝试运行此查询,但失败: procedure TForm4.FormShow(Sender: TObject); begin with ClientDataSet1 do begin ClientDataSet1.Close; ClientDataSet1.CommandText :=''; ClientDataSet1.CommandText :='select lokacije.[LOKACIJA_ID],lokacije.[RESORT_ID],' + 'lokacije.[HOTE

我正在尝试运行此查询,但失败:

procedure TForm4.FormShow(Sender: TObject);
begin
with ClientDataSet1 do
begin
ClientDataSet1.Close;
ClientDataSet1.CommandText :='';
ClientDataSet1.CommandText :='select lokacije.[LOKACIJA_ID],lokacije.[RESORT_ID],'
+ 'lokacije.[HOTEL_ID],lokacije.[NAZIV],'
+ 'uporabniki.[RESORT_ID],uporabniki.[HOTEL_ID],uporabniki.[LOKACIJA_ID],'
+ 'uporabniki.[UPORABNIK],uporabniki.[GESLO],uporabniki.[PRAVICE] from LOKACIJE'
+ 'inner join UPORABNIKI on lokacije.[LOKACIJA_ID]=uporabniki.[LOKACIJA_ID]'
+ 'where lokacije.[NAZIV] = ''' + Form2.AdvOfficeStatusBar1.Panels[3].Text + ''' '
+ 'ORDER BY Uporabniki.[UPORABNIK]';
ClientDataSet1.Open;
end;
end;
我得到一个错误:“远程错误:没有这样的表:LOKACIJEinner”

我在这里错过了什么???
数据库是SQLite。我在这里打开的表单是一个模式表单。整个应用程序是一个datasnap表单。这是客户端。问题实际上是这样的:我有很多位置,只需要AdvOfficeStatusBar1.Panels[3].Text显示的位置名称中的数据

我认为这更具可读性

procedure OpenLokacije(ANaziv: String);
begin
   ClientDataSet1.Close;
   ClientDataSet1.CommandText :=  ' select lokacije.[LOKACIJA_ID],'+    // AS Lok_LOKACIJA_ID
                                  '        lokacije.[RESORT_ID],'+
                                  '        lokacije.[HOTEL_ID],'+
                                  '        lokacije.[NAZIV],'+
                                  '        uporabniki.[RESORT_ID],'+
                                  '        uporabniki.[HOTEL_ID],'+
                                  '        uporabniki.[LOKACIJA_ID],'+ // AS Upor_LOKACIJA_ID
                                  '        uporabniki.[UPORABNIK],'+
                                  '        uporabniki.[GESLO],'+
                                  '        uporabniki.[PRAVICE]'+
                                  ' from LOKACIJE'+
                                  '         inner join UPORABNIKI on lokacije.lokacija_id=uporabniki.lokacija_id '+
                                  ' where lokacije.[NAZIV] = :@NAZIV'+
                                  ' order by Uporabniki.[UPORABNIK]';
 ClientDataSet1.Parameters.ParamByName('@NAZIV').Value:= ANaziv;
 ClientDataSet1.Open;
end;
lokacije.lokacija_id
uporabniki.lokacija_id
分别是相同的值和字段

用作:

lokacije.lokacija_id as lok_lokacija_id
uporabniki.lokacija_id  as  upo_lokacija_id
还可以使用数据库的模式,如

dbo.uporabniki.lokacija_id

我认为这更具可读性

procedure OpenLokacije(ANaziv: String);
begin
   ClientDataSet1.Close;
   ClientDataSet1.CommandText :=  ' select lokacije.[LOKACIJA_ID],'+    // AS Lok_LOKACIJA_ID
                                  '        lokacije.[RESORT_ID],'+
                                  '        lokacije.[HOTEL_ID],'+
                                  '        lokacije.[NAZIV],'+
                                  '        uporabniki.[RESORT_ID],'+
                                  '        uporabniki.[HOTEL_ID],'+
                                  '        uporabniki.[LOKACIJA_ID],'+ // AS Upor_LOKACIJA_ID
                                  '        uporabniki.[UPORABNIK],'+
                                  '        uporabniki.[GESLO],'+
                                  '        uporabniki.[PRAVICE]'+
                                  ' from LOKACIJE'+
                                  '         inner join UPORABNIKI on lokacije.lokacija_id=uporabniki.lokacija_id '+
                                  ' where lokacije.[NAZIV] = :@NAZIV'+
                                  ' order by Uporabniki.[UPORABNIK]';
 ClientDataSet1.Parameters.ParamByName('@NAZIV').Value:= ANaziv;
 ClientDataSet1.Open;
end;
lokacije.lokacija_id
uporabniki.lokacija_id
分别是相同的值和字段

用作:

lokacije.lokacija_id as lok_lokacija_id
uporabniki.lokacija_id  as  upo_lokacija_id
还可以使用数据库的模式,如

dbo.uporabniki.lokacija_id

我认为这更具可读性

procedure OpenLokacije(ANaziv: String);
begin
   ClientDataSet1.Close;
   ClientDataSet1.CommandText :=  ' select lokacije.[LOKACIJA_ID],'+    // AS Lok_LOKACIJA_ID
                                  '        lokacije.[RESORT_ID],'+
                                  '        lokacije.[HOTEL_ID],'+
                                  '        lokacije.[NAZIV],'+
                                  '        uporabniki.[RESORT_ID],'+
                                  '        uporabniki.[HOTEL_ID],'+
                                  '        uporabniki.[LOKACIJA_ID],'+ // AS Upor_LOKACIJA_ID
                                  '        uporabniki.[UPORABNIK],'+
                                  '        uporabniki.[GESLO],'+
                                  '        uporabniki.[PRAVICE]'+
                                  ' from LOKACIJE'+
                                  '         inner join UPORABNIKI on lokacije.lokacija_id=uporabniki.lokacija_id '+
                                  ' where lokacije.[NAZIV] = :@NAZIV'+
                                  ' order by Uporabniki.[UPORABNIK]';
 ClientDataSet1.Parameters.ParamByName('@NAZIV').Value:= ANaziv;
 ClientDataSet1.Open;
end;
lokacije.lokacija_id
uporabniki.lokacija_id
分别是相同的值和字段

用作:

lokacije.lokacija_id as lok_lokacija_id
uporabniki.lokacija_id  as  upo_lokacija_id
还可以使用数据库的模式,如

dbo.uporabniki.lokacija_id

我认为这更具可读性

procedure OpenLokacije(ANaziv: String);
begin
   ClientDataSet1.Close;
   ClientDataSet1.CommandText :=  ' select lokacije.[LOKACIJA_ID],'+    // AS Lok_LOKACIJA_ID
                                  '        lokacije.[RESORT_ID],'+
                                  '        lokacije.[HOTEL_ID],'+
                                  '        lokacije.[NAZIV],'+
                                  '        uporabniki.[RESORT_ID],'+
                                  '        uporabniki.[HOTEL_ID],'+
                                  '        uporabniki.[LOKACIJA_ID],'+ // AS Upor_LOKACIJA_ID
                                  '        uporabniki.[UPORABNIK],'+
                                  '        uporabniki.[GESLO],'+
                                  '        uporabniki.[PRAVICE]'+
                                  ' from LOKACIJE'+
                                  '         inner join UPORABNIKI on lokacije.lokacija_id=uporabniki.lokacija_id '+
                                  ' where lokacije.[NAZIV] = :@NAZIV'+
                                  ' order by Uporabniki.[UPORABNIK]';
 ClientDataSet1.Parameters.ParamByName('@NAZIV').Value:= ANaziv;
 ClientDataSet1.Open;
end;
lokacije.lokacija_id
uporabniki.lokacija_id
分别是相同的值和字段

用作:

lokacije.lokacija_id as lok_lokacija_id
uporabniki.lokacija_id  as  upo_lokacija_id
还可以使用数据库的模式,如

dbo.uporabniki.lokacija_id


where lokacije.[NAZIV]='+Form2.AdvOfficeStatusBar1.Panels[3]。Text+'
您正在使用状态栏面板的
.Text
属性…来自另一个表单。。。在SQL查询中?我认为即使是一个全局变量也会稍微不那个么罪恶。现在我得到了“在[Hotel]:语法错误附近的远程错误”…@user3181689 OK,然后在位置名称中添加引号
where lokacije.[NAZIV]='''+Form2.AdvOfficeStatusBar1.Panels[3]。Text+''''''
LOL,在执行该查询之前检查两次。现在你失去了空间。这是显而易见的。错误告诉您“没有这样的表LOKACIJEinner”,因此首先您可以想到的是LOKACIJE和inner的串联字符串,因为缺少空格…
其中LOKACIJE。[NAZIV]='+Form2.AdvOfficeStatusBar1.Panels[3]。Text+'
您正在使用状态栏面板的
.Text
属性…来自另一种形式。。。在SQL查询中?我认为即使是一个全局变量也会稍微不那个么罪恶。现在我得到了“在[Hotel]:语法错误附近的远程错误”…@user3181689 OK,然后在位置名称中添加引号
where lokacije.[NAZIV]='''+Form2.AdvOfficeStatusBar1.Panels[3]。Text+''''''
LOL,在执行该查询之前检查两次。现在你失去了空间。这是显而易见的。错误告诉您“没有这样的表LOKACIJEinner”,因此首先您可以想到的是LOKACIJE和inner的串联字符串,因为缺少空格…
其中LOKACIJE。[NAZIV]='+Form2.AdvOfficeStatusBar1.Panels[3]。Text+'
您正在使用状态栏面板的
.Text
属性…来自另一种形式。。。在SQL查询中?我认为即使是一个全局变量也会稍微不那个么罪恶。现在我得到了“在[Hotel]:语法错误附近的远程错误”…@user3181689 OK,然后在位置名称中添加引号
where lokacije.[NAZIV]='''+Form2.AdvOfficeStatusBar1.Panels[3]。Text+''''''
LOL,在执行该查询之前检查两次。现在你失去了空间。这是显而易见的。错误告诉您“没有这样的表LOKACIJEinner”,因此首先您可以想到的是LOKACIJE和inner的串联字符串,因为缺少空格…
其中LOKACIJE。[NAZIV]='+Form2.AdvOfficeStatusBar1.Panels[3]。Text+'
您正在使用状态栏面板的
.Text
属性…来自另一种形式。。。在SQL查询中?我认为即使是一个全局变量也会稍微不那个么罪恶。现在我得到了“在[Hotel]:语法错误附近的远程错误”…@user3181689 OK,然后在位置名称中添加引号
where lokacije.[NAZIV]='''+Form2.AdvOfficeStatusBar1.Panels[3]。Text+''''''
LOL,在执行该查询之前检查两次。现在你失去了空间。这是显而易见的。错误告诉您“没有这样的表LOKACIJEinner”,因此首先您可以想到的是LOKACIJE和inner的串联字符串,因为缺少空间…这不是
@
字符无法执行吗?我从未见过它用于参数…只是改变了:“ClientDataSet1.Params.ParamByName('@NAZIV')。值:=''+Form2.AdvOfficeStatusBar1.Panels[3].Text+'';@user3181689,参数的“魔力”在于您不需要关心封闭字符。您只是将值传递给
Value
属性。其余部分由供应商承担。无论如何,使用此代码,在调用此
OpenLokacije
过程时,您应该只将
Form2.AdvOfficeStatusBar1.Panels[3].Text
传递到
ANaziv
输入参数中。@Ravaut 123-为什么我在查询结果中会得到两个额外的字段:resort_ID_1和LOKACIJA_ID_1???@TLama:不抱歉。没关系那不是
@
字符无法执行吗?我从未见过它用于参数…只是改变了:“ClientDataSet1.Params.ParamByName('@NAZIV')。值:=''+Form2.AdvOfficeStatusBar1.Panels[3].Text+'';@user3181689,参数的“魔力”在于您不需要关心封闭字符。您只是将值传递给
Value
属性。其余部分由供应商承担。无论如何,使用此代码,在调用此
OpenLokacije
过程时,您应该只将
Form2.AdvOfficeStatusBar1.Panels[3].Text
传递到
ANaziv
输入参数中。@Ravaut 123-为什么我在查询结果中会得到两个额外的字段:resort_ID_1和LOKACIJA_ID_1???@TLama:不抱歉。没关系那不是
@
字符无法执行吗?我从未见过它用于参数…只是改变了:“ClientDataSet1.Params.ParamByName('@NAZIV')。值:=''+Form2.AdvOfficeStatusBar1.Panels[3].Text+'';@user3181689,参数的“魔力”在于你不必在意