信息: 我有一张订单。
有了“keuze”和“aantal”,它就会换一条新线。 Orderline获得OrderID。 但是用户可能只能从他的OrderID中看到订单行。
我如何让它只显示它的工作,例如OrderID“47”?
procedure TfmOrder.btInvoerenClick(Sender: TObject);
begin
dm.atOrder.open;
dm.atOrder.Append;
dm.atOrder ['OrderStatus'] := ('Aangemeld');
dm.atOrder ['klantID'] := fminloggen.userid;
dm.atOrder ['OrderDatum'] := Kalender.date;
dm.atOrder ['Opmerkingen'] := leOpmerkingen.text;
dm.atOrder.post;
cbkeuze.Visible := true;
dbRegel.Visible := true;
leAantal.visible := true;
btOpslaan.Visible:= true;
end;
这是制作新订单的代码
procedure TfmOrder.btOpslaanClick(Sender: TObject);
var orderid:string;
begin
dm.atOrderregel.Open;
dm.atDier.open;
dm.atorderregel.Append;
dm.atOrderregel ['AantalDieren'] := leAantal.text;
dm.atOrderregel ['OrderID'] := dm.atOrder ['OrderID'];
dm.atOrderregel ['Diernaam'] := cbKeuze.Text;
dm.atOrderregel.Post;
leaantal.clear;
cbkeuze.ClearSelection;
end;
这是一个新的订单线
提前致谢
我知道使用此代码时出现了不同的错误:
begin
dm.atorder.Open;
dm.atorder.filter := 'KlantID = ' + (fminloggen.userid);
dm.atorder.filtered := true;
while not dm.atorder.Eof do
begin
cbOrder.Items.Add (dm.atorder['OrderID']);
dm.atOrder.Next;
end;
dm.atOrder.Close;
end;
它给出了一个错误:参数来自错误的类型,或者没有正确的范围或相互冲突。
这里是userid声明。
var Gevonden: boolean;
userid : string;
begin
dm.atInlog.open;
Gevonden := false;
while (not Gevonden) and (not dm.atInlog.eof) do
begin
if dm.atInlog['email'] = leUser.Text
then
begin
Gevonden := true ;
inlognaam := dm.atInlog['email'];
userid := dm.atInlog['KlantID'];
end
else
dm.atInlog.Next
end;
这显然是另一种形式
答案 0 :(得分:1)
您可以在对象检查器中静态添加网格的列属性,仅显示您需要的字段。如果列列表为空(默认),则会填充所有可用字段。
只需添加所需数量的列,并将每列链接到相应的字段。您可以对列重新排序并分别设置宽度和标题。还有一些属性值得探讨。
答案 1 :(得分:1)
您可以使用数据集的Filter
属性:
atOrderregel.Filter := 'OrderID = 47';
atOrderregel.Filtered := True;
答案 2 :(得分:0)
我假设您的网格绑定到数据源组件。然后将此数据源与TDataset后代链接。有几种方法可以实现对数据集的所需过滤,以仅显示orderid 47。
首先,您可以将数据集SQL属性设置为包含(服务器端)SQL查询,例如:
SELECT * from table WHERE OrderID = @OrderID
您还需要在数据集中创建一个参数,以传递所需OrderID的(更改)值。因此,在数据集(@OrderID)中添加一个新参数,然后在运行时,您可以在代码中设置此参数值,如:
DataSet.Parameters['@OrderID'].Value := ParameterValue;
或者,您也可以过滤数据集(客户端)以显示正确的数据: 设置数据集的SQL属性以检索整个表,如:
SELECT * FROM table
然后在运行时,您可以将数据集的Filter属性设置为仅获取OrderID 47:
Dataset.Filter := 'OrderID = '+InttoStr(ParameterValue);
根据您的需要,一种方法可能更适合(性能/记忆)。
正如Najem评论的那样,还有第三种方法 - 使用Master-Detail数据集关系。此方法使用两个数据集,一个是另一个的主数据集。更改主表记录后,将使用M-D关系的Key
或MasterFields
属性中定义的值过滤详细数据集。
答案 3 :(得分:-1)
如果连接到某个数据源,则始终可以创建SQL查询。类似的东西:
SELECT * FROM YourDBTable WHERE OrderID = 47