473,396 Members | 1,933 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

Add Matching Record on Filtered Form

NeoPa
32,556 Expert Mod 16PB
I rarely use forms to manage my data so I expect this is easier than I found it (I hate it when OPs say that :D)

I have a simple table (laid out below) with lists of customers for various jobs that have to be run. The PK is a combination of the first two fields ([Job] & [CustNo]) and I will typically want to maintain the various (logically separate) lists in different sessions (I may well use the same form design but only show one job at a time).
For instance, when working on the 'ElecInv' job, I will filter to show only those records with [Job]='ElecInv'.
The form design is simply a [txtCustNo] control (linked to the [CustNo] field) on a continuous form.

Table Name=tblJobCust
Expand|Select|Wrap|Line Numbers
  1. Field; Type; IndexInfo
  2. Job; String; Composite PK
  3. CustNo; String; Composite PK
  4. Expiry; Date/Time    'Not necessarily required
My problem is that, although the form filters the existing records perfectly, when I try to add a new record (simply by entering the [CustNo] data) it complains about a missing [Job] field (ErrMsg=Index or primary key cannot contain a Null value). Clearly the [Job] field is not being set up to match the filter as I had (forlornly) hoped.

What do I need to do to add that value into the field? I'm hoping to avoid setting up invisible controls on the form. I expect I need to add the code in the Form_BeforeUpdate() event procedure, but exactly what I need to refer to I'm afraid I don't know. I also don't know which checks I may need to do to ensure this code is only run when a new entry is added and not when an existing record is amended or deleted.
Aug 24 '07 #1
17 3768
JKing
1,206 Expert 1GB
Hey NeoPa,

Just to clarify, you're trying to insert new records into the Many to Many table? Both keys must exist in the corresponding One tables. Also you can't insert just one key into a Many to Many table you need to do both. Correct me if I'm wrong about the Many to Many relationship.

If I'm understanding this correctly you want to be able to filter the form by job. After filtering if the user chooses to add a new entry you want it to automatically be associated with the job the form is filtered by.

I think the simplest solution would be to add a new control for [Job]. But you seem to want to avoid that.

Have you considered changing your design? Alternatively what about creating a form based on tblJob that has a continuous subform based on tblJobCust that would list all customer entries. Allow the user to add customers to the job through the subform. Each page of the form would essentially be filtered by job.
Aug 24 '07 #2
NeoPa
32,556 Expert Mod 16PB
Hey NeoPa,

Just to clarify, you're trying to insert new records into the Many to Many table? Both keys must exist in the corresponding One tables. Also you can't insert just one key into a Many to Many table you need to do both. Correct me if I'm wrong about the Many to Many relationship.

If I'm understanding this correctly you want to be able to filter the form by job. After filtering if the user chooses to add a new entry you want it to automatically be associated with the job the form is filtered by.

I think the simplest solution would be to add a new control for [Job]. But you seem to want to avoid that.

Have you considered changing your design? Alternatively what about creating a form based on tblJob that has a continuous subform based on tblJobCust that would list all customer entries. Allow the user to add customers to the job through the subform. Each page of the form would essentially be filtered by job.
JK,
Thanks for your response. I'll try to reply on a paragraph by paragraph basis.
  1. The table, though not by definition a Many-to-Many, would support that structure so yes, that is what I'm talking about. I do appreciate why the error message is ocurring - it's the resolution I'm after.
  2. Right on the button.
  3. I do want to avoid that. Not because it is a bad solution, but because if I'm maintaining a number of such forms the extra control is an extra item that can go wrong (if not properly maintained). There are a number of similarly logical reasons why I'd prefer to do it without that, not least of which is that if systems don't fit the logical structure they're supposed to represent then they are naturally more difficult to work with (they introduce more items that must be remembered specifically).
    Having said that, I will use that approach if I fail to find a more 'elegant' solution.
  4. I didn't give this idea much more than fleeting consideration mainly for the same reasons specified in my last paragraph.
