473,836 Members | 1,472 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Dealing with ties in ranking code

ED
I currently have vba code that ranks employees based on their average
job time ordered by their region, zone, and job code. I currently
have vba code that will cycle through a query and ranks each employee
based on their region, zone, job code and avg job time. (See code
below). My problem is that I do not know how to rank the ties. Right
now if two people have the same avg time one will be ranked 3rd and
the other ranked 4th. I would like to have them both be ranked 3rd.
If anyone has any ideas please let me know.

Thanks

Public Function CalculateMonthl yTotalsbyYard(s trPeriod As String)
'************** *************** *************** *************** *************** *************** **
' strPeriod has form YYYYMM
'
' To USE this code, you must click 'Tools/References' in the menu bar
' - Then select the "Microsoft DAO 3.6 Object Library" reference.
'************** *************** *************** *************** *************** *************** **
Dim rstRead As DAO.Recordset
Dim rstWriteEmp As DAO.Recordset
Dim rstWriteTot As DAO.Recordset
Dim strSQL As String
Dim iRank As Integer
Dim iRegionZoneCoun t As Integer
Dim iPrevZone As Integer
Dim iPrevRegion As Integer
Dim iPrevJobCode As Integer
Dim sPrevYrMo As String

' Set String to hold select statement which returns Employees in
Ranking Order
strSQL = "SELECT * FROM [qryEmployeeSums] " & _
" WHERE [YrMo] = '" & strPeriod & "' " & _
"ORDER BY [Region], [Zone], [JobCode], [AvgTime] ASC;"

' Initialize the Recordset with the query data
Set rstRead = CurrentDb.openr ecordset(strSQL )

' Make sure that some rows were returned
If rstRead.RecordC ount > 0 Then

' Initialize the Recordset for writing Employee Data
Set rstWriteEmp = CurrentDb.openr ecordset("tblEm ployeeSums")

' Initialize the Recordset for writing Region,Zone,Job Code
Employee Totals
Set rstWriteTot =
CurrentDb.openr ecordset("tblRe gionZoneJobTota ls")

' Initialize variables
iPrevRegion = 0
iPrevZone = 0
iPrevJobCode = 0

' Move to the first record and
rstRead.MoveFir st

' Spin through each row returned, accumulating rankings
While Not rstRead.EOF
If rstRead![Region] = iPrevRegion And _
rstRead![Zone] = iPrevZone And _
rstRead![JobCode] = iPrevJobCode Then

' Increment Ranking for Current Employee
iRank = iRank + 1

' Increment total counters for Current Region, Zone
and Job Code
iRegionZoneCoun t = iRegionZoneCoun t + 1
Else
' Region, Zone or JobCode has changed, write Totals
record
' Note: Do not write for very first record
If iPrevRegion <> 0 Then
With rstWriteTot
.AddNew
![Region] = iPrevRegion
![Zone] = iPrevZone
![JobCode] = iPrevJobCode
![YrMo] = sPrevYrMo
![EmpCount] = iRegionZoneCoun t
.Update
End With
End If

' Set Previous variables on current record
iPrevRegion = rstRead![Region]
iPrevZone = rstRead![Zone]
iPrevJobCode = rstRead![JobCode]
sPrevYrMo = rstRead![YrMo]
iRank = 1
iRegionZoneCoun t = 1
End If

' Write Current Employee Total Record to Table
With rstWriteEmp
.AddNew
![Region] = rstRead![Region]
![Zone] = rstRead![Zone]
![JobCode] = rstRead![JobCode]
![YrMo] = rstRead![YrMo]
![EmployeeID] = rstRead![EmployeeID]
![JobsComp] = rstRead![JobsComp]
![TotalTime] = rstRead![TotalTime]
![AvgTime] = rstRead![AvgTime]
![Ranking] = iRank
.Update
End With

' Get the next record
rstRead.MoveNex t

Wend

' Write the Final totals record
With rstWriteTot
.AddNew
![Region] = iPrevRegion
![Zone] = iPrevZone
![JobCode] = iPrevJobCode
![YrMo] = sPrevYrMo
![EmpCount] = iRegionZoneCoun t
.Update
End With

End If

End Function
Nov 13 '05 #1
5 4075
Ed,

I haven't studied your code closely so my comments are only general.

You need to first calculate all the avg times. Next you need to run an unique
values query to eliminate duplicate avg times. Next rank the avg times. Finally
associate the ranking to the people. If two people have the same avg time (say
ranked 3rd), both people will be ranked third.

--
PC Datasheet
Your Resource For Help With Access, Excel And Word Applications
re******@pcdata sheet.com
www.pcdatasheet.com
"ED" <da******@hotma il.com> wrote in message
news:ad******** *************** ***@posting.goo gle.com...
I currently have vba code that ranks employees based on their average
job time ordered by their region, zone, and job code. I currently
have vba code that will cycle through a query and ranks each employee
based on their region, zone, job code and avg job time. (See code
below). My problem is that I do not know how to rank the ties. Right
now if two people have the same avg time one will be ranked 3rd and
the other ranked 4th. I would like to have them both be ranked 3rd.
If anyone has any ideas please let me know.

Thanks

Public Function CalculateMonthl yTotalsbyYard(s trPeriod As String)
'************** *************** *************** *************** *************** *****
************ ' strPeriod has form YYYYMM
'
' To USE this code, you must click 'Tools/References' in the menu bar
' - Then select the "Microsoft DAO 3.6 Object Library" reference.
'************** *************** *************** *************** *************** *****
************ Dim rstRead As DAO.Recordset
Dim rstWriteEmp As DAO.Recordset
Dim rstWriteTot As DAO.Recordset
Dim strSQL As String
Dim iRank As Integer
Dim iRegionZoneCoun t As Integer
Dim iPrevZone As Integer
Dim iPrevRegion As Integer
Dim iPrevJobCode As Integer
Dim sPrevYrMo As String

' Set String to hold select statement which returns Employees in
Ranking Order
strSQL = "SELECT * FROM [qryEmployeeSums] " & _
" WHERE [YrMo] = '" & strPeriod & "' " & _
"ORDER BY [Region], [Zone], [JobCode], [AvgTime] ASC;"

' Initialize the Recordset with the query data
Set rstRead = CurrentDb.openr ecordset(strSQL )

' Make sure that some rows were returned
If rstRead.RecordC ount > 0 Then

' Initialize the Recordset for writing Employee Data
Set rstWriteEmp = CurrentDb.openr ecordset("tblEm ployeeSums")

' Initialize the Recordset for writing Region,Zone,Job Code
Employee Totals
Set rstWriteTot =
CurrentDb.openr ecordset("tblRe gionZoneJobTota ls")

' Initialize variables
iPrevRegion = 0
iPrevZone = 0
iPrevJobCode = 0

' Move to the first record and
rstRead.MoveFir st

' Spin through each row returned, accumulating rankings
While Not rstRead.EOF
If rstRead![Region] = iPrevRegion And _
rstRead![Zone] = iPrevZone And _
rstRead![JobCode] = iPrevJobCode Then

' Increment Ranking for Current Employee
iRank = iRank + 1

' Increment total counters for Current Region, Zone
and Job Code
iRegionZoneCoun t = iRegionZoneCoun t + 1
Else
' Region, Zone or JobCode has changed, write Totals
record
' Note: Do not write for very first record
If iPrevRegion <> 0 Then
With rstWriteTot
.AddNew
![Region] = iPrevRegion
![Zone] = iPrevZone
![JobCode] = iPrevJobCode
![YrMo] = sPrevYrMo
![EmpCount] = iRegionZoneCoun t
.Update
End With
End If

' Set Previous variables on current record
iPrevRegion = rstRead![Region]
iPrevZone = rstRead![Zone]
iPrevJobCode = rstRead![JobCode]
sPrevYrMo = rstRead![YrMo]
iRank = 1
iRegionZoneCoun t = 1
End If

' Write Current Employee Total Record to Table
With rstWriteEmp
.AddNew
![Region] = rstRead![Region]
![Zone] = rstRead![Zone]
![JobCode] = rstRead![JobCode]
![YrMo] = rstRead![YrMo]
![EmployeeID] = rstRead![EmployeeID]
![JobsComp] = rstRead![JobsComp]
![TotalTime] = rstRead![TotalTime]
![AvgTime] = rstRead![AvgTime]
![Ranking] = iRank
.Update
End With

' Get the next record
rstRead.MoveNex t

Wend

' Write the Final totals record
With rstWriteTot
.AddNew
![Region] = iPrevRegion
![Zone] = iPrevZone
![JobCode] = iPrevJobCode
![YrMo] = sPrevYrMo
![EmpCount] = iRegionZoneCoun t
.Update
End With

End If

End Function

Nov 13 '05 #2
This may not be the most efficient way but I think this will work
** Designates new lines of code

