Filter one table based on the filter of another table

roberte114
Member Posts: 5
How do I filter a table based on the results of a filter on a another table? I am trying to use the a customer card form to display only customers that belong to a certain branch office. So I have two tables (customer and CustomerBranchLocation). I need to filter the CustomerBranchLocation table so that I get a list of all the customers that belong to a particular branch. Then filter the customer table based on the resulting filter of the CustomerBranchLocation. In SQL this would be done with nested queries like
select * from customers where no in (select no from customerbranchloc where location = 127)
I have tried this code:
txtFilter := '';
IF CustFacLoc.FIND('-') THEN
REPEAT
txtFilter := txtFilter + CustFacLoc."Customer No." + '|'
UNTIL CustFacLoc.NEXT = 0;
//To remove the last '|'
IF txtFilter <> '' THEN
txtFilter := COPYSTR(txtFilter,1,STRLEN(txtFilter)-1);
Customer.SETFILTER("No.", txtFilter);
This creates the query fine but gives me an error saying "The filter in the No. field in the Customer table is too large." The txtFilter is very long as there are a lot of records returned so SETFILTER bombs because of it. Is there another way of doing this or can this even be done in Navision? Any help would be appreciated. Thanks.
select * from customers where no in (select no from customerbranchloc where location = 127)
I have tried this code:
txtFilter := '';
IF CustFacLoc.FIND('-') THEN
REPEAT
txtFilter := txtFilter + CustFacLoc."Customer No." + '|'
UNTIL CustFacLoc.NEXT = 0;
//To remove the last '|'
IF txtFilter <> '' THEN
txtFilter := COPYSTR(txtFilter,1,STRLEN(txtFilter)-1);
Customer.SETFILTER("No.", txtFilter);
This creates the query fine but gives me an error saying "The filter in the No. field in the Customer table is too large." The txtFilter is very long as there are a lot of records returned so SETFILTER bombs because of it. Is there another way of doing this or can this even be done in Navision? Any help would be appreciated. Thanks.
0
Comments
-
The best way is to put the values of the first table "(select no from customerbranchloc where location = 127) " in a temptable.
Then scan the second table and if a record in the temptable exist, it is a good record, otherwise skip it.
I know this is not the best way, because you will read a lot of useless records, but there is no other way.Regards,Alain Krikilion
No PM,please use the forum. || May the <SOLVED>-attribute be in your title!0 -
Every now and then I come across situations like this where SQL queries seem much more appropriate.
What I do is to use ADO from within Navision to create the query.0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions