Answered by:
Visual basic Script to update an SQL Table

Question
-
'Hello. I am trying to write a Visual Basic Script that will update a table. Basically a program I use to activate a user account is in SQL. I am trying to save myself some time to automate this process as I do this hundreds times a day and the program normally used is really slow. I have confirmed changing the SQL table does indeed activate the account as needed. 'Here is what I have so far. (Please excuse unused variables as I have been playing around)
Dim CN 'Computer Name Dim Active Dim Connection Dim ConnString Dim Recordset Dim SQL Dim tableName, connectionString, recNo, arrayColumns, arrayValues Set wshShell = CreateObject( "WScript.Shell" ) strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" ) CN = strComputerName & "\SQLEXPRESS" strComputers = CN 'The computer name changes for each server I do this on arrComputers = SPLIT(strComputers, ",") MsgBox "Test " & CN Active = InputBox("Do you want to Activate Tech Account? Y for Yes, N to Deactivate TechAccount") 'This is for tech to log in to the server if Active = "Y" or Active = "y" then set WshShell = CREATEOBJECT("WScript.Shell") WshShell.Run("net user TechAccount /active:yes") MsgBox "Activated Tech Account" 'The SQL is for the Tech account in the software 'ConnString="DRIVER={SQL Server};SERVER=" & CN & ";UID=;" & "PWD=;DATABASE=Directory" ConnString = "Driver={SQL Server Native Client 11.0};Server=" & CN & "; Database=Directory;"'Trusted_Connection=yes;" arrayColumns = Array("Name", "Info1") SQL = "SELECT * users" 'This is where I am stuck. I am not sure how to connect to SQL Server. The SQL Servers are Express versions So I know below is wrong. Set connection = Sys.OleObject("ADODB.Connection") connection.ConnString = connString Call connection.Open Set Recordset = Server.CreateObject("ADODB.Recordset") Connection.Open ConnString Recordset.Open SQL,Connection If Recordset.EOF Then Response.Write("No records returned.") Else Do While NOT Recordset.Eof Response.write Recordset("TechAccount") Response.write "<br>" Recordset.MoveNext Loop End If Recordset.Close Set Recordset=nothing Connection.Close Set Connection=nothing End IF 'This part is for deactivating tech accounts if Active = "N" or Active = "n" then set WshShell = CREATEOBJECT("WScript.Shell") WshShell.Run("net user TechAccount /active:no") mgBox "Dectivated TechAccount" End IF
Looking for any help I can get. Thank you in advance
- Edited by Broggy69 Tuesday, February 12, 2019 7:31 AM bad Formatting
- Moved by Bill_Stewart Friday, March 15, 2019 8:04 PM This is not "fix/debug/rewrite my script for me" forum
Tuesday, February 12, 2019 7:28 AM
Answers
-
You should not be using VBScript for this. All of this can be done in one line in PowerShell.
$sql = 'update users Set Enabled = 1 Where username = 'myusertoupdate' Invoke-SQlCmd -Instance .\SQLExpress -Query $sql
Since you do not know VBScript or SQL I recommend learning and using PowerShell. VBScript is obsolete.
If you are trying to do this in a web page then it will not work and you will need to post in the http://forums.asp.net site for help with ASP.
\_(ツ)_/
Tuesday, February 12, 2019 10:47 AM
All replies
-
Why are you putting your question in a code box. It is not code and it is not readable when it is in one. No line wrap.
\_(ツ)_/
Tuesday, February 12, 2019 10:45 AM -
You should not be using VBScript for this. All of this can be done in one line in PowerShell.
$sql = 'update users Set Enabled = 1 Where username = 'myusertoupdate' Invoke-SQlCmd -Instance .\SQLExpress -Query $sql
Since you do not know VBScript or SQL I recommend learning and using PowerShell. VBScript is obsolete.
If you are trying to do this in a web page then it will not work and you will need to post in the http://forums.asp.net site for help with ASP.
\_(ツ)_/
Tuesday, February 12, 2019 10:47 AM -
Why are you putting your question in a code box. It is not code and it is not readable when it is in one. No line wrap.
\_(ツ)_/
Because when I enter regular text extra coding appears.Wednesday, February 13, 2019 6:28 AM -
You should not be using VBScript for this. All of this can be done in one line in PowerShell.
$sql = 'update users Set Enabled = 1 Where username = 'myusertoupdate' Invoke-SQlCmd -Instance .\SQLExpress -Query $sql
Since you do not know VBScript or SQL I recommend learning and using PowerShell. VBScript is obsolete.
If you are trying to do this in a web page then it will not work and you will need to post in the http://forums.asp.net site for help with ASP.
\_(ツ)_/
PowerShell is blocked. So I can run regular command line or visual basic script. So that is why I was trying this with Visual basic script
Wednesday, February 13, 2019 6:30 AM -
Why are you putting your question in a code box. It is not code and it is not readable when it is in one. No line wrap.
\_(ツ)_/
Because when I enter regular text extra coding appears.Turn off Grammarly for this site or it will screw up everything. Contact Grammarly and upgrade or patch your copy.
\_(ツ)_/
Wednesday, February 13, 2019 6:40 AM -
You should not be using VBScript for this. All of this can be done in one line in PowerShell.
$sql = 'update users Set Enabled = 1 Where username = 'myusertoupdate' Invoke-SQlCmd -Instance .\SQLExpress -Query $sql
Since you do not know VBScript or SQL I recommend learning and using PowerShell. VBScript is obsolete.
If you are trying to do this in a web page then it will not work and you will need to post in the http://forums.asp.net site for help with ASP.
\_(ツ)_/
PowerShell is blocked. So I can run regular command line or visual basic script. So that is why I was trying this with Visual basic script
How is PowerShell blocked? Current systems require PowerShell.
\_(ツ)_/
Wednesday, February 13, 2019 6:41 AM -
You should not be using VBScript for this. All of this can be done in one line in PowerShell.
$sql = 'update users Set Enabled = 1 Where username = 'myusertoupdate' Invoke-SQlCmd -Instance .\SQLExpress -Query $sql
Since you do not know VBScript or SQL I recommend learning and using PowerShell. VBScript is obsolete.
If you are trying to do this in a web page then it will not work and you will need to post in the http://forums.asp.net site for help with ASP.
\_(ツ)_/
PowerShell is blocked. So I can run regular command line or visual basic script. So that is why I was trying this with Visual basic script
How is PowerShell blocked? Current systems require PowerShell.
\_(ツ)_/
We cannot run powershell. When anyone tries we get. "Powershell has been blocked by your IT admin." Then bit 9 blocks it as well
- Edited by Broggy69 Thursday, February 14, 2019 2:58 AM extra code
Thursday, February 14, 2019 2:56 AM -
Ok. It s really odd to block PowerShell and not VBScript.
Have you taken the time to learn VBScript? It seems that the code you are using is not intended to be used for the purpose you are trying to use it for. It is also quite incorrectly written for any purpose. It is code that was copied from coed for an ASP web page. It cannot update anything and will not run as a local script. It can only be run on an IIS server.
You also need to realize that only a dbo can update the logins for a user in SQLServer. To update logins requires the use of a stored procedure to enable a user login.
I would suggest that you post questions about SQLServer and logins/accounts in the SQLServer forum. They can show you how to manage this using TSQL.
\_(ツ)_/
Thursday, February 14, 2019 5:09 AM -
Ok. It s really odd to block PowerShell and not VBScript.
Have you taken the time to learn VBScript? It seems that the code you are using is not intended to be used for the purpose you are trying to use it for. It is also quite incorrectly written for any purpose. It is code that was copied from coed for an ASP web page. It cannot update anything and will not run as a local script. It can only be run on an IIS server.
You also need to realize that only a dbo can update the logins for a user in SQLServer. To update logins requires the use of a stored procedure to enable a user login.
I would suggest that you post questions about SQLServer and logins/accounts in the SQLServer forum. They can show you how to manage this using TSQL.
\_(ツ)_/
I am trying to learn it. I am better with Visual Basic .Net and have that working, but we are not allowed to add .exe files to the servers. So VB Script is the only option.
Code is poorly written because going from .Net to VBS is very different.
So the SQL is SQL Express it is used to control one of our software. The account I am updating is not an SQL account, but rather the software reads the SQL data. There is only 1-5 records and the "Users" is an an actual table in the SQL Database. In that table there is a field named info1. That is what I need to update.
I have been working with the Admin teams to allow us to use powershell but they do not want that.
Hopefulley that makes more sense.
Thursday, February 14, 2019 6:42 AM -
To update a table you will need to use an "update" sql statement. If you search you will find many examples of using vbscript to update a table. You can also search for VB6 examples as they are partly useful.
I would suggest that just using TSQL at an OSQL prompt would be the easiest for you.
osql -?
This would eliminate the need to learn VB or VBScript.
\_(ツ)_/
Thursday, February 14, 2019 6:48 AM -
Here is an example of how to do a table update with VBScript:
Public Function Update() Dim adoCMD Dim adoConn Dim strSQL 'Define a query to Update a new record into the FE temp table strSQL = "UPDATE [" & Me.FETempTableName & "]" & vbCrLf & _ "SET [partnumber] = ?," & vbCrLf & _ "[title] = ?," & vbCrLf & _ "[qtyper] = ?," & vbCrLf & _ "[oldqtyper] = ?," & vbCrLf & _ "[addpartrecordflg] = ?," & vbCrLf & _ "[doneflg] = ?" & vbCrLf & _ "WHERE [aid] = ?;" Set adoConn = CreateObject(ADODB.Connection) strCnxn="Provider='sqloledb';Data Source=SERVER_NAME;Integrated Security=SSPI;Initial Catalog=Northwind;" adoConn.Open strCnxn Set adoCMD = CreateObject(ADODB.Command) With adoCMD .ActiveConnection = adoCnn .CommandType = adCmdText .CommandText = strSQL .Parameters.Append .CreateParameter("p1", adVarChar, adParamInput, 25, Me.partnumber) .Parameters.Append .CreateParameter("p2", adVarChar, adParamInput, 50, Me.title) .Parameters.Append .CreateParameter("p3", adSmallInt, adParamInput, 2, Me.qtyper) .Parameters.Append .CreateParameter("p4", adSmallInt, adParamInput, 2, Me.oldqtyper) .Parameters.Append .CreateParameter("p5", adBoolean, adParamInput, 2, Me.addpartrecordflg) .Parameters.Append .CreateParameter("p6", adBoolean, adParamInput, 2, Me.doneflg) .Parameters.Append .CreateParameter("p7", adInteger, adParamInput, 4, Me.aid) Set adoRS = .Execute(lRecordsAffected) End With If lRecordsAffected = 0 Then Update = False Else 'Return a good return code Update = True End If End Function
\_(ツ)_/
Thursday, February 14, 2019 7:05 AM -
Ok, So I have my code connecting to the SQL server.
But my query isn't working. I am not getting a file.
Here is the code.
Dim CN 'Computer Name Dim SQL dim dbconn dim ConnectionString Set wshShell = CreateObject( "WScript.Shell" ) strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" ) CN = strComputerName & "\SQLEXPRESS" strComputers = CN MsgBox "Test " & CN Active = InputBox("Do you want to Activate Snowbird? Y for Yes, N to Deactivate Snowbird") if Active = "Y" or Active = "y" then set WshShell = CREATEOBJECT("WScript.Shell") WshShell.Run("net user snowbird /active:yes") MsgBox "Activated Snowbird" ConnectionString = "Provider=SQLOLEDB;Server=" & CN & "; DataBase=Directory; Trusted_Connection=yes;" Set dbconn = CreateObject("ADODB.Connection") dbconn.Open ConnectionString SQL = "SELECT Info INTO [Text;HDR=No;DATABASE=D:\Rent\TycOAdmin_Y.txt] FROM [User]" dbconn.Execute(SQL)
'I am trying to export the field "Info" to a Text file. It is in a table called "User"
MsgBox "Connection Worked?" End IF if Active = "N" or Active = "n" then set WshShell = CREATEOBJECT("WScript.Shell") WshShell.Run("net user snowbird /active:no") mgBox "Dectivated Snowbird" End IF
Thursday, February 14, 2019 8:25 AM -
Why are you asking how to update a SQL table then posting the code that tries to set a Windows user account? That makes no sense.
I cannot tell what you are trying to doo and your question and explanation are not helpful. ALso your SQL has nothing to do with querying a database. It is an internal only expression used to create file output.
You need to learn how to use SQL and you have to explain what you are doing better than you are. You seem to be just copying things and guessing at how to use them.
\_(ツ)_/
- Edited by jrv Thursday, February 14, 2019 8:32 AM
Thursday, February 14, 2019 8:29 AM -
Why are you asking how to update a SQL table then posting the code that tries to set a Windows user account? That makes no sense.
I cannot tell what you are trying to doo and your question and explanation are not helpful. ALso your SQL has nothing to do with querying a database. It is an internal only expression used to create file output.
You need to learn how to use SQL and you have to explain what you are doing better than you are. You seem to be just copying things and guessing at how to use them.
\_(ツ)_/
Sorry. So this reason is the field I am trying to update is an XML file. So I cannot simply update the entire thing.
So my plan was to export the file, change it, then re-import it. I work late hours. I am using one of my .Net programs as a road map. But learning very quickly VBS and .Net are different.
Thursday, February 14, 2019 6:08 PM