I appreciate there are work-arounds for this situation, but I'm looking for :
  1. The most snugly fitting solution.
  2. To learn the fundamental concepts (of this particular issue) so that I will have the understanding and experience I need, should I come across similar issues in future.
Please don't think I fail to appreciate your efforts. That is far from the truth. I just thought you deserved a clear explanation of why they're not quite what I'm after.
Thank you again.
Aug 24 '07 #3
FishVal
2,653 Expert 2GB
I rarely use forms to manage my data so I expect this is easier than I found it (I hate it when OPs say that :D)

I have a simple table (laid out below) with lists of customers for various jobs that have to be run. The PK is a combination of the first two fields ([Job] & [CustNo]) and I will typically want to maintain the various (logically separate) lists in different sessions (I may well use the same form design but only show one job at a time).
For instance, when working on the 'ElecInv' job, I will filter to show only those records with [Job]='ElecInv'.
The form design is simply a [txtCustNo] control (linked to the [CustNo] field) on a continuous form.

Table Name=tblJobCust
Expand|Select|Wrap|Line Numbers
  1. Field; Type; IndexInfo
  2. Job; String; Composite PK
  3. CustNo; String; Composite PK
  4. Expiry; Date/Time    'Not necessarily required
My problem is that, although the form filters the existing records perfectly, when I try to add a new record (simply by entering the [CustNo] data) it complains about a missing [Job] field (ErrMsg=Index or primary key cannot contain a Null value). Clearly the [Job] field is not being set up to match the filter as I had (forlornly) hoped.

What do I need to do to add that value into the field? I'm hoping to avoid setting up invisible controls on the form. I expect I need to add the code in the Form_BeforeUpdate() event procedure, but exactly what I need to refer to I'm afraid I don't know. I also don't know which checks I may need to do to ensure this code is only run when a new entry is added and not when an existing record is amended or deleted.
Hi, NeoPa.

As far as I've got it, your form is "main form" but you are expecting subform like behaviour from it when it is filtered. I suggest you to emulate this behaviour by changing control.DefaultValue to filter value. If you've designed button for the form filtering this will be simple, if you use Access filter buttons you may handle Form_ApplyFilter event and parse fieldname to be filtered by and filtervalue from Form.Filter.

Regards,

Fish
Aug 24 '07 #4
JKing
1,206 Expert 1GB
I completely understand. I had actually just done a small form with a Many to Many relationship for my boss last night. It was something quick and dirty but it sounded like it might suit your problem. It was an event scheduler that all the office assitants could use to "sign" their superior up for an event.

In your case the events would be jobs and the attendee list would be a customer list. There is little coding involved.

I'm going to attach a picture cause it explains things better than I can.

Many To Many
Aug 24 '07 #5
NeoPa
32,556 Expert Mod 16PB
Hi, NeoPa.

As far as I've got it, your form is "main form" but you are expecting subform like behaviour from it when it is filtered. I suggest you to emulate this behaviour by changing control.DefaultValue to filter value. If you've designed button for the form filtering this will be simple, if you use Access filter buttons you may handle Form_ApplyFilter event and parse fieldname to be filtered by and filtervalue from Form.Filter.

Regards,

Fish
Fish,
Thanks for your response.
I was more hoping for subform behaviour than expecting it ;) I would have been a little surprised to find it if truth be told, but it illustrates clearly what I need at least.
A default value, while a good idea in some respects, would be more complicated than I'm looking for if it were tailored to each use, and mostly the wrong setting if not. In similar vein to my response to JKing earlier, I repeat that I'm not looking for a way around this issue. I'm hoping to gather the tools to handle this subject flexibly rather than an individual way around a specific problem.
How do I determine (in the Form_BeforeUpdate() procedure) what type of update is in process?
How do I (is it even possible without a dummy/invisible control) update the other key field in the record as Access is about to apply my changes from the form.

