UtterAccess.com
X   Site Message
(Message will auto close in 2 seconds)

Welcome to UtterAccess! Please ( Login   or   Register )

Custom Search
 
   Reply to this topicStart new topic
> Vba Function To Store/call Odbc String, Any Versions    
 
   
Zaddicus
post May 29 2019, 06:19 AM
Post#1



Posts: 137
Joined: 3-April 19
From: Cardiff


Hello All,

I apologise first hand for this question and my complete inexperience in this area. I have created a database in access and the back-end tables are hosted online. Now when I linked all the tables access has stored the details through the linked table manager.

Since splitting the back-end and hosting it I've had so many issues when it comes to writing/saving data/records - an example is the errorlog (among others) form will NOT allow me to save changes as there is a 'write conflict' even though I am the only one who made changes. (Go figure)
Attached File  snip049.PNG ( 7.99K )Number of downloads: 0


Anyway - Horrid data saving/amending issues aside for the moment that's not the reason I'm here (Although some pointers would not be turned down)
The main issue is there are a few subs within the forms that are required to write data to any of the tables on the back-end server after an event or button click etc... (Simple so far)

Problem is I've used 'ODBC Driver 17 for SQL Server' as DSN and google isn't much help when it comes to writing a function in VBA that I can use to call the connection details - so far I have the following which I guess may help with pass-through queries, but I'm still getting a couple of errors

Error 3146 (Before calling on the function below) on the line 'CurrentDb.Execute strSQL, dbFailOnError' which makes sense because VB won't have the login details for ServerConnect
Error 3359 (After calling on the function below) highly likely due to my poor VBA on line 'myQD.SQL = strSQL' in the SeverConnect function

Example of VB code that call's the function:
CODE
Private Sub Open_Onboarding_Click()
On Error GoTo Errorhandler

Dim myR As Boolean
Dim strSQL As String
Dim myV1 As Integer
Dim myV2 As Long
Dim myV3 As Integer

'Define the variables to be input
myV1 = Me.AttendeeID
myV2 = Me.ContactID
myV3 = Me.EventID

'Is there a Matching Onboard Record for the current Attendee Record?
myR = DCount("*", "tbl_SpeakerOnboarding", "[AttendeeID] = " & Me.AttendeeID) > 0

If myR = True Then
  DoCmd.OpenForm "usf_OnboardSpeaker", acNormal, , "AttendeeID = " & Me.AttendeeID, acFormEdit, acWindowNormal      'Edit Mode
  DoCmd.Close acForm, "usf_Events", acSaveYes
Else        'No Matching Record, so Add one
  If Me.Dirty = True Then Me.Dirty = False      'Save pending Edits
  
  strSQL = "INSERT INTO tbl_SpeakerOnboarding (AttendeeID,ContactID,EventID) VALUES (" & myV1 & ", " & myV2 & ", " & myV3 & ")"
  
  Call ServerConnect

  CurrentDb.Execute strSQL, dbFailOnError
      
  DoCmd.OpenForm "usf_OnboardSpeaker", acNormal, , "AttendeeID = " & Me.AttendeeID, acFormEdit, acWindowNormal
  DoCmd.Close acForm, "usf_Events", acSaveYes
  
End If

Exit_Open_Onboarding:
Exit Sub

Errorhandler:
        MsgBox prompt:="E-Link encountered an error when processing the last action. E-Link has cancelled the last action and the error has been logged with the system administrator", buttons:=vbInformation, Title:="Database Process Error"
        Call logAutoErrors(Err.Number, Err.Description, "Open_Onboarding(sub_EventAttendeeP)")
        Resume Exit_Open_Onboarding

End Sub

It's worth noting I think that the ErrorHandler (Call logAutoErrors) does write/save to a table without defining a connection first (a miracle I am not going to question)

Function to save ODBC connection information:
CODE
Public Function ServerConnect()

Dim myQD As DAO.QueryDef
Dim myRS As DAO.Recordset

Dim strConnect As String
Dim strUser As String
Dim strPassword As String

Set myQD = CurrentDb.CreateQueryDef("")

strUser = "xxxxxxx"
strPassword = "xxxxxxx"

