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,参数的“魔力”在于你不必在意