I am new to programming using VBA code. I am involved in developing a database. I created most of the tables and queries. Now I am at the complicated part of implementing some calculations, so I decided to use VBA code. This is what I have.
I have two tables Tbl1 and Tbl2.
Tbl 1 has the following fields
Account Balance Set Date
Tbl2 has the following fields,
Account sumofbalance Set Bal Overstated Balance
IThe overstated balance is to be deducted from the balance field having the same account numbers starting with the most recent date to attain the new balance. This should be done for all the balances in the same account starting from the most recent date until the overstated balance gets exhausted.
Eg
If the overstated amount is 200, the 100 is deducted from the most recent balance to make it zero. The remaining 100 of the overstated balance is deducted from the next recent balance and so on till the overstated balance gets exhausted. - Account Balance Set Date New Bal(Overstated Balance - Balance)
-
12387654 100 28-Jul 0
-
12387654 600 27-Jul 500
-
12387654 300 26-Jul 300
-
12387654 100 25-Jul 100
I know that we can use the recordset command to move through records. Can I use the recordset method to update the new balance field in table 1 based on the logic. Can anyone help me on this?
25 3113 NeoPa 32,556
Expert Mod 16PB
This will work much better if you can post the meta-data (info about the layout / structure) of the table in the same way as I use in my example. Click on the Reply button and you will have access to all the codes I've used. PK & FK stand for Primary Key & Foreign Key respectively. Table Name=[tblStudent] - Field; Type; IndexInfo
-
StudentID; AutoNumber; PK
-
Family; String; FK
-
Name; String
-
University; String; FK
-
Mark; Numeric
-
LastAttendance; Date/Time
You use field names with spaces in so this is unclear at the moment.
I believe Recordset processing can do what you need. Whether what you're trying to do is a good idea is unclear without a better understanding of exactly what it is you are trying to do.
Thanks for your help, I appreciate that. Table Name=[tblColl] - Field; Type; IndexInfo
-
Account; Text; PK
-
Balance; Numeric;
-
[Set Date]; Date/Time
-
[New Balance]; Numeric
-
Valid; Boolean
Table Name=[TblCalc] - Field; Type; IndexInfo
-
Account; Text; PK
-
SumofBalance; Numeric
-
[Set Bal]; Numeric
-
[Overstated Balance]; Numeric
[ TblColl] -
[Account] [Balance] [Set Date] [New Balance] [Valid]
-
12387654 $100.00 28-Jul-08 Null False
-
12387654 $600.00 27-Jul-08 Null False
-
12387654 $300.00 26-Jul-08 Null False
-
12387654 $100.00 25-Jul-08 Null False
-
56789526 $2,300.00 28-Jul-08 Null False
This is the master table. I have to add two more fields([New Balance];type=Numeric and [valid];type=Yes/No) to this table based on validations using this table and the other table.
[ TblCalc] - [Account] [SumOfBalance] [Set Bal] [Overstated Bal]
-
12387654 1100 900 200
-
56789526 2300 2300 0
This is a table I created using a make table query.
Validation required:
For each account number in the tblcoll, where the account field is equal to the account of tblcalc. If the sumofbalance<=[set bal], then all the items are considered valid and the [new balance] field(which has to be created) of the table tblcoll is the same as the balance field, or ([new balance]=[balance]).
But if the [sumofbalance]>[set bal], then for each of the [account] fields of the Tblcoll where Tblcoll.[account] = Tblcalc.[account], the [overstated balance] of the tblcalc field is subtracted from the [balance] field of the tblcoll, starting from the most recent date. This is done till the calculation brings the balance to zero. And this is done only for the accounts with the same account number.
For instance In the example given above for the Tblcoll, the sum of balance for the same account number(12387654) comes to 1100(100,600,300,100) which is shown in the Tblcalc.[sumofbalance] field. The [overstated bal] field in the Tblcalc is obtained by subtracting the [set bal] from the [sumofbalance] field(1100-900=200). Since the [sumofbalance]>[set bal], the [overstated bal] is deducted from each of the [balance] from the Tblcoll table with the same [account] number as the Tblcalc table starting with the nost recent date( here 28-Jul-08). Till the [overstated bal] gets exhausted.
This is the validation that I am trying to do, - [Account] [Balance] [Set Date] [New Balance]
-
12387654 $100 28-Jul-08 0
-
12387654 $600 27-Jul-08 500
-
12387654 $300 26-Jul-08 300
-
12387654 $100 25-Jul-08 100
-
56789526 $2,300 28-Jul-08 0
In the first row for the most recent date(28-Jul-08) for the account 12387654 , the [New balance] field is found by deducting the [overstated bal] of Tblcalc table from the [Balance] field of the Tblcoll with the same account. So here the [Overstated bal] of 200 for the account 12387654, 100 is expended to bring the new balance to zero.
In the next row, for the next recent date for the same account, the remaining amount 100 left in the [Overstated bal] is deducted from the [balance] of 600 to bring it to 500. This leaves the [Overstated bal] completely expended and left with 0 value.
Hence for the next rows with the same account, the new balance is same as the balance.
This validation is actually done to bring the sum of the [new balance]=[set bal](900 here)
For the account, where the sumofbalance<=[set bal] like the other account 56789526, the [New balance] is same as the [balance] field.
For other field [Valid] to be added in the table Tblcoll, the validation is done as follows,
? Any calculation the brings the [new balance] field value to zero has to be marked invalid and the others are valid.
I hope this makes it clearer than before.
NeoPa 32,556
Expert Mod 16PB
I will see if I can find some time to look at this later. I've taken up so much time reformatting your post such that it's clearer to read (very hard to even start on otherwise) that I've run short.
I was rather hoping you'd do this bit, but I appreciate that at least you've shown some effort to try to explain the situation in great detail anyway. If it's not simple, that's down to the problem rather than the explanation.
I apologize for the messup with my first post. Thank you for taking your precious time to look into this.
Hi. While NeoPa is considering your post can I ask why you are not using Excel for this particular application? The fact that your tables comprise little more than various forms of balance totals is a give-away that a database is not the best solution. Excel is an excellent tool for performing the kind of calculation you need to do - it is after all primarily a financial tool built for just such calculations - whereas relational databases are best at handling thousands of rows of complex interrelated data from multiple tables that implement relationships between different business objects.
It is the norm in databases to compute balances from source transaction data, not to store these balances as part of an overarching table. It suggests to me that the way you have designed your tables is more akin to what you would see in an Excel sheet than to the use of table normalisation methods for database design.
You would be able to implement the calculation rules you describe in Excel in under an hour's work; I'm not convinced that you can say the same for trying this in Access, nor that you will benefit from using Access at all, unless the underlying data is way more complex than the tables as you have listed them in post # 3.
-Stewart
Hi Stewart,
Thanks for your help. This cannot be implemented using the excel because there are over thousands of rows of complex data. The master table I mentioned in my post#3 is infact made by running a make table query I made by combining two tables using union. Actually the data is imported from text files which in turn are obtained by screen scrapping from Mainframe. I dont think we can implement this functions using excel because of the large amount of data present in this table.
-Arthur
Hi. Understood, but in case it helps Excel can deal with 65000+ rows in any one worksheet (2^16 or thereby), and up to 255 columns. You can have as many worksheets per workbook as available memory allows as well.
-Stewart
NeoPa 32,556
Expert Mod 16PB
Thanks for trying anyway Stewart.
Arthur. I'm not ignoring this but something has come up tonight, so I will have to defer work on this for a while. It's circa 23:00 for me at the moment, so I may not get back to this at all tonight. Depending on the outcome of the "issues".
I know stewart, but when I say Thousands, I mean over 100,000 rows.
No problem sir, you can take your time.
NeoPa 32,556
Expert Mod 16PB
Right, I've had a chance to look through this again and although you've clearly gone to a lot of trouble to explain this as well as you can, there are still a number of possibilities spinning around in my head as to what you may mean.
This is mainly due to what starts where? And what is expected to finish up where? The basic fundamental arithmetic is clear enough.
You show some data in your first post which I'm guessing is some sort of result set, but it doesn't match any of the record layouts you show. [tblCol1] in post #3 seems to be start data, but I've little idea where abouts the data for [tblCalc] in post #3 comes in the process. Then (in post #3) more data is shown, but no indication is given as to which table it is, or even if it's a table rather than results shown in a query.
In short, the details are fairly clear, but without the reference points they're hard to make proper sense of (I did try for quite a long while as I was conscious I had kept you waiting a while).
I'm sure when this is clarified we can make some better progress, which WILL include recordset processing as this is not something that can be done simply in SQL.
NeoPa 32,556
Expert Mod 16PB
What we need is startpoint data and endpoint data, clearly indicating what comes from where and what ends up where.
If there are any fields anywhere that are included in this, which are not already explained, they must also be explained of course.
I'm confident that, with this, we can progress smoothly.
What we need is startpoint data and endpoint data, clearly indicating what comes from where and what ends up where.
If there are any fields anywhere that are included in this, which are not already explained, they must also be explained of course.
I'm confident that, with this, we can progress smoothly.
Hi Sir,
To start with I have to import three textfiles, which are got from screen scraping from the mainframe sessions. I imported these three files to three tables COL1, FIRM1 and LGL1. I had to bring the COL1 and LGL1 files together, So I used a union query to bring theses two tables together(COL1 and LGL1 tables have the same fields). Then I made a table from the union of these using a make table Query into a table TblCOLL. So Now the rest of the validations are based on the two tables TblCOLL and FIRM1. Table Name = [COL1] - [SET DATE] [BALANCE] [ACCOUNT]
-
7/28/2008 100 12387654
-
7/27/2006 600 12387654
-
7/28/2007 2,300.00 56789526
Table Name = [LGL1] - [SET DATE] [BALANCE] [ACCOUNT]
-
7/26/2008 300 12387654
-
7/25/2008 100 12387654
Table Name = [TblColl] - [SET DATE] [BALANCE] [ACCOUNT]
-
7/28/2008 100 12387654
-
7/27/2006 600 12387654
-
7/26/2008 300 12387654
-
7/25/2008 100 12387654
-
7/28/2007 2,300.00 56789526
Table Name = [FIRM1] - [ACCOUNT] [BALANCE] [SET BAL CREDIT] [SET DATE]
-
34567856 3259.98 CREDIT 8/5/2008
-
26737867 4080.50 8/1/2008
-
68936789 106.75 8/1/2008
-
76748987 813.75 7/30/2008
I made the Tblcalc from the Tblcoll and FIRM1, using some queries. I used the account field to join both the tables.
Explanation of Fields in Table Tblcalc:
Some of the fields in the Tblcalc table are based on calculations.
=>I got the [sumof balance] field by finding the sum of the [balance] field of the TblCOLL.
=>Then I got the [Set bal] from the FIRM1 table by doing the following validation.
If the set bal credit is credit, then the [SET BAL] for that account is positive.
If the [set bal credit] field is blank then the [SET BAL] is negative.
=>Finally the [overstated bal] field is obtained by the following condition. If the [SET BAL]<0, then subtracting the [SET BAL] from the [Sumof balance] field.
Now going to the actual validation part,
I have to add two new fields to the table TblCOLL, they are [New Balance] and [Valid],
The following are the validations required for the [New Balance] field to be created.
For that I am going to use the Tblcalc Table,
If the [SET BAL] >=0, then [new balance]=balance
If the [SET BAL]<0, then the compare the sum of balance to the absolute value of the set balance.
Then the validations are done as I had mentioned in the Post #3.
Please let me know if you have any questions regarding this.
Thanks,
Arthur
NeoPa 32,556
Expert Mod 16PB
This all goes along nicely until you get to describing the [Set Bal] field found in [tblCalc]. This is dependent on the FIRM1.[Set Bal Credit] field, but this only tells us what the sign is. There's no indication as to what the value should be.
When I check the data, it seems there are NO matching records between [tblColl] & [FIRM1]. This appears to leave us with nothing in [tblCalc].
In post #3 you have figures in [tblCalc], but I can't see any rationale behind them.
I will see if I can make any sense of the rest of it (ignoring how the figures got to be there), but it's hard to say what I may come up against at this point.
NeoPa 32,556
Expert Mod 16PB
My first problem discovered is that the [Overstated Bal] (from post #3) does NOT follow the logic you describe. The entry for account "12387654" has a positive value of 900 in [Set Bal]. According to your logic this is NOT negative so should not be subtracted from [SumOfBalance] to give the [Overstated Bal] figure.
The information is now too far unreliable to proceed at this stage.
...
I have to add two new fields to the table TblCOLL, they are [New Balance] and [Valid],
...
Fields should only be added to tables after the fact when there is some sort of oversight. If these fields are required in [tblColl], then they should be included in the layout of [tblColl]. I will go back and update your post #3 to reflect this, but you should consider including these fields in your table when you create the table.
I will await your clarifications of the points I've raised.
This all goes along nicely until you get to describing the [Set Bal] field found in [tblCalc]. This is dependent on the FIRM1.[Set Bal Credit] field, but this only tells us what the sign is. There's no indication as to what the value should be.
When I check the data, it seems there are NO matching records between [tblColl] & [FIRM1]. This appears to leave us with nothing in [tblCalc].
In post #3 you have figures in [tblCalc], but I can't see any rationale behind them.
I will see if I can make any sense of the rest of it (ignoring how the figures got to be there), but it's hard to say what I may come up against at this point.
Sorry, I did a typing mistake with one of the the fields in the FIRM1, I apologize for the inconvenience. You are right, the [balance] field should be [SET BAL] , I made a mistake there. The following table should make it clear.
Again for the FIRM1, in my previous post I just gave you some raw data that goes into the fields. Now I have changed the data in FIRM1 to make more sense. Table Name = [TblColl] - [SET DATE] [BALANCE] [ACCOUNT]
-
7/28/2008 100 12387654
-
7/27/2006 600 12387654
-
7/26/2008 300 12387654
-
7/25/2008 100 12387654
-
7/28/2007 2,300.00 56789526
Table Name = [FIRM1] -
[ACCOUNT] [SET BAL] [SET BAL CREDIT] [SET DATE]
-
12387654 900.00 blank 8/5/2008
-
56789526 2300.50 blank 8/1/2008
I made the Tblcalc from the Tblcoll and FIRM1, using some queries. I used the account field to join both the tables.
This following are the queries that I used to make the Tblcalc table,
1)qry_Tblcoll_sumofbalance: - SELECT TblColl.ACCOUNT,
-
Sum(TblColl.BALANCE) AS SumOfBALANCE
-
-
FROM Tblcoll
-
-
GROUP BY Tblcoll.ACCOUNT
2)qry_tblcalc: - SELECT qry_Tblcoll_sumofbalance.ACCOUNT,
-
qry_Tblcoll_sumofbalance.SumOfBALANCE,
-
IIf([SET BAL CREDIT] Like "*CREDIT*",[SET BAL],-[SET BAL]) AS [SIGNED SET BAL],
-
IIf(([SIGNED SET BAL]<0),([SumOfBALANCE]-Abs([SIGNED SET BAL]))) AS [OVERSTATED BAL]
-
-
FROM qry_Tblcoll_sumofbalance INNER JOIN FIRM1
-
ON qry_Tblcoll_sumofbalance.ACCOUNT = FIRM1.ACCOUNT
-
-
WHERE (((qry_Tblcoll_lgl_sumofbalance.ACCOUNT) Is Not Null))
-
-
ORDER BY qry_Tblcoll_sumofbalance.ACCOUNT
The [signed set bal] field I mentioned here is actually the [set bal] field that I mentioned in the Tblcalc in post#3. I just used it in this query for the validation. I used it a [set bal] instead of [signed set bal] to not confuse you. The [signed set bal] is the field where I do the following validation.
If the set bal credit is credit, then the [SET BAL] for that account is positive.
If the [set bal credit] field is blank then the [SET BAL] is negative.
[ TblCalc] - [Account] [SumOfBalance] [Set Bal] [Overstated Bal]
-
12387654 1100 900 200
-
56789526 2300 2300 0
The Tblcoll and the Tblcalc are the ones that are needed for the validation. I just described all the queries that went on to make the Tblcalc to make it clear. Hope this makes it clearer.
Thanks for your help.
-Arthur
The following is the function I created to do the validation part. I get an error when trying to loop through the records. I used the following to loop through the records. How do I find the count of records in the Tblcoll and loop through it? can i use the rscoll.recordcount? But I need to use the following criteria,
I have to find the record count for the Tblcoll, where the accounts of both the Tblcoll and the Tblcalc are the same.
For i = 0 To DCount(Tblcoll![account], "Tblcoll", [Tblcoll!account = Tblcalc!account])
I know that this is not the best way for doing the validation. I would be thankful to you if you could tell me if the code for doing the validation is ok with the logic or do I need to do any change. Could you please suggest me if I should work on a better programming approach? NeoPa 32,556
Expert Mod 16PB
At some point I will try to catch up with this, but I wonder if you have any understanding whatsoever of how difficult it is to respond to your posts when you don't respond to mine.
Every time I make a point, instead of responding directly, you try to explain everything again from a different angle. That means I have to reread everything and try to make it make sense against everything else you've written.
You can probably see where this is going.
You've not got a good track record for getting down your information correctly. Trying to make it all make sense is extremely difficult, and you don't help as you NEVER respond simply and directly to my posts.
Don't get me wrong, I can see you are putting a lot of effort into this as time goes on, but as your effort is directed away from the simple and into the more complicated, the whole thread is almost impossible to makes sense of.
Each post you make seems to throw up more problems than it answers questions. How come [tblColl] is back to the simple three fields again? Swimming in quicksand would be simpler.
I know it's hard because I'm not there standing next to you telling you what is helpful and what is simply causing a lot more complication, but if this carries on like this it will simply be impossible for me to make any consistent sense of what's here.
I will have another go at this tomorrow, but I can't promise I can bring all the various strands together into a problem that makes sense to me. We'll have to see how it goes.
Sorry for my late response and the confusion.I was caught up with some work so I could not reply you at once. I apologize for any inconvenience that I put you through. I know you have been putting a lot of effort on this and I really appreciate you for spending your precious time trying to help me.
Sorry I missed out the two fields from the table Tblcoll. As I had mentioned earlier in post#3 I had to do some validations and add the values to the two fields , that is [New Balance] and [Valid]. All the validations I mentioned in my posts and the code are to add values to the two fields in the Tblcoll table.
Again I am very thankful for all the help that you have offered.
Thanks,
Arthur
Hi NeoPa,
I know that you are a very busy person, Could you please spare a few minutes to look at the code that I created for doing the validations that we discussed before. Right now the code takes more time to execute. Could you please advise me if I need to change anything to make it work faster?
I have made some changes to the code from the previous post. the newly changed code is as follows, NeoPa 32,556
Expert Mod 16PB
Arthur,
It's not that I have no time at all. It's simply that you make the job so complicated that I need to set aside a large portion of time just to look at this.
Most questions, as they should be, are simple questions asking about a simple problem (I'm not saying easy, but the question is clear). That is really what the site is about. Most of the effort is finding and explaining the (an) answer. It shouldn't be about spending hours just to work out the question.
Your job is to explain your problem in as general terms as possible. Not to get into too much detail of all your various confusions. The deeper you get into that, the more information I require, just to know what you're asking. Hence I find my hands tied before I even start.
Not only does this leave you with less help than you could get, it also leaves me with far less time available to help others. Not an ideal state of affairs.
I will have another go tonight (I have made some time available), but I already know that I don't have the details I need to understand the question properly. I will have to have a look through your approx 160 lines of code to see if I can dig up some clues from there.
I suspect, unfortunately (as I have from early on), that a SQL solution would have been much more efficient and possibly even more straightforward. For this I needed the clear details that have not been forthcoming (certainly not in clear enough form).
NeoPa 32,556
Expert Mod 16PB
Having looked at your code one performance thing springs immediately to mind (no make that two). - You open both tables as Dynasets with no sorting specified. I expect this code, as it stands, would execute more efficiently if both were opened sorted by [Account] (PK). Your code need then only process through the sub-recordset until the records no longer match. Of course .FindFirst should be used to go straight to the first matching record too.
- I would actually consider designing an updatable query (if possible) where both tables are INNER JOINed and using that as a Dynaset recordset in your code (sorted by [Account] still of course). This would involve recoding fairly fundamentally, but assuming you are able to get an updatable dynaset this could more quickly provide your results I expect.
An extra benefit of point #2 is, even though the recoding would be extra work, the resultant code should be shorter and cleaner (easier to maintain).
Having looked at your code one performance thing springs immediately to mind (no make that two).- You open both tables as Dynasets with no sorting specified. I expect this code, as it stands, would execute more efficiently if both were opened sorted by [Account] (PK). Your code need then only process through the sub-recordset until the records no longer match. Of course .FindFirst should be used to go straight to the first matching record too.
- I would actually consider designing an updatable query (if possible) where both tables are INNER JOINed and using that as a Dynaset recordset in your code (sorted by [Account] still of course). This would involve recoding fairly fundamentally, but assuming you are able to get an updatable dynaset this could more quickly provide your results I expect.
An extra benefit of point #2 is, even though the recoding would be extra work, the resultant code should be shorter and cleaner (easier to maintain).
Hi Neopa,
Thanks for all your help, as per your advise I sorted both the tables by account, used indexes for the table, and used the find first method to search for the accounts which are same. These changes helped me bring down the time to two minutes. I am running this in my local machine, so when I try running this in the network this should take more longer I guess. Is there anything else I can do to bring down the time to seconds. I am attaching the code below.
Thanks,
Arthur NeoPa 32,556
Expert Mod 16PB
I would simply suggest looking at point #2 from my earlier post (#23).
Take a backup before you proceed further though. It would appear that you have made some fair progress here. It would be a shame to lose that for any reason.
Good luck with your project :)
Thank you Sir!, I will try doing that.
Sign in to post your reply or Sign up for a free account.
Similar topics
by: Mickey Mouse |
last post by:
My MySql experience is limited to simple updates and selects. I am
creating a genealogical site based on Old Church birth and christening
records. Currently I have over 70,000 entries in the...
|
by: Mike |
last post by:
Here is my situation;
I have two tables in a MS-SQL DB. One table with dollar amounts and service
codes. I have a second table that I want to move some information into from
the first table. The...
|
by: Ferasse |
last post by:
Hi,
I'm an occasional Ms-Access developer, so there is still a lot of stuff that I don't get...
Right now, I'm working on a database that stores contractual information.
One of the form that...
|
by: sstidham |
last post by:
I don't even think this is possible, but I wanted to make sure before I told my boss we need another solution.
Essentially he wants to do a Query by Form.
He would like to be able to type the...
|
by: plaguna |
last post by:
I'm trying to Count data in a Query Combining two different fields based on the "Date" the product was sold, and for some reason I get a wrong data. When I use only this expression, It works fine:...
|
by: irfan.ahmed |
last post by:
Dear All,
Kindly let me know how to update datagrid2 based on value of
datagrid1, I have one datagrida filled with current sale and its
updating continuously, I need to show in datagrid2...
|
by: perdijc |
last post by:
The wizard to create dataset, automatically creates a method to update table if the dataset is based on table.
If i create a dataset based on sotored procedure where this is based on more one...
|
by: rywags11 |
last post by:
Hello,
Can anyone help me figure out how to show/hide fields based on information entered in other fields in a form in Access 2007? What I'm looking to do is: When a selection from a drop down is...
|
by: Miranda Truehill |
last post by:
I'm very new to programming and although I've seen a similar post that addressed this in part, I am unsure how exactly to go about this. I know I can utilize the DateAdd function but don't know...
|
by: DolphinDB |
last post by:
Tired of spending countless mintues downsampling your data? Look no further!
In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: Vimpel783 |
last post by:
Hello!
Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
|
by: jfyes |
last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
|
by: CloudSolutions |
last post by:
Introduction:
For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
|
by: Shællîpôpï 09 |
last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
|
by: Faith0G |
last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
| |