strConnect = _
    "ODBC;Driver={ODBC Driver 17 for SQL Server};" & _
    "Server=tcp:mssql.stackcp.com;" & _
    "Database=ex80ln19;" & _
    "Uid={" & strUser & "};" & _
    "Pwd={" & strPassword & "};" & _
    "Encrypt=yes;" & _
    "TrustServerCertificate=no;" & _
    "Authentication=ActiveDirectoryPassword"
    
myQD.Connect = strConnect
myQD.ODBCTimeout = 30
myQD.SQL = StrSQL
myQD.ReturnsRecords = True

Set myRS = myQD.OpenRecordset
Set SelectViaPassthrough = myRS

End Function


Is there a simple fix / workaround I could perhaps implement (I'm actually going to be moving everything over to MySQL BE and C# FE eventually but need this "dirty database" up and running for other users in the meantime)
This post has been edited by datAdrenaline: May 29 2019, 11:29 AM

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 
cheekybuddha
post May 29 2019, 06:40 AM
Post#2


UtterAccess VIP
Posts: 11,464
Joined: 6-December 03
From: Telegraph Hill


>> I've had so many issues when it comes to writing/saving data/records <<
Do all your remote tables have a primary key?

Your ServerConnect() only connects for the passthru recordset.

Also, you don't pass the SQL to your query. How does ServerConnect() even compile without errors? Did you forget Option Explicit at the top of everymodule?

You need to dial this back a bit. Will come back shortly.

d

--------------------


Regards,

David Marten
Go to the top of the page
 
Minty
post May 29 2019, 07:03 AM
Post#3



Posts: 312
Joined: 5-July 16
From: UK - Wiltshire


QUOTE
I have created a database in access and the back-end tables are hosted online


How and where are they hosted? Access doesn't play very nice over a WAN, and requires some pretty nifty programming / design to overcome the inherent issues.
Go to the top of the page
 
Zaddicus
post May 29 2019, 07:35 AM
Post#4



Posts: 137
Joined: 3-April 19
From: Cardiff


QUOTE
Do all your remote tables have a primary key?

All except the 'Name AutoCorrect Save Failures' table (I don't even touch this)

QUOTE
Your ServerConnect() only connects for the passthru recordset

I was tinkering with it so this is due to my poor VB

QUOTE
Also, you don't pass the SQL to your query. How does ServerConnect() even compile without errors? Did you forget Option Explicit at the top of everymodule?

I did go back and add that to the start of my other modules - but only when you pointed it out previously, I still haven't ingrained to add that to the start of every module and I haven't done it for the subs (then again may have done it incorrect as my module is Actually:
CODE
Option Compare Database
Option Explicit

Public Function ServerConnect()


QUOTE
You need to dial this back a bit. Will come back shortly

The write conflict is a very low priority for me as for the most part I can just 'drop changes' and use SSMS to update the records directly - As it only affects some records and not all the user's can just email me the changes in the mean-time if they get the error
I've actually re-written the module already to the following (No compile errors)
CODE
Option Compare Database
Option Explicit

Public Function ServerConnect()

Dim myQD As DAO.QueryDef
Dim myRS As DAO.Recordset
Dim strConnect As String
Dim strUser As String
Dim strPassword As String

Set myQD = CurrentDb.CreateQueryDef("")

strUser = "xxxxxxx"
strPassword = "xxxxxxxx"

strConnect = "Driver={ODBC Driver 17 for SQL Server};" & _
    "Server=tcp:mssql.stackcp.com;" & _
    "Database=ex80ln19;" & _
    "Uid=" & strUser & ";" & _
    "Pwd=" & strPassword & ";" & _
    "Encrypt=yes;" & _
    "TrustServerCertificate=no;" & _
    "Connection Timeout=30;" & _
    "Authentication=SqlPassword"
    
myQD.Connect = strConnect
myQD.SQL = TempVars!SSQL.Value
myQD.ReturnsRecords = True
Set myRS = myQD.OpenRecordset

End Function

Obviously this returns "Run-time Error 3305" due to it not being a pass-through query, however I feel this is actually already a step closer to success, Amendment to the other sub:
CODE
If myR = True Then
  DoCmd.OpenForm "usf_OnboardSpeaker", acNormal, , "AttendeeID = " & Me.AttendeeID, acFormEdit, acWindowNormal      'Edit Mode
  DoCmd.Close acForm, "usf_Events", acSaveYes
Else        'No Matching Record, so Add one
  If Me.Dirty = True Then Me.Dirty = False      'Save pending Edits
  
  strSQL = "INSERT INTO tbl_SpeakerOnboarding (AttendeeID,ContactID,EventID) VALUES (" & myV1 & ", " & myV2 & ", " & myV3 & ")"
  TempVars!SSQL = strSQL
  
  Call ServerConnect
  
  CurrentDb.Execute strSQL, dbFailOnError
      
  DoCmd.OpenForm "usf_OnboardSpeaker", acNormal, , "AttendeeID = " & Me.AttendeeID, acFormEdit, acWindowNormal
  DoCmd.Close acForm, "usf_Events", acSaveYes

This post has been edited by datAdrenaline: May 29 2019, 11:16 AM
Reason for edit: Obviscated sensitive information.

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 
Zaddicus
post May 29 2019, 07:41 AM
Post#5



Posts: 137
Joined: 3-April 19
From: Cardiff


QUOTE
How and where are they hosted? Access doesn't play very nice over a WAN, and requires some pretty nifty programming / design to overcome the inherent issues


They are hosted on a private server the same that host's our companies website - all the tables I had to recreate through SSMS as when splitting and uploading it destroyed all PK/FK and relationships.
It is a dedicated machine though and not stored on a gdrive/onedrive/sharepoint etc

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 
Minty
post May 29 2019, 08:02 AM
Post#6



Posts: 312
Joined: 5-July 16
From: UK - Wiltshire


So they are on a local network, then not remote? (Sorry its not crystal clear from your reply)
Go to the top of the page
 
cheekybuddha
post May 29 2019, 08:06 AM
Post#7


UtterAccess VIP
Posts: 11,464
Joined: 6-December 03
From: Telegraph Hill


You can use this function for executing passthru queries:
CODE
Function PTQuery( _
           strSQL As String, _
           strCn As String, _
           Optional blReturnsRecords As Boolean, _
           Optional rsRet As DAO.Recordset _
         ) As Long

  With CurrentDb.CreateQueryDef(vbNullString)   ' Create a temporary QueryDef
    .Connect = strCn
    .SQL = strSQL
    .ReturnsRecords = blReturnsRecords
    If blReturnsRecords Then
      Set rsRet = .OpenRecordset
      PTQuery = rsRet.RecordCount
    Else
      .Execute
      PTQuery = .RecordsAffected
    End If
  End With
  
End Function

If you are executing an action query (INSERT/UPDATE/DELETE) you would do something like:
CODE
  Dim strCN AS String, strSQL As String,
  Dim strUser As String, strPassword As String
  Dim myV1 As Long, myV2 As Long, myV3 As Long
  Dim lAffected As Long

  strUser = "xxxxxxx"
  strPassword = "xxxxxxx"     ' <-- Watch out if this is your real password!!!!

  strCN = "ODBC;" & _
          "Driver={ODBC Driver 17 for SQL Server};" & _
          "Server=tcp:mssql.stackcp.com;" & _
          "Database=ex80ln19;" & _
          "Uid=" & strUser & ";" & _
          "Pwd=" & strPassword & ";" & _
          "Encrypt=yes;" & _
          "TrustServerCertificate=no;" & _
          "Connection Timeout=30;" & _
          "Authentication=SqlPassword"

  myV1 = Me.txtV1      ' or however these values are set
  myV2 = Me.txtV2
  myV3 = Me.txtV3
  strSQL = "INSERT INTO tbl_SpeakerOnboarding (AttendeeID,ContactID,EventID) VALUES (" & myV1 & ", " & myV2 & ", " & myV3 & ");"
  lAffected = PTQuery(strSQL, strCN)
  MsgBox lAffected & " records inserted"


If you want to get a recordset back (SELECT, or Stored Proc) then:
CODE
  Dim strCN AS String, strSQL As String, rs As DAO.Recordset
  Dim strUser As String, strPassword As String
  Dim myV1 As Long
  Dim lAffected As Long

  strUser = "xxxxxxx"
  strPassword = "xxxxxxx"     ' <-- Watch out if this is your real password!!!!

  strCN = "ODBC;" & _
          "Driver={ODBC Driver 17 for SQL Server};" & _
          "Server=tcp:mssql.stackcp.com;" & _
          "Database=ex80ln19;" & _
          "Uid=" & strUser & ";" & _
          "Pwd=" & strPassword & ";" & _
          "Encrypt=yes;" & _
          "TrustServerCertificate=no;" & _
          "Connection Timeout=30;" & _
          "Authentication=SqlPassword"

  myV1 = Me.txtV1      ' or however these values are set

  strSQL = "SELECT * FROM tbl_SpeakerOnboarding WHERE EventID =" & myV1 & ";"
  lAffected = PTQuery(strSQL, strCN, True, rs)
  With rs
    Do While Not .EOF
      Debug.Print "AttendeeID: ", .Fields("AttendeeID"), "ContactID: ", .Fields("ContactID")
      .MoveNext
    Loop
    .Close
  End With
  Set rs = Nothing


hth,

d
This post has been edited by datAdrenaline: May 29 2019, 11:28 AM
Reason for edit: Obfiscated sensitive info.

--------------------


Regards,

David Marten
Go to the top of the page
 
Zaddicus
post May 29 2019, 08:06 AM
Post#8



Posts: 137
Joined: 3-April 19
From: Cardiff


QUOTE
So they are on a local network, then not remote? (Sorry its not crystal clear from your reply)


My bad - They are hosted off-site so not a local network, definitely a remote connection

I was tempted to store the back-end on OneDrive and have the front-end connect that way but then it would only allow 1 user at a time to make changes so it defys the point.

EDIT: @CheekyBuddah those 3 are a great start -
QUOTE
If you are executing an action query (INSERT/UPDATE/DELETE) you would do something like:

I may use this as the main module and continue to use a TempVar to determine the SQL statement, that way I only need to define the strSQL in the sub and call the function once it's done (I hope)

FURTHER EDIT/NOTE: lifeis42 is not a real password, that's a little Easter egg I threw in wink.gif
This post has been edited by Zaddicus: May 29 2019, 08:13 AM

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 
cheekybuddha
post May 29 2019, 08:24 AM
Post#9


UtterAccess VIP
Posts: 11,464
Joined: 6-December 03
From: Telegraph Hill


You can use a function to build your connection string like:
CODE
Function BuildCnString( _
           strServer As String, _
           strDB As String, _
           strUser As String, _
           strPW As String, _
           Optional strDriver As String = "{ODBC Driver 17 for SQL Server}", _
           Optional blEncrypt As Boolean = True, _
           Optional blTrustCert As Boolean, _
           Optional iTimeout As Integer = 30, _
           Optional strAuthType As String = "Sqlpassword" _
         ) As String
        
  Dim strCN As String
  
  strCN = "ODBC;" & _
          "Driver=" & strDriver & ";" & _
          "Server=" & strServer & ";" & _
          "Database=" & strDB & ";" & _
          "Uid=" & strUser & ";" & _
          "Pwd=" & strPW & ";" & _
          "Encrypt=" & IIf(blEncrypt, "YES", "NO") & ";" & _
          "TrustServerCertificate=" & IIf(blTrustCert, "YES", "NO") & ";" & _
          "Connection Timeout=" & iTimeout & ";" & _
          "Authentication=" & strAuthType
          
  BuildCnString = strCN

End Function

You can either call it when you need it, or set a variable/TempVar with the string at the opening of your app:
CODE
  TempVars("CN_String") = BuildCnString("tcp:mssql.stackcp.com", "ex80ln19", "ex80ln19", "lifeis42")

Then pass TempVars("CN_String") to the PT_Query function.

hth,

d

--------------------


Regards,

David Marten
Go to the top of the page
 
Zaddicus
post May 29 2019, 09:52 AM
Post#10



Posts: 137
Joined: 3-April 19
From: Cardiff


Alright,

So after some minor changes to the functions (Dimensioning was a little off and I've removed invalid connection parameters - basically mimicked the parameters stored in the external connections) I now return with error 3146 - ODBC--Call Failed for ' .Execute'
Now I'm sure again this is due to my complete inexperience with this side of VB (Connecting to remote servers is actually proving to be beyond a nightmare)

The immediate window has
strCN = ODBC;Driver={ODBC Driver 17 for SQL Server};Server=mssql.stackcp.com;Uid=ex80ln19;Pwd=xxxxxxxxxx;Trusted_Connection=
no;Connection Timeout=30;Authentication=Sqlpassword;
strSQL = INSERT INTO tbl_SpeakerOnboarding (AttendeeID,ContactID,EventID) VALUES (488, 9405, 2)

1. I checked the available parameters for 'Authentication' and when using SSMS I use SQL Server Authentication and the other available parameters don't fit this so SQL password makes sense.
2. Checked the DNS file I used to link the tables (password isn't even saved in there) but all the other information is correct
QUOTE
[ODBC]
DRIVER=ODBC Driver 17 for SQL Server
UID=ex80ln19
TrustServerCertificate=No
WSID=DESKTOP-DAT9N8S
APP=Microsoft Office
Trusted_Connection=No
SERVER=mssql.stackcp.com
Description=Elink_Database

3. Googled the problem and "3146 is a generic error message associated with SQL Server ODBC" <<< actually the most helpful answer

Full Module:
CODE
Option Compare Database
Option Explicit

Public Function SQLAmendConnect()

  Dim strCN As String, strSQL As String
  Dim strUser As String, strPassword As String
  Dim lAffected As Long

  strUser = "ex80ln19"
  strPassword = "xxxxxxxxxx"

  strCN = "ODBC;" & _
          "Driver={ODBC Driver 17 for SQL Server};" & _
          "Server=mssql.stackcp.com;" & _
          "Uid=" & strUser & ";" & _
          "Pwd=" & strPassword & ";" & _
          "Trusted_Connection=no;" & _
          "Connection Timeout=30;" & _
          "Authentication=Sqlpassword"

  strSQL = TempVars!SSQL.Value
  lAffected = PTQuery(strSQL, strCN)
  MsgBox lAffected & " records inserted"

End Function

Function PTQuery( _
           strSQL As String, _
           strCN As String, _
           Optional blReturnsRecords As Boolean, _
           Optional rsRet As DAO.Recordset _
         ) As Long

  With CurrentDb.CreateQueryDef(vbNullString)   ' Create a temporary QueryDef
    .Connect = strCN
    .SQL = strSQL
    .ReturnsRecords = blReturnsRecords
    If blReturnsRecords Then
      Set rsRet = .OpenRecordset
      PTQuery = rsRet.RecordCount
    Else
      .Execute
      PTQuery = .RecordsAffected
    End If
  End With
  
End Function


Note: I haven't started on implementing BuildCnString function - one step at a time smile.gif - also since playing around today my autolog of errors no longer works (I'm a master at breaking things) so I've had to disable the errorhandling frown.gif
Attached File  snip050.PNG ( 10.22K )Number of downloads: 0

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 
cheekybuddha
post May 29 2019, 10:40 AM
Post#11


UtterAccess VIP
Posts: 11,464
Joined: 6-December 03
From: Telegraph Hill


In the PTQuery() function see if this helps
CODE
' ...
'      Set rsRet = .OpenRecordset
      Set rsRet = .OpenRecordset(dbOpenDynaset, dbSeeChanges)
' ...


hth,

d

--------------------


Regards,

David Marten
Go to the top of the page
 
cheekybuddha
post May 29 2019, 10:41 AM
Post#12


UtterAccess VIP
Posts: 11,464
Joined: 6-December 03
From: Telegraph Hill


In your code above you don't appear to select the database in the connection string

--------------------


Regards,

David Marten
Go to the top of the page
 
Zaddicus
post May 29 2019, 11:17 AM
Post#13



Posts: 137
Joined: 3-April 19
From: Cardiff


QUOTE
In your code above you don't appear to select the database in the connection string


Yeah I tried to just use the DSN settings that I created when linking the table - didn't work. Added in the database parameter and now Run time error 3151 ODBC connection error

1. This error I know both the x86 and x64 version of the driver is installed on this machine
2. Currently going through ensuring everything is DIM DAO
3. All other advice on google isn't relevant/helpful

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 
cheekybuddha
post May 29 2019, 11:24 AM
Post#14


UtterAccess VIP
Posts: 11,464
Joined: 6-December 03
From: Telegraph Hill


Have you got linked tables in your database?

In the Immediate Window run:
CODE
?CurrentDb.TableDefs("tbl_SpeakerOnboarding").Connect

and paste the output here

--------------------


Regards,

David Marten
Go to the top of the page
 
datAdrenaline
post May 29 2019, 11:24 AM
Post#15


UtterAccess Editor
Posts: 18,002
Joined: 4-December 03
From: Northern Virginia, USA


Quick question (and without reading all the details of the posts) .... if you have your tables linked, then why use code for CRUD -- seems bound forms and managing the recordsource property would be the way to go?

---

Also, examine your tables for BIT fields specifically and many dbengines allow for Null BIT fields, but when Access/DAO does not allow that and you may get an error similar to what you are experiencing. Another tip is to ensure that each table has a "rowversion" typed field. In SQL Server, that datatype is named 'timestamp' (not to be confused with a date/time stamp). By adding a system controlled rowversion field, ODBC drivers often just do things "better".

--------------------
Brent Spaulding | datAdrenaline | Microsoft MVP 2007 - 2019
It's all very well to tell us to forgive our enemies; our enemies can never hurt us very much. But oh, what about forgiving our friends? - Willa Cather; As always - Pay it Forward!
Go to the top of the page
 
Zaddicus
post May 30 2019, 02:28 AM
Post#16



Posts: 137
Joined: 3-April 19
From: Cardiff


QUOTE
Have you got linked tables in your database?


All the tables are linked: Immediate window output
CODE
ODBC;Description=Elink_Database;DRIVER=ODBC Driver 17 for SQL Server;SERVER=mssql.stackcp.com;UID=ex80ln19;PWD=xxxxxxxxxxxx;Trusted_Connection
=No;APP=Microsoft Office;

I'm half tempted to break connections and try create a new DSN file

QUOTE
Quick question (and without reading all the details of the posts) .... if you have your tables linked, then why use code for CRUD -- seems bound forms and managing the recordsource property would be the way to go?

There is some VB that takes the data from a form and passes it into a tempvar to run a query and load another form either with the results or input the data into the table and load the form with that data.

QUOTE
By adding a system controlled rowversion field, ODBC drivers often just do things "better".

I'll hop onto the back-end and get one added in as none of my tables have one.

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 
datAdrenaline
post May 31 2019, 11:09 AM
Post#17


UtterAccess Editor
Posts: 18,002
Joined: 4-December 03
From: Northern Virginia, USA


Creating a new DSN will likely not do anything. As you can see in your .Connect property, the DSN you may have used to create your Linked Table objects was only used to get the connection information ONCE. So, your DSN was used as a 'Snap Shot', in order to build a DSNless connection string.

If you want to rebuild your Linked Table objects connection strings then set the value in VBA, then call the .RefreshLink, or simply delete the Linked Table Object, then recreate it via code and set the .Connect property with a DSNless connection string.

---

Oh, have you considered using bound Forms? It makes CRUD a lot easier.

--------------------
Brent Spaulding | datAdrenaline | Microsoft MVP 2007 - 2019
It's all very well to tell us to forgive our enemies; our enemies can never hurt us very much. But oh, what about forgiving our friends? - Willa Cather; As always - Pay it Forward!
Go to the top of the page
 
Zaddicus
post Jun 3 2019, 02:48 AM
Post#18



Posts: 137
Joined: 3-April 19
From: Cardiff


QUOTE
If you want to rebuild your Linked Table objects connection strings then set the value in VBA, then call the .RefreshLink, or simply delete the Linked Table Object, then recreate it via code and set the .Connect property with a DSNless connection string


May consider this route, as a lot of the changing/management of data will be done by mass import so only really need to keep the connection when running that VBA script (which just crashes and does nothing at the moment meaning I'm running an import via the server anyway)

QUOTE
Oh, have you considered using bound Forms? It makes CRUD a lot easier


Gonna be very honest here - I have no Idea. A lot of the forms are used for one table only (I.E that table is set as the record source) with about 15% running from a query and only like 5% have no record source defined. ATM this project is very rushed due to the request of it being "usable" as quickly as possible and I barely touched any properties.

Already run through the SSMS backend this morning and attempted to add a 'rowversion' field so hopefully that will help things along (SSMS is a nightmare)

--------------------
~ Castiel


Skype: live:castielswift
Go to the top of the page
 


Custom Search


RSSSearch   Top   Lo-Fi    25th August 2019 - 12:09 AM