I posted that I was having trouble with a SQL statement that was working in
the SQL window, but not in VBA. I have since discovered that when I create
the string in VBA it is over 1023 characters long. When I copy this string
into the SQL window, it splits into two lines, one of 1023 and the remainder
in the next. When I remove that break, the query runs just fine.
Since Access tells me that a string can hold 10^16 (64k), it did not seem to
be a string capacity problem (plus the part of the string that went to the
next line was still there). I searched the archives and saw reference to
VBA limit of 1023 characters per line and that with underscores you could
create a logical line of something like 10 lines of 1023 each. I do not need
anywhere near that much, but it seemed like a solution. But I have no idea
how to implement it; the syntax is unclear to me.
Currently, I set up a string and add to it (i.e. strMySql = "some Sql
Statement" and then strMySql = strMySql +"some other new statement"). I
can now decide to use to variables to catch the first part of the string and
make sure it is less than 1023 and then the rest of the string I can assign
to a second variable. But I have no idea what to do with that. The
underscore character and a new line might be the answer, but how to
implement? Currently, when I have the sql statement built into one
variable, I then use the following:
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
When the sql statement is shorter, this works just fine and I get my
recordset and go on from there. How could I use a "logical line" here?
Thanks
Alan 11 50365
strMySql = "some sql text goes here " & _
"and more sql text goes here " & _
"and so on "
strMySql = strMySql & "you can continue to add " & _
"to the string in this manner also " & _
"when you get it all built the way " & _
"you want it, then simply use:"
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
HTH
Randy
"Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote in message
news:fbzOb.9503 3$na.49992@attb i_s04... I posted that I was having trouble with a SQL statement that was working
in the SQL window, but not in VBA. I have since discovered that when I
create the string in VBA it is over 1023 characters long. When I copy this
string into the SQL window, it splits into two lines, one of 1023 and the
remainder in the next. When I remove that break, the query runs just fine.
Since Access tells me that a string can hold 10^16 (64k), it did not seem
to be a string capacity problem (plus the part of the string that went to the next line was still there). I searched the archives and saw reference to VBA limit of 1023 characters per line and that with underscores you could create a logical line of something like 10 lines of 1023 each. I do not
need anywhere near that much, but it seemed like a solution. But I have no
idea how to implement it; the syntax is unclear to me.
Currently, I set up a string and add to it (i.e. strMySql = "some Sql Statement" and then strMySql = strMySql +"some other new statement"). I can now decide to use to variables to catch the first part of the string
and make sure it is less than 1023 and then the rest of the string I can
assign to a second variable. But I have no idea what to do with that. The underscore character and a new line might be the answer, but how to implement? Currently, when I have the sql statement built into one variable, I then use the following:
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
When the sql statement is shorter, this works just fine and I get my recordset and go on from there. How could I use a "logical line" here?
Thanks Alan
"Randy Harris" <ra***@SpamFree .com> wrote in message
news:8c******** **************@ newssvr28.news. prodigy.com... strMySql = "some sql text goes here " & _ "and more sql text goes here " & _ "and so on "
strMySql = strMySql & "you can continue to add " & _ "to the string in this manner also " & _ "when you get it all built the way " & _ "you want it, then simply use:"
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
I tried that, but it merely seems to do what it did before, put too many
characters into the string and then Access splits them when they get over
1023. I cannot put a line continuation character after each line since
there are more than 10 lines and the limit is 10. So I built the string as
before, but once I got around 900 chars or so, I used the continuation char
for the last several lines. When I stepped thru the code in debug mode, the
continuation lines form a contiguous block. But they concatenate to the
previous string and the result is a string variable holding about 1200 chars
and then being unrecognized by Access. Once again, I copy from Immediate to
SQL window and the code splits into two segments at 1023 chars.
This string building takes place in a function with the result of the
function being the sql stmt (if that matters).
"Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote in message news:fbzOb.9503 3$na.49992@attb i_s04... I posted that I was having trouble with a SQL statement that was working in the SQL window, but not in VBA. I have since discovered that when I create the string in VBA it is over 1023 characters long. When I copy this string into the SQL window, it splits into two lines, one of 1023 and the remainder in the next. When I remove that break, the query runs just fine.
Since Access tells me that a string can hold 10^16 (64k), it did not
seem to be a string capacity problem (plus the part of the string that went to
the next line was still there). I searched the archives and saw reference
to VBA limit of 1023 characters per line and that with underscores you
could create a logical line of something like 10 lines of 1023 each. I do not
need anywhere near that much, but it seemed like a solution. But I have no idea how to implement it; the syntax is unclear to me.
Currently, I set up a string and add to it (i.e. strMySql = "some Sql Statement" and then strMySql = strMySql +"some other new statement").
I can now decide to use to variables to catch the first part of the string and make sure it is less than 1023 and then the rest of the string I can assign to a second variable. But I have no idea what to do with that. The underscore character and a new line might be the answer, but how to implement? Currently, when I have the sql statement built into one variable, I then use the following:
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
When the sql statement is shorter, this works just fine and I get my recordset and go on from there. How could I use a "logical line" here?
Thanks Alan
Alan,
The solution to your problem is probably a combination of both techniques:
Line continuation characters, and String Concatenation.
Here is an example of the correct technique. Notice ampersands and line
continuation characters at the end of each line, and then when the thing
gets too long, we start over again, and add more to the string. This
example was written in the example Northwind database that comes with
Access. It is UNTESTED.
---Begin Code---
Dim strSQL as String
'Begin building the string. Notice that the end of the next two lines both
have spaces before the closing quote.
strSQL = "SELECT CompanyName, ContactName, ContactTitle, Address, City,
Region, PostalCode, " & _
"Country, Phone, Fax, OrderDate, RequiredDate, ShippedDate,
ShipVia, Freight, ShipName, "
'Here we begin again. This overcomes the ten-line continuation limiatation
of VBA.
strSQL = strSQL & _
"ShipAddres s, ShipCity, ShipRegion, ShipPostalCode,
ShipCountry "
'And again.
strSQL = strSQL & _
"FROM Customers INNER JOIN Orders ON Customers.Custo merID =
Orders.Customer ID " & _
"WHERE CompanyName= '" & strMyCompanyNam e & "' AND
ShipPostalCode= " & strMyShipPostal Code
strSQL = strSQL & _
" ORDER BY CompanyName, ContactName;"
---End Code---
"Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote in message
news:CiBOb.9403 5$I06.415161@at tbi_s01... "Randy Harris" <ra***@SpamFree .com> wrote in message news:8c******** **************@ newssvr28.news. prodigy.com... strMySql = "some sql text goes here " & _ "and more sql text goes here " & _ "and so on "
strMySql = strMySql & "you can continue to add " & _ "to the string in this manner also " & _ "when you get it all built the way " & _ "you want it, then simply use:"
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql) I tried that, but it merely seems to do what it did before, put too many characters into the string and then Access splits them when they get over 1023. I cannot put a line continuation character after each line since there are more than 10 lines and the limit is 10. So I built the string
as before, but once I got around 900 chars or so, I used the continuation
char for the last several lines. When I stepped thru the code in debug mode,
the continuation lines form a contiguous block. But they concatenate to the previous string and the result is a string variable holding about 1200
chars and then being unrecognized by Access. Once again, I copy from Immediate
to SQL window and the code splits into two segments at 1023 chars.
This string building takes place in a function with the result of the function being the sql stmt (if that matters).
"Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote in message news:fbzOb.9503 3$na.49992@attb i_s04... I posted that I was having trouble with a SQL statement that was
working in the SQL window, but not in VBA. I have since discovered that when I create the string in VBA it is over 1023 characters long. When I copy this string into the SQL window, it splits into two lines, one of 1023 and the remainder in the next. When I remove that break, the query runs just fine.
Since Access tells me that a string can hold 10^16 (64k), it did not seem to be a string capacity problem (plus the part of the string that went to the next line was still there). I searched the archives and saw reference to VBA limit of 1023 characters per line and that with underscores you could create a logical line of something like 10 lines of 1023 each. I do
not need anywhere near that much, but it seemed like a solution. But I have no idea how to implement it; the syntax is unclear to me.
Currently, I set up a string and add to it (i.e. strMySql = "some Sql Statement" and then strMySql = strMySql +"some other new
statement"). I can now decide to use to variables to catch the first part of the
string and make sure it is less than 1023 and then the rest of the string I can assign to a second variable. But I have no idea what to do with that. The underscore character and a new line might be the answer, but how to implement? Currently, when I have the sql statement built into one variable, I then use the following:
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
When the sql statement is shorter, this works just fine and I get my recordset and go on from there. How could I use a "logical line"
here? Thanks Alan
On Sun, 18 Jan 2004 19:57:14 GMT, "Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote: "Randy Harris" <ra***@SpamFree .com> wrote in message news:8c******* *************** @newssvr28.news .prodigy.com... strMySql = "some sql text goes here " & _ "and more sql text goes here " & _ "and so on "
strMySql = strMySql & "you can continue to add " & _ "to the string in this manner also " & _ "when you get it all built the way " & _ "you want it, then simply use:"
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
I tried that, but it merely seems to do what it did before, put too many characters into the string and then Access splits them when they get over 1023. I cannot put a line continuation character after each line since there are more than 10 lines and the limit is 10. So I built the string as before, but once I got around 900 chars or so, I used the continuation char for the last several lines. When I stepped thru the code in debug mode, the continuation lines form a contiguous block. But they concatenate to the previous string and the result is a string variable holding about 1200 chars and then being unrecognized by Access. Once again, I copy from Immediate to SQL window and the code splits into two segments at 1023 chars.
This string building takes place in a function with the result of the function being the sql stmt (if that matters).
Instead of using line continuations break your string into distinct lines using vbCrLf and then concatenate the lines together.
strMySQL = "This is line one " & vbCrLf
strMySQL = strMySQL & "This is line two " & vbCrLf
strMySQL = strMySQL & "This is line three " & vbCrLf
strMySQL = strMySQL & "This is line four "
Wayne Gillespie
Gosford NSW Australia
"Randy Harris" <ra***@SpamFree .com> wrote in message
news:8c******** **************@ newssvr28.news. prodigy.com... strMySql = "some sql text goes here " & _ "and more sql text goes here " & _ "and so on "
strMySql = strMySql & "you can continue to add " & _ "to the string in this manner also " & _ "when you get it all built the way " & _ "you want it, then simply use:"
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
I tried that, but it merely seems to do what it did before, put too many
characters into the string and then Access splits them when they get over
1023. I cannot put a line continuation character after each line since
there are more than 10 lines and the limit is 10. So I built the string as
before, but once I got around 900 chars or so, I used the continuation char
for the last several lines. When I stepped thru the code in debug mode, the
continuation lines form a contiguous block. But they concatenate to the
previous string and the result is a string variable holding about 1200 chars
and then being unrecognized by Access. Once again, I copy from Immediate to
SQL window and the code splits into two segments at 1023 chars.
This string building takes place in a function with the result of the
function being the sql stmt (if that matters).
"Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote in message news:fbzOb.9503 3$na.49992@attb i_s04... I posted that I was having trouble with a SQL statement that was working in the SQL window, but not in VBA. I have since discovered that when I create the string in VBA it is over 1023 characters long. When I copy this string into the SQL window, it splits into two lines, one of 1023 and the remainder in the next. When I remove that break, the query runs just fine.
Since Access tells me that a string can hold 10^16 (64k), it did not
seem to be a string capacity problem (plus the part of the string that went to
the next line was still there). I searched the archives and saw reference
to VBA limit of 1023 characters per line and that with underscores you
could create a logical line of something like 10 lines of 1023 each. I do not
need anywhere near that much, but it seemed like a solution. But I have no idea how to implement it; the syntax is unclear to me.
Currently, I set up a string and add to it (i.e. strMySql = "some Sql Statement" and then strMySql = strMySql +"some other new statement").
I can now decide to use to variables to catch the first part of the string and make sure it is less than 1023 and then the rest of the string I can assign to a second variable. But I have no idea what to do with that. The underscore character and a new line might be the answer, but how to implement? Currently, when I have the sql statement built into one variable, I then use the following:
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
When the sql statement is shorter, this works just fine and I get my recordset and go on from there. How could I use a "logical line" here?
Thanks Alan
"Wayne Gillespie" <be*****@NObest fitsoftwareSPAM .com.au> wrote in message
news:a3******** *************** *********@4ax.c om... Instead of using line continuations break your string into distinct lines
using vbCrLf and then concatenate the lines together. strMySQL = "This is line one " & vbCrLf strMySQL = strMySQL & "This is line two " & vbCrLf strMySQL = strMySQL & "This is line three " & vbCrLf strMySQL = strMySQL & "This is line four "
Thanks - that worked. Though now I have a 3219 runtime error which I've
discovered means I cannot use "OpenRecord set" with an action query, but that
is a new problem to solve; the too-long line problem is fixed. Thanks
again.
Alan
The problem seems to be the copying to the SQL view of Query design, Alan.
That is, you appear to be doing the right thing in code, but Access limits
what it handles properly in the SQL window. So perhaps you could simply not
view that SQL in the SQL window.
Is there some way that you could simplify your naming convention and
database structure so that the SQL string would not be so long? You may not
be able to get it under the number that causes this problem, but perhaps
still make it a bit easier to deal with.
As far as I know, the limit on a string variable is either 32,xxx or 65,xxx
characters. I'd use your orginally-described approach of separate statements
rather than continuation lines. I believe the VBA limit is per statement,
rather than per line.
Larry Linson
Microsoft Access MVP
"Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote in message
news:CiBOb.9403 5$I06.415161@at tbi_s01... "Randy Harris" <ra***@SpamFree .com> wrote in message news:8c******** **************@ newssvr28.news. prodigy.com... strMySql = "some sql text goes here " & _ "and more sql text goes here " & _ "and so on "
strMySql = strMySql & "you can continue to add " & _ "to the string in this manner also " & _ "when you get it all built the way " & _ "you want it, then simply use:"
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql) I tried that, but it merely seems to do what it did before, put too many characters into the string and then Access splits them when they get over 1023. I cannot put a line continuation character after each line since there are more than 10 lines and the limit is 10. So I built the string
as before, but once I got around 900 chars or so, I used the continuation
char for the last several lines. When I stepped thru the code in debug mode,
the continuation lines form a contiguous block. But they concatenate to the previous string and the result is a string variable holding about 1200
chars and then being unrecognized by Access. Once again, I copy from Immediate
to SQL window and the code splits into two segments at 1023 chars.
This string building takes place in a function with the result of the function being the sql stmt (if that matters).
"Colleyvill e Alan" <ae***********@ nospam.comcast. net> wrote in message news:fbzOb.9503 3$na.49992@attb i_s04... I posted that I was having trouble with a SQL statement that was
working in the SQL window, but not in VBA. I have since discovered that when I create the string in VBA it is over 1023 characters long. When I copy this string into the SQL window, it splits into two lines, one of 1023 and the remainder in the next. When I remove that break, the query runs just fine.
Since Access tells me that a string can hold 10^16 (64k), it did not seem to be a string capacity problem (plus the part of the string that went to the next line was still there). I searched the archives and saw reference to VBA limit of 1023 characters per line and that with underscores you could create a logical line of something like 10 lines of 1023 each. I do
not need anywhere near that much, but it seemed like a solution. But I have no idea how to implement it; the syntax is unclear to me.
Currently, I set up a string and add to it (i.e. strMySql = "some Sql Statement" and then strMySql = strMySql +"some other new
statement"). I can now decide to use to variables to catch the first part of the
string and make sure it is less than 1023 and then the rest of the string I can assign to a second variable. But I have no idea what to do with that. The underscore character and a new line might be the answer, but how to implement? Currently, when I have the sql statement built into one variable, I then use the following:
Set rstMyRecs = CurrentDb.OpenR ecordset(strMyS ql)
When the sql statement is shorter, this works just fine and I get my recordset and go on from there. How could I use a "logical line"
here? Thanks Alan
ae***********@n ospam.comcast.n et (Colleyville Alan) wrote in
<fhEOb.83086$nt 4.125731@attbi_ s51>: "Wayne Gillespie" <be*****@NObest fitsoftwareSPAM .com.au> wrote in message news:a3******** *************** *********@4ax.c om... >
Instead of using line continuations break your string into distinct lines
using vbCrLf and then concatenate the lines together. strMySQL = "This is line one " & vbCrLf strMySQL = strMySQL & "This is line two " & vbCrLf strMySQL = strMySQL & "This is line three " & vbCrLf strMySQL = strMySQL & "This is line four "
Thanks - that worked. Though now I have a 3219 runtime error which I've discovered means I cannot use "OpenRecord set" with an action query, but that is a new problem to solve; the too-long line problem is fixed.
Action queries can be executed, but you can't open a recordset.
Instead of:
set rst = db.OpenRecordse t(strMySQL)
use:
db.Execute strMySQL, dbFailOnError
You don't need a recordset at all.
--
David W. Fenton http://www.bway.net/~dfenton
dfenton at bway dot net http://www.bway.net/~dfassoc
"Larry Linson" <bo*****@localh ost.not> wrote in message
news:8U******** **********@nwrd dc02.gnilink.ne t... The problem seems to be the copying to the SQL view of Query design, Alan. That is, you appear to be doing the right thing in code, but Access limits what it handles properly in the SQL window. So perhaps you could simply
not view that SQL in the SQL window.
Is there some way that you could simplify your naming convention and database structure so that the SQL string would not be so long? You may
not be able to get it under the number that causes this problem, but perhaps still make it a bit easier to deal with.
As far as I know, the limit on a string variable is either 32,xxx or
65,xxx characters. I'd use your orginally-described approach of separate
statements rather than continuation lines. I believe the VBA limit is per statement, rather than per line.
Larry Linson Microsoft Access MVP
The solution that Wayne provided is working. It was an odd sort of thing,
because string variables are limited to 64k, but VBA lines are limited to
1023 char. Yet it appeared to me that there was difficulty in the way
Access treated the lines as assigned to a string. The original SQL view
(which I got from building these as QBE) certainly had no problem with the
length. VBA simply would not hold all that on one line. But with the
vbCrLf , it now copies into the SQL window as one group with each SQL
command on a separate line.
Now my code does not work for a different reason - OpenRecordset cannot be
used with action queries. But that's ok, I am fixing it now. A few more
hours of typing, and I'll be ready to rock-n-roll! (or at least move on to
the next phase). This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Joe Stevenson |
last post by:
Hi all,
I skimmed through the docs for Python, and I did not find anything like
a case or switch statement. I assume there is one and that I just
missed it. Can someone please point me to the appropriate document, or
post an example? I don't relish the idea especially long if-else
statements.
Joe
|
by: Dave Pylatuk |
last post by:
Hello, I am getting the above error when executing a large insert statement
against 8.1.7.
This insert statement includes a very large string value, about 8000
characters long. Is there a limit on the size of statements that Oracle
can execute ?
Is this a setting that can be changed ?
Thanks in advance.
|
by: Karaoke Prince |
last post by:
Hi There,
I have an update statement to update a field of a table (~15,000,000
records). It took me around 3 hours to finish 2 weeks ago. After that
no one touched the server and no configuration changed. Until
yesterday, I re-ran it again and it took me more than 18hrs and still
not yet finished!!!
What's wrong with it? I can ran it successfully before. I have tried
two times but the result was still the same.
|
by: jeff regoord |
last post by:
A user inputs a float value. The scanf() function gets the value.
However, I need to create an error handler with an if else statement
saying invalid input if the input is not a number. Does anybody know
how I could do this?
|
by: Charles Wilt |
last post by:
I have a IBM iSeries (aka AS-400) running v5r3 of OS/400 that I access
via a linked server from SQL Server 2000.
The following select works fine:
select * from prod400db.test.meldbf.InventoryHistory
However, this insert statement fails:
insert into prod400db.TEST.MELDBF.InventoryHistory
| |
by: sghi |
last post by:
Hi All,
I'm new to this group and quite new to access/vba.
So, shortly after beginning to write a simple application for my wife,
I came across a blocking problem: I need to intercept the sql statement
that stay behind a current, but not yet saved query.
When I work on saved queries I use:
strCurrentName = CurrentObjectName
Dim dbsCurrent As Database
Set dbsCurrent = CurrentDb
|
by: Yevgen Muntyan |
last post by:
Hey,
I was reading C99 Rationale, and it has the following two QUIET CHANGE
paragraphs:
6.5.3.4: "With the introduction of the long long and extended integer
types, the sizeof operator may yield a value that exceeds the range
of an unsigned long."
6.5.6: "With the introduction of the long long and extended integer
|
by: dspfun |
last post by:
Hi!
The words "expression" and "statement" are often used in C99 and C-
textbooks, however, I am not sure of the clear defintion of these
words with respect to C.
Can somebody provide a sharp defintion of "expression" and
"statement"? What is the difference between an expression and a
statement?
|
by: Eric Davidson |
last post by:
DB2 9.5
I keep geting the message.
SQL0101N The statement is too long or too complex. SQLSTATE=54001
When one of my sql statements takes over 60 seconds to compile the sql
statement.
Is there any parameter that controls how long DB2 allows a statement
to compile for.
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
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 tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
| |
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, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
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...
|
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();...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
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
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
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...
| |