**Dim iPrevAvgTime As Integer
**Dim iTempAvgTime As Integer

**'initialize
**iPrevAvgTime = 0

' Spin through each row returned, accumulating rankings
While Not rstRead.EOF
If rstRead![Region] = iPrevRegion And _
rstRead![Zone] = iPrevZone And _
rstRead![JobCode] = iPrevJobCode Then
** rstRead![AvgTime] = iTempAvgTime

** If iTempAvgTime = iPrevAvgTime And iRank <> 0 Then
** iRank = iRank - 1
** End If

** iPrevAvgTime = iTempAvgTime
' Increment Ranking for Current Employee
iRank = iRank + 1
Nov 13 '05 #3
"ED" <da******@hotma il.com> wrote in message
news:ad******** *************** ***@posting.goo gle.com...
I currently have vba code that ranks employees based on their average
job time ordered by their region, zone, and job code. I currently
have vba code that will cycle through a query and ranks each employee
based on their region, zone, job code and avg job time. (See code
below). My problem is that I do not know how to rank the ties. Right
now if two people have the same avg time one will be ranked 3rd and
the other ranked 4th. I would like to have them both be ranked 3rd.
If anyone has any ideas please let me know.

I'm sure you would be better off replacing all this code with a single SQL
query. If you post your (simplified) table struture with some sample data
and the output you need someone will probably be able to write the query for
you.
Nov 13 '05 #4

Thanks for the help everyone, I was able to account for the ties with
the following code.
Dim rstRead As DAO.Recordset
Dim rstWriteEmp As DAO.Recordset
Dim rstWriteTot As DAO.Recordset
Dim strSQL As String
Dim iRank As Integer
Dim iRegionZoneCoun t As Integer
Dim iPrevZone As Integer
Dim iPrevRegion As String
Dim iPrevJobCode As String
Dim sPrevYr As String

Dim iPrevAvgTime As Integer
Dim iRankSkipCounte r As Integer
Dim iLastRecordTie As Integer
Dim iCurrAvgTime As Integer

' Set String to hold select statement which returns Employees in
Ranking Order
strSQL = "SELECT * FROM [qryEmployeeSums byYard] " & _
" WHERE [Year] = '" & strPeriod & "' " & _
"ORDER BY [Region Code], [Zone Code], [Job Code], [AvgTime]
ASC;"

' Initialize the Recordset with the query data
Set rstRead = CurrentDb.openr ecordset(strSQL )

' Make sure that some rows were returned
If rstRead.RecordC ount > 0 Then

' Initialize the Recordset for writing Employee Data
Set rstWriteEmp =
CurrentDb.openr ecordset("tblEm ployeeSumsbyYar d")

' Initialize the Recordset for writing Region,Zone,Job Code
Employee Totals
Set rstWriteTot =
CurrentDb.openr ecordset("tblRe gionZoneJobTota ls")

' Initialize variables
iPrevRegion = "0"
iPrevZone = 0
iPrevJobCode = "0"

' Move to the first record and
rstRead.MoveFir st

' Spin through each row returned, accumulating rankings
While Not rstRead.EOF

If rstRead![Region Code] = iPrevRegion And _
rstRead![Zone Code] = iPrevZone And _
rstRead![Job Code] = iPrevJobCode Then

' Check if Current Employee's time equals the Previous
Employee's time.
If iPrevAvgTime = rstRead![AvgTime] Then
'If Current Employee's time is equal to the Previous
Employee's time then advance
'counter by 1 and set Record Tie Flag to 1
iRankSkipCounte r = iRankSkipCounte r + 1
iLastRecordTie = 1

Else

' If there is no tie, Increment Ranking for Current
Employee
iRank = iRank + 1

'If there is no tie, then test to see if the Record Tie
Flag is = 1
If iLastRecordTie = 1 Then

'If there is a tie set the current employee's
ranking to the previous rank + SkipCounter
iRank = iRank + iRankSkipCounte r
iRankSkipCounte r = 0
iLastRecordTie = 0

End If

End If

' Increment total counters for Current Region, Zone/Yard
and Job Code
iRegionZoneCoun t = iRegionZoneCoun t + 1
Else
' Region, Zone or JobCode has changed, write Totals
record
' Note: Do not write for very first record
If iPrevRegion <> 0 Then
With rstWriteTot
.AddNew
![Region Code] = iPrevRegion
![Zone Code] = iPrevZone
![Job Code] = iPrevJobCode
![Year] = sPrevYr
![EmpCount] = iRegionZoneCoun t
.Update
End With
End If