Again, thanks for your efforts which truly are appreciated :)
Aug 24 '07 #6
NeoPa
32,556 Expert Mod 16PB
I completely understand. I had actually just done a small form with a Many to Many relationship for my boss last night. It was something quick and dirty but it sounded like it might suit your problem. It was an event scheduler that all the office assitants could use to "sign" their superior up for an event.

In your case the events would be jobs and the attendee list would be a customer list. There is little coding involved.

I'm going to attach a picture cause it explains things better than I can.

Many To Many
Believe me when I say I'm not afraid of code or complexity.
What I need just now though, is to make a small - non disruptive change to an existing set-up. I'm hoping to have a template for further updates to my existing systems to make them more user-friendly (idiot-proof ;)). Code is not a problem, but I am looking for a simple structure that is both obvious to use, as well as obvious to maintain when I come back after years without looking at it.
One further point. Please don't feel it's up to any of you people to find a solution for me. If you know the answer - that's fine. If not - all suggestions are considered, but at the end of the day, it's down to me to find the solution and if I have to dig through the help-system or the documentation in detail, then I will. If I find anything pertinent I will post of course.
Aug 24 '07 #7
Scott Price
1,384 Expert 1GB
Hi NeoPa,

Not knowing a little more about your setup, I'm not sure if this is on the right track or not, but... If you are filtering the form based on the job number/type, how are you doing so? If on open, can you grab the Me.OpenArgs (which nec must include the job number that you are filtering on), and use it to populate the job part of your composite key using an INSERT INTO ... VALUES... sql update query (run as you indicated in the Before_Update event of your form)?

Regardless of whether you are able to use the openargs, or need to grab the job number from a combo box, etc, you will probably find the insert into update query is the easiest way to complete the composite primary key with it's job counterpart...

Regards,
Scott

p.s. I'll be looking back in on this with interest to see what you come up with!
Aug 25 '07 #8
FishVal
2,653 Expert 2GB
Fish,
Thanks for your response.
I was more hoping for subform behaviour than expecting it ;) I would have been a little surprised to find it if truth be told, but it illustrates clearly what I need at least.
A default value, while a good idea in some respects, would be more complicated than I'm looking for if it were tailored to each use, and mostly the wrong setting if not. In similar vein to my response to JKing earlier, I repeat that I'm not looking for a way around this issue. I'm hoping to gather the tools to handle this subject flexibly rather than an individual way around a specific problem.
How do I determine (in the Form_BeforeUpdate() procedure) what type of update is in process?
How do I (is it even possible without a dummy/invisible control) update the other key field in the record as Access is about to apply my changes from the form.

Again, thanks for your efforts which truly are appreciated :)
Hi, NeoPa.

I'm somewhat surprised with your answer.
The idea is to retrieve Form.Filter expression, parse fieldnames and filtervalues from it and find corresponding controls. Updating fields filtered by via Control.DefaultValues is only one possible (and to my mind the most suitable) option.
Anyway, I've written some code.
Expand|Select|Wrap|Line Numbers
  1. Dim colFilterAppliedTo As Collection
  2.  
  3. Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
  4.  
  5.     Dim strFilter As String
  6.     Dim intFilterCount As Integer
  7.     Dim strCmpExpr As String, strFieldName As String
  8.  
  9.     'Filter is being removed
  10.     If ApplyType = 0 Then
  11.         For Each ctrl In colFilterAppliedTo
  12.             ctrl.DefaultValue = ""
  13.         Next
  14.         Exit Sub
  15.     End If
  16.  
  17.     'Filter is being applied
  18.     Set colFilterAppliedTo = Nothing
  19.     Set colFilterAppliedTo = New Collection
  20.  
  21.     'Debracketing Access filter string, assumed fieldnames and filtervalues
  22.     'doesn't contain brackets
  23.     strFilter = Replace(Me.Filter, "(", "")
  24.     strFilter = Replace(strFilter, ")", "")
  25.  
  26.     intFilterCount = UBound(Split(strFilter, " and ", , vbTextCompare)) + 1
  27.  
  28.     For i = 0 To intFilterCount - 1
  29.  
  30.         strCmpExpr = Split(strFilter, " and ", , vbTextCompare)(i)
  31.         strFieldName = Split(strCmpExpr, "=")(0)
  32.  
  33.         On Error GoTo SkipControl
  34.         For Each ctrl In Me.Controls
  35.             'try to raise error on ctrl not supporting
  36.             'ControlSource or DefaultValue
  37.             If ctrl.ControlSource = ctrl.DefaultValue Then
  38.             End If
  39.             If ctrl.ControlSource = strFieldName Or _
  40.                 Split(strFieldName, ".")(1) = ctrl.ControlSource Then
  41.                     ctrl.DefaultValue = Split(strCmpExpr, "=")(1)
  42.                     colFilterAppliedTo.Add ctrl
  43.             End If
  44. Continue:
  45.         Next
  46.         On Error GoTo 0
  47.  
  48.     Next i
  49.     Exit Sub
  50.  
  51. SkipControl:
  52.             Resume Continue
  53.  
  54. End Sub
  55.  
  56. Private Sub Form_Close()
  57.     Set colFilterAppliedTo = Nothing
  58. End Sub
  59.  