' Set Previous variables on current record
iPrevRegion = rstRead![Region Code]
iPrevZone = rstRead![Zone Code]
iPrevJobCode = rstRead![Job Code]
sPrevYr = rstRead![Year]
iRank = 1
iRegionZoneCoun t = 1
'Initialize tie variables back to 0
iRankSkipCounte r = 0
iLastRecordTie = 0

End If

' Write Current Employee Total Record to Table
With rstWriteEmp
.AddNew
![Region Code] = rstRead![Region Code]
![Zone Code] = rstRead![Zone Code]
![Job Code] = rstRead![Job Code]
![Year] = rstRead![Year]
![Employee ID] = rstRead![Employee ID]
![JobsComp] = rstRead![JobsComp]
![TotalTime] = rstRead![TotalTime]
![AvgTime] = rstRead![AvgTime]
![Ranking] = iRank
.Update
End With

'Set the iPrevAvgTime to the current record AvgTime before
you get the next record
iPrevAvgTime = rstRead![AvgTime]
'Get the next record of the recordset
rstRead.MoveNex t

Wend

' Write the Final totals record
With rstWriteTot
.AddNew
![Region Code] = iPrevRegion
![Zone Code] = iPrevZone
![Job Code] = iPrevJobCode
![Year] = sPrevYr
![EmpCount] = iRegionZoneCoun t
.Update
End With

End If

End Function

Thanks Again
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 13 '05 #5
The Microsoft Partners Directory FAQ [1] explains how Microsoft
prioritized a ranking system for partner listings.

--
<%= Clinton Gallagher, "Twice the Results -- Half the Cost"
Architectural & e-Business Consulting -- Software Development
NET cs*********@REM OVETHISTEXTmetr omilwaukee.com
URL http://www.metromilwaukee.com/clintongallagher/

[1] http://members.microsoft.com/partner...aspx#P137_9139

"ED" <da******@hotma il.com> wrote in message
news:ad******** *************** ***@posting.goo gle.com...
I currently have vba code that ranks employees based on their average
job time ordered by their region, zone, and job code. I currently
have vba code that will cycle through a query and ranks each employee
based on their region, zone, job code and avg job time. (See code
below). My problem is that I do not know how to rank the ties. Right
now if two people have the same avg time one will be ranked 3rd and
the other ranked 4th. I would like to have them both be ranked 3rd.
If anyone has any ideas please let me know.

Thanks

Public Function CalculateMonthl yTotalsbyYard(s trPeriod As String)
'************** *************** *************** *************** *************** *
*************** * ' strPeriod has form YYYYMM
'
' To USE this code, you must click 'Tools/References' in the menu bar
' - Then select the "Microsoft DAO 3.6 Object Library" reference.
'************** *************** *************** *************** *************** *
*************** * Dim rstRead As DAO.Recordset
Dim rstWriteEmp As DAO.Recordset
Dim rstWriteTot As DAO.Recordset
Dim strSQL As String
Dim iRank As Integer
Dim iRegionZoneCoun t As Integer
Dim iPrevZone As Integer
Dim iPrevRegion As Integer
Dim iPrevJobCode As Integer
Dim sPrevYrMo As String

' Set String to hold select statement which returns Employees in
Ranking Order
strSQL = "SELECT * FROM [qryEmployeeSums] " & _
" WHERE [YrMo] = '" & strPeriod & "' " & _
"ORDER BY [Region], [Zone], [JobCode], [AvgTime] ASC;"

' Initialize the Recordset with the query data
Set rstRead = CurrentDb.openr ecordset(strSQL )

' Make sure that some rows were returned
If rstRead.RecordC ount > 0 Then

' Initialize the Recordset for writing Employee Data
Set rstWriteEmp = CurrentDb.openr ecordset("tblEm ployeeSums")

' Initialize the Recordset for writing Region,Zone,Job Code
Employee Totals
Set rstWriteTot =
CurrentDb.openr ecordset("tblRe gionZoneJobTota ls")

' Initialize variables
iPrevRegion = 0
iPrevZone = 0
iPrevJobCode = 0

' Move to the first record and
rstRead.MoveFir st

' Spin through each row returned, accumulating rankings
While Not rstRead.EOF
If rstRead![Region] = iPrevRegion And _
rstRead![Zone] = iPrevZone And _
rstRead![JobCode] = iPrevJobCode Then

' Increment Ranking for Current Employee
iRank = iRank + 1

' Increment total counters for Current Region, Zone
and Job Code
iRegionZoneCoun t = iRegionZoneCoun t + 1
Else
' Region, Zone or JobCode has changed, write Totals
record
' Note: Do not write for very first record
If iPrevRegion <> 0 Then
With rstWriteTot
.AddNew
![Region] = iPrevRegion
![Zone] = iPrevZone
![JobCode] = iPrevJobCode
![YrMo] = sPrevYrMo
![EmpCount] = iRegionZoneCoun t
.Update
End With
End If

' Set Previous variables on current record
iPrevRegion = rstRead![Region]
iPrevZone = rstRead![Zone]
iPrevJobCode = rstRead![JobCode]
sPrevYrMo = rstRead![YrMo]
iRank = 1
iRegionZoneCoun t = 1
End If

' Write Current Employee Total Record to Table
With rstWriteEmp
.AddNew
![Region] = rstRead![Region]
![Zone] = rstRead![Zone]
![JobCode] = rstRead![JobCode]
![YrMo] = rstRead![YrMo]
![EmployeeID] = rstRead![EmployeeID]
![JobsComp] = rstRead![JobsComp]
![TotalTime] = rstRead![TotalTime]
![AvgTime] = rstRead![AvgTime]
![Ranking] = iRank
.Update
End With

' Get the next record
rstRead.MoveNex t

Wend

' Write the Final totals record
With rstWriteTot
.AddNew
![Region] = iPrevRegion
![Zone] = iPrevZone
![JobCode] = iPrevJobCode
![YrMo] = sPrevYrMo
![EmpCount] = iRegionZoneCoun t
.Update
End With

End If

End Function

Nov 13 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

44
3807
by: flyingfred0 | last post by:
A small software team (developers, leads and even the manager when he's had time) has been using (wx)Python/PostgreSQL for over 2 years and developed a successful 1.0 release of a client/server product. A marketing/product manager has brought in additional management and "architecture" experts to propose moving the entire thing to a Java (application server) platform for the next release. They want a "scalable, enterprise solution"...
11
4243
by: Petre Huile | last post by:
I have designed a site for a client, but they have hired an internet marketing person to incrase their search engine ranking and traffic. He wants to put extra-large fonts on every page which will make the design looks a bit rediculous. He also said that the big text cannot be hidden. I am just trying to find a compromise. Here are the questions: (1) Is it true that a page with an <H1> tag and very big font size will make a search...
13
1865
by: Eric Lilja | last post by:
Hello, consider the following complete program: #include <assert.h> #include <ctype.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <time.h> static int has_char(const char *, const char);
5
10928
by: valglad | last post by:
Hi, The question below was posted about 4 years ago and noone was able to answer it back then. I have virtually the same type of problem so would appreciate if anyone can help. Thanks ======================================================================
6
3811
by: sara | last post by:
I hope someone can help with this. Our director wants to have a report that will have the departments (Retail stores) across the top, stores down the side and the RANKING of the YTD dept sales within the chain in the cell. Store/Dept 1 2 3 4 B 8 1 5 2 R 1 3 2 6 (etc.)
8
3510
by: AnndieMac | last post by:
I have an Access 2002 database of inventory count results, and I have been asked to create summaries of the items with the most losses at a store, region and national level. Individually, I have been able to create these summaries easily enough using several sorted queries and a form to select the specific store, or to pull up the regional or national summaries. The problem is that they want to be able to have one file for each store which...
5
5085
by: Chris | last post by:
I was wodering if there was a way to rank numbers in a query like this #'s Rank 100 1 99 2 98 3 98 97 5 96 6 96
0
8669
debasisdas
by: debasisdas | last post by:
Rank:-assigns A Unique Number For Each Row Starting With 1,except For Rows That Have Duplicate Values,in Which Case The Same Ranking Is Assigned And A Gap Appears In The Sequence For Each Duplicate Ranking. Row_number:-returns A Unique Number For Each Row Starting With 1.for Rows That Have Duplicate Values,numbers Are Arbitarily Assigned. Dense_rank:-assigns A Unique Number For Each Row Starting With 1,except For Rows That Have Duplicate...
1
1993
by: Paulo | last post by:
Hi, I need to create a ranking column wich will be the row number... it is the seller wich most sells... Ranking Seller Sum 1 Paul 2.212,00 2 Robert 1.500,00 3 .... ..... I have already the sql, but I dont know how to do the ranking number
0
9671
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10854
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10257
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 protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7794
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6981
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5651
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
5829
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4459
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
3
3116
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.