Code features:
  • code is more or less context independant
  • it works so far with filter expression like "Expr1 AND Expr2 AND ... AND ExprN" taking ExprN into account when it is an exact comparisson
  • Control.Tag property may be used instead colFilterAppliedTo collection
  • the main idea is to parse fieldnames and filtervalues from Form.Filter and find relevant controls, form controls or table fields may be easily updated on Form_BeforeUpdate via Control.Value property or running SQL "UPDATE..."
Aug 25 '07 #9
NeoPa
32,556 Expert Mod 16PB
Hi NeoPa,

Not knowing a little more about your setup, I'm not sure if this is on the right track or not, but... If you are filtering the form based on the job number/type, how are you doing so? If on open, can you grab the Me.OpenArgs (which nec must include the job number that you are filtering on), and use it to populate the job part of your composite key using an INSERT INTO ... VALUES... sql update query (run as you indicated in the Before_Update event of your form)?

Regardless of whether you are able to use the openargs, or need to grab the job number from a combo box, etc, you will probably find the insert into update query is the easiest way to complete the composite primary key with it's job counterpart...

Regards,
Scott

p.s. I'll be looking back in on this with interest to see what you come up with!
Hi again Scott.
I appreciate your interest and the effort you've put in to help. As I've tried to express before though (tried being the operative word here - it's a subtle point that's not easy to pass on in words) my interest is to use Access methods better, rather than to try to get around them. I could put in some SQL (and I'm certainly already using the Me.Filter string to get my [Job] code)
Expand|Select|Wrap|Line Numbers
  1. 'Typical Me.Filter value = "[Job]='ElecInv'"
  2. strJob = Split(Me.Filter, "'")(1)
... but I would see that as getting around Access rather than using its features. I just find the features need a boost sometimes ;)
I am just starting to branch into using the forms to manage data in an interactive way (I've used forms before but mainly unbound, and simply as a way to control how a job (code) is run).
Going back to post #6 :
  1. I want a way (to know how to) of accessing the actual record buffer of the form without going via the controls of the form (if this is even possible).
  2. I also want a way to determine (within the BeforeUpdate event procedure) which type of update is in process (Edit or Add).

My best way so far, which is also what Jared suggested, is to include an extra, invisible, control (I've called txtJob). When this value is Null in my BeforeUpdate event procedure, I know that it's adding a new record. This works. This is not exactly as I'd like to design all my future record update forms as it means including an (or sometimes more than one) extra, invisible, control on the form. However, it's a perfectly workable solution which may be what I'm left with. If it is, I won't be too unhappy.
Aug 28 '07 #10
puppydogbuddy
1,923 Expert 1GB
Hi Adrian,

see this link:

http://support.microsoft.com/kb/210334

pDog
Aug 28 '07 #11
Denburt
1,356 Expert 1GB
Did I miss something or couldn't you just use something like the following to accomplish your goal.

Expand|Select|Wrap|Line Numbers
  1. Option Compare Database
  2. Option Explicit
  3. Dim GlobalFormVar As String
  4. Private Sub Form_Current()
  5. If Me.NewRecord = True Then
  6.  
Then on form filter or form open set the variable and it will contain the value when you need it.
Aug 28 '07 #12
NeoPa
32,556 Expert Mod 16PB
Hi, NeoPa.

I'm somewhat surprised with your answer.
The idea is to retrieve Form.Filter expression, parse fieldnames and filtervalues from it and find corresponding controls. Updating fields filtered by via Control.DefaultValues is only one possible (and to my mind the most suitable) option.
Anyway, I've written some code.
...
Fish,

I'm not sure what you're surprised at here :confused:
However, try going through my latest post (#18) and see if there are any questions you still have unanswered. If so, I will attempt to answer clearly what you ask.
Aug 28 '07 #13
NeoPa
32,556 Expert Mod 16PB
Hi Adrian,

see this link:

http://support.microsoft.com/kb/210334

pDog
Nice link pDog.
It's not quite what I'm after (see Den's post after yours), but it certainly is interesting. The second method seemed a particularly neat way of triggering the switch too :)
Aug 28 '07 #14
NeoPa
32,556 Expert Mod 16PB
Did I miss something or couldn't you just use something like the following to accomplish your goal.

Expand|Select|Wrap|Line Numbers
  1. Option Compare Database
  2. Option Explicit
  3. Dim GlobalFormVar As String
  4. Private Sub Form_Current()
  5. If Me.NewRecord = True Then
  6.  
Then on form filter or form open set the variable and it will contain the valu8e when you need it.
Den,
I'm not sure if your code was chopped intentionally or not, but the Me.NewRecord is certainly the answer to one of the questions I was asking :) The Form_Current() may also be the place to use it in place of the BeforeUpdate() procedure I'm currently using. I'll see how it fits in.
Aug 28 '07 #15
Denburt
1,356 Expert 1GB
Den,
I'm not sure if your code was chopped intentionally or not, but the Me.NewRecord is certainly the answer to one of the questions I was asking :) The Form_Current() may also be the place to use it in place of the BeforeUpdate() procedure I'm currently using. I'll see how it fits in.
The reason I didn't add any more to that little piece is because I still have some questions unanswered I will try to reread the posts to see if those are answered one I am not quite sure how you are filtering the form is it on form open, or like a search form or using the filter tool bar? I have not tried but I think that on form filter event would apply to most if not all of them so that could be a route to take also.
Aug 28 '07 #16
Denburt
1,356 Expert 1GB
O.K. ran a couple of tests for you and if your using VBA the filter event may have to be called manually if you want to use that in some fashion.
However, using the following code seemed to work quite well during the few tests that I ran.

Expand|Select|Wrap|Line Numbers
  1. Private Sub Form_Current()
  2.  
  3. If Me.NewRecord = True Then
  4. Dim rs As Recordset
  5. Dim strNme As String
  6. Set rs = Me.RecordsetClone
  7. If Not rs.EOF Then
  8. rs.MoveLast
  9. strNme = rs!Job
  10. Me!Job = strNme
  11. End If
  12. rs.Close
  13. Set rs = Nothing
  14. End If
  15. End Sub
  16.  
Aug 28 '07 #17
NeoPa
32,556 Expert Mod 16PB
Right.
This is like a broadcast post to all that have shown an interest in this thread. I'm conscious that I haven't replied in any detail to Fish's last post but I think this will cover that too ;)
BTW Denburt - I'm calling it from code using OpenForm with a {WhereCondition} parameter of the filter.

In fact, while experimenting myself and trying to find a consistent approach which was also relatively straightforward both for the developers and the users, I came around to the approach of using a VISIBLE control (I know I was originally avoiding that approach) for the know index element.
Not only that, but instead of using code to capture an attempt to write a missing or wrong value in here I decided that setting a default using code (just on the form) was actually a good idea after all. In my real-life scenario, I also had an extra field in the table which is only relevant for one of the jobs. This is also handled in the code by making it invisible where required.

I include the code from my module here for all those that may be interested. It's a fair way off what I originally envisaged, but I've moved on since then. The only really pertinent code is in the Form_Open() procedure, but I included the rest in case it helps with context.
Expand|Select|Wrap|Line Numbers
  1. Option Compare Database
  2. Option Explicit
  3.  
  4. Private Sub Form_Open(Cancel As Integer)
  5.   Dim strJob As String, strDefault As String
  6.  
  7.   With Me
  8.     strJob = IIf(IsNull(.Filter), "", Split(.Filter, "'")(1))
  9.     .Caption = Replace(.Caption, "%J", strJob)
  10.     .lblTitle.Caption = Replace(.lblTitle.Caption, "%J", strJob)
  11.     .txtJob.DefaultValue = "'" & strJob & "'"
  12.     strDefault = Replace("#31 Dec %Y#", "%Y", Year(Date + 5))
  13.     .txtExpiry.DefaultValue = IIf(strJob = "Mgmt", strDefault, "")
  14.     .lblExpiry.Visible = (strJob = "Mgmt")
  15.     .txtExpiry.Visible = .lblExpiry.Visible
  16.   End With
  17. End Sub
  18.  
  19. Private Sub cmdDelete_Click()
  20.   With Me
  21.     If Not IsNull(.txtJob) Then
  22.       'We allow for cancellation by operator
  23.       On Error Resume Next
  24.       Call DoCmd.RunCommand(acCmdDeleteRecord)
  25.       On Error GoTo 0
  26.     End If
  27.     Call .txtAccountNo.SetFocus
  28.   End With
  29. End Sub
  30.  
  31. Private Sub cmdExit_Click()
  32.   Call DoCmd.Close(ObjectType:=acForm, ObjectName:=Me.Name)
  33. End Sub
  34.  
  35. Private Sub Form_Close()
  36.   'Method must exist in order for container to handle event.
  37. End Sub
Thank you all for your help :)
Aug 28 '07 #18

Sign in to post your reply or Sign up for a free account.

Similar topics

17
by: Danny J. Lesandrini | last post by:
The following code works with a standard MDB to navigate to a particluar record (with a DAO recordset, of course) but it's giving me problems in an ADP I'm working on. Dim rs As ADODB.Recordset...
8
by: Zlatko Matić | last post by:
There is a form (single form) and a combobox. I want that current record of the form is adjusted according to selected value in the combobox. Cuurrent record should be the same as the value in the...
12
by: swingingming | last post by:
Hi, in the NorthWind sample database, when clicking on the next navigation button on the new order record with nothing on the subform (order details), we got an order with nothing ordered. How can...
0
by: Patrick | last post by:
I'm working on a contact management application, and need a hand with one aspect... Here's what I want to create: ------------------------------------ A form split into two parts. There is a...
2
by: 2D Rick | last post by:
When I filter a form by part number it returns 3 records. If I move to the third record and print it, the form returns to the first record. Can I force it to stay on the chosen record? Thanks,...
4
by: bobg.rjservices | last post by:
running access 2k; adp w/ linked tables to SQL server; I am absolutely stymied, and ticked off beyond belief - I can not believe how much time I've wasted trying to do something that should be...
6
by: paulcrowsnest | last post by:
I have a master form (clients), and 2 subforms (invoice and credit account details). This all works great. ive added a command button in the master form (clients) to open a new form as a popup where...
5
AccessIdiot
by: AccessIdiot | last post by:
Argh! Just when I think everything is working and I am doing one final test before showing it to the guys I built the db for, Access throws out a weird message and won't let me add a record. But only...
6
jinalpatel
by: jinalpatel | last post by:
I am using following code for searching records. 'Purpose: Build up the criteria string form the non-blank search boxes, and apply to the form's Filter. 'Notes: 1. We tack " AND " on...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.