Solved spaces in AddNew fields caising issues... (1 Viewer)

Cal Varchar

New member
Local time
Today, 23:42
Joined
Jan 24, 2024
Messages
28
You need [field name] when there is a space, I think. Some version of that, with square brackets
In my SELECT statement, in the first post, I used the square brackets, but with
i can't believe that is True? like i said, i did re-create your table.
see this video
Yeah, this should be working. Thanks for going through that amount of trouble. Imagine, they don't have jelly bean emoji? Maybe you could paste my code in your system?

Public Sub ADOTest()

Dim ADOConn As New ADODB.Connection
Dim ADOrec As New ADODB.Recordset

ADOConn.ConnectionString = XXXXXXXXXXXXXXXXXX-YOUR connection XXXXXXXXXXXX
ADOConn.Open

Set ADOrec.ActiveConnection = ADOConn
ADOrec.LockType = adLockOptimistic
ADOrec.Source = "SELECT [Job Title], Company FROM Customers"

ADOrec.AddNew
ADOrec("Company") = "PHhoestersters Company"
ADOrec.Update
ADOrec("Job Title") = "112212ZXZXZX"
ADOrec.Update

End Sub
 

arnelgp

..forever waiting... waiting for jellybean!
Local time
Tomorrow, 04:42
Joined
May 7, 2009
Messages
19,245
as I have said, but unfortunate you are not paying attention, use .Save instead of .Update.
change your code to this:

Public Sub ADOTest()

Dim ADOConn As New ADODB.Connection
Dim ADOrec As New ADODB.Recordset

ADOConn.ConnectionString = XXXXXXXXXXXXXXXXXX-YOUR connection XXXXXXXXXXXX
ADOConn.Open

Set ADOrec.ActiveConnection = ADOConn
ADOrec.LockType = adLockOptimistic
ADOrec.Source = "SELECT [Job Title], Company FROM Customers"

ADOrec.AddNew
ADOrec("Company") = "PHhoestersters Company"
ADOrec("Job Title") = "112212ZXZXZX"
ADOrec.Save

End Sub
 

cheekybuddha

AWF VIP
Local time
Today, 21:42
Joined
Jul 21, 2014
Messages
2,280
In my SELECT statement, in the first post, I used the square brackets, but with

Yeah, this should be working. Thanks for going through that amount of trouble. Imagine, they don't have jelly bean emoji? Maybe you could paste my code in your system?

Public Sub ADOTest()

Dim ADOConn As New ADODB.Connection
Dim ADOrec As New ADODB.Recordset

ADOConn.ConnectionString = XXXXXXXXXXXXXXXXXX-YOUR connection XXXXXXXXXXXX
ADOConn.Open

Set ADOrec.ActiveConnection = ADOConn
ADOrec.LockType = adLockOptimistic
ADOrec.Source = "SELECT [Job Title], Company FROM Customers"

ADOrec.AddNew
ADOrec("Company") = "PHhoestersters Company"
ADOrec.Update
ADOrec("Job Title") = "112212ZXZXZX"
ADOrec.Update

End Sub
You don't appear to actually open your recordset in this code.
 

Cal Varchar

New member
Local time
Today, 23:42
Joined
Jan 24, 2024
Messages
28
i can't believe that is True? like i said, i did re-create your table.
see this video
Thanks for going to so much trouble. Yeah, it should work. Maybe there's another conflict. Would you be able to copy and paste my code in your system and see what happens?

Dim ADOConn As New ADODB.Connection
Dim ADOrec As New ADODB.Recordset

ADOConn.ConnectionString = XXXX Your connection string XXXXX
ADOConn.Open

Set ADOrec.ActiveConnection = ADOConn
ADOrec.LockType = adLockOptimistic
ADOrec.Source = "SELECT [Job Title], Company FROM TESTING_ADO"
ADOrec.Open



ADOrec.AddNew
ADOrec("Company") = "PHhoestersters Company"
ADOrec.Update
ADOrec("Job Title") = "112212ZXZXZX"
ADOrec.Update
as I have said, but unfortunate you are not paying attention, use .Save instead of .Update.
change your code to this:

Public Sub ADOTest()

Dim ADOConn As New ADODB.Connection
Dim ADOrec As New ADODB.Recordset

ADOConn.ConnectionString = XXXXXXXXXXXXXXXXXX-YOUR connection XXXXXXXXXXXX
ADOConn.Open

Set ADOrec.ActiveConnection = ADOConn
ADOrec.LockType = adLockOptimistic
ADOrec.Source = "SELECT [Job Title], Company FROM Customers"

ADOrec.AddNew
ADOrec("Company") = "PHhoestersters Company"
ADOrec("Job Title") = "112212ZXZXZX"
ADOrec.Save

End Sub
No matter what code I use "Save" or "Update", it WORKS when there is NO SPACE....BUT... does NOT work with a space, ie, "Field Name".

I have RUN it with SAVE twenty times, and it does not work with a SPACE in the field name.

I have run it with UPDATE twenty times, and it WORKS exactly the same way that SAVE works.

I would assume that there is something else going on. Perhaps a conflict or outdated something. But the code, BOTH "Save" and "Update" fail in the exact same place FOR ME every single time.
 

Cal Varchar

New member
Local time
Today, 23:42
Joined
Jan 24, 2024
Messages
28
You don't appear to actually open your recordset in this code.
Yeah, I edited out a comment before posting, and that was a casualty.

The actual code is the same but with ADOrec.open

BELOW:

Dim ADOConn As New ADODB.Connection
Dim ADOrec As New ADODB.Recordset

ADOConn.ConnectionString = "Driver={SQL Server};Server=CODE-AMBER\SQLSRVRX2016;Database=Many to Many ExperimentSQL;Trusted_Connection=Yes;"
ADOConn.Open

Set ADOrec.ActiveConnection = ADOConn
ADOrec.LockType = adLockOptimistic
ADOrec.Source = "SELECT [Job Title], Company FROM TESTING_ADO"
ADOrec.Open



ADOrec.AddNew
ADOrec("Company") = "PHhoestersters Company"
ADOrec.Update
ADOrec("Job Title") = "112212ZXZXZX"
ADOrec.Update
 

cheekybuddha

AWF VIP
Local time
Today, 21:42
Joined
Jul 21, 2014
Messages
2,280
@Cal Varchar

Can you run the following test?

Add this function to a standard module:
Code:
Function Describe(tblName As String) As String

  Const CN_STRING As String = "ODBC;Your connection string"
  Const PIPE As String = "|"
       
'  Const adCmdText As Integer = 1, _
'        adClipString As Integer = 2
       
    Dim SQL_DESCRIBE As String, _
        ret As String, _
        i As Integer

  SQL_DESCRIBE = _
    "SELECT " & vbNewLine & _
    "  a.[NAME]                                    AS [Field], " & vbNewLine & _
    "  a.[TYPE]                                    AS [Type], " & vbNewLine & _
    "  a.[NULL]                                    AS [Null], " & vbNewLine & _
    "  a.[KEY]                                     AS [Key], " & vbNewLine & _
    "  a.[DEFAULT]                                 AS [Default], " & vbNewLine & _
    "  CONCAT_WS(' ', a.[IDENTITY], b.[COMMENTS])  AS [Extra] " & vbNewLine & _
    "FROM ( " & vbNewLine & _
    "  SELECT " & vbNewLine & _
    "    sc.COLUMN_NAME      AS [NAME], " & vbNewLine & _
    "    Case sc.DATA_TYPE " & vbNewLine & _
    "      WHEN 'char'       THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'numeric'    THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.NUMERIC_PRECISION AS VARCHAR) + ', ' + CAST(sc.NUMERIC_SCALE AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'decimal'    THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.NUMERIC_PRECISION AS VARCHAR) + ', ' + CAST(sc.NUMERIC_SCALE AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'nvarchar'   THEN UPPER(sc.DATA_TYPE) + '(' + IIF(sc.CHARACTER_MAXIMUM_LENGTH < 0, 'MAX', CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR)) + ')' " & vbNewLine & _
    "      WHEN 'varbinary'  THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'varchar'    THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' " & vbNewLine & _
    "      ELSE UPPER(sc.DATA_TYPE) " & vbNewLine & _
    "    END                 AS [TYPE], " & vbNewLine & _
    "    sc.IS_NULLABLE      AS [NULL], " & vbNewLine & _
    "    k.CONSTRAINT_TYPE   AS [KEY], " & vbNewLine
  SQL_DESCRIBE = SQL_DESCRIBE & _
    "    CASE " & vbNewLine & _
    "      WHEN sc.COLUMN_DEFAULT IS NOT NULL AND LEN(sc.COLUMN_DEFAULT) > 2 THEN " & vbNewLine & _
    "        CASE " & vbNewLine & _
    "          WHEN LEFT(sc.COLUMN_DEFAULT, 2) = '((' THEN SUBSTRING(sc.COLUMN_DEFAULT, 3, LEN(sc.COLUMN_DEFAULT) - 4) " & vbNewLine & _
    "          ELSE SUBSTRING(sc.COLUMN_DEFAULT, 2, LEN(sc.COLUMN_DEFAULT) - 2) " & vbNewLine & _
    "        END " & vbNewLine & _
    "      ELSE sc.COLUMN_DEFAULT " & vbNewLine & _
    "    END                 AS [DEFAULT], " & vbNewLine & _
    "    CASE " & vbNewLine & _
    "      WHEN CAST(COLUMNPROPERTY(OBJECT_ID(sc.TABLE_NAME), sc.COLUMN_NAME, 'IsIdentity') AS BIT) = 1  THEN 'AUTO_INCREMENT' " & vbNewLine & _
    "      ELSE NULL " & vbNewLine & _
    "    END                 AS [IDENTITY], " & vbNewLine & _
    "    sc.ORDINAL_POSITION " & vbNewLine & _
    "  FROM INFORMATION_SCHEMA.COLUMNS sc " & vbNewLine & _
    "  LEFT JOIN ( " & vbNewLine & _
    "    SELECT " & vbNewLine & _
    "      u.TABLE_SCHEMA, " & vbNewLine & _
    "      u.TABLE_NAME, " & vbNewLine & _
    "      u.COLUMN_NAME, " & vbNewLine & _
    "      tc.CONSTRAINT_TYPE " & vbNewLine & _
    "    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u " & vbNewLine & _
    "    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc " & vbNewLine & _
    "            ON u.TABLE_SCHEMA    = tc.CONSTRAINT_SCHEMA " & vbNewLine
  SQL_DESCRIBE = SQL_DESCRIBE & _
    "           AND u.TABLE_NAME      = tc.TABLE_NAME " & vbNewLine & _
    "           AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME " & vbNewLine & _
    "  ) k " & vbNewLine & _
    "         ON sc.TABLE_SCHEMA = k.TABLE_SCHEMA " & vbNewLine & _
    "        AND sc.TABLE_NAME   = k.TABLE_NAME " & vbNewLine & _
    "        AND sc.COLUMN_NAME  = k.COLUMN_NAME " & vbNewLine & _
    "  WHERE sc.TABLE_NAME = @objectName " & vbNewLine & _
    ") a " & vbNewLine & _
    "FULL JOIN ( " & vbNewLine & _
    "  SELECT " & vbNewLine & _
    "    CAST(value AS NVARCHAR)   AS [COMMENTS], " & vbNewLine & _
    "    CAST(objname AS NVARCHAR) AS [NAME] " & vbNewLine & _
    "  FROM ::fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', @objectName, 'column', default) " & vbNewLine & _
    ") b " & vbNewLine & _
    "       ON a.NAME COLLATE DATABASE_DEFAULT = b.NAME COLLATE DATABASE_DEFAULT " & vbNewLine & _
    "ORDER BY " & vbNewLine & _
    "  a.ORDINAL_POSITION;"
   
  SQL_DESCRIBE = Replace(SQL_DESCRIBE, "@objectName", "'" & tblName & "'")
  With CreateObject("ADODB.Connection")
    .ConnectionString = CN_STRING
    .Open
    With .Execute(SQL_DESCRIBE, , adCmdText)
      If Not .EOF Then
        For i = 0 To .Fields.Count - 1
          ret = ret & PIPE & .Fields(i).Name
        Next i
        ret = Mid(ret, Len(PIPE) + 1) & vbNewLine
        ret = ret & .GetString(adClipString, , PIPE)
      Else
        ret = "No table with name " & tblName & " found on server"
      End If
      .Close
    End With
    .Close
  End With
  Describe = ret
   
End Function

Put your connection string in the Const CN_STRING in the first line.

Then, in the Immediate Window (Ctrl+G), run:
Code:
?Describe("TESTING_ADO")

Post back any output.
 

Cal Varchar

New member
Local time
Today, 23:42
Joined
Jan 24, 2024
Messages
28
i can't believe that is True? like i said, i did re-create your table.
see this video
GOT IT!!

Thanks again for the video.

When I looked at it, I thought it's not exactly like mine, but didn't think it would matter.

All I did was add:

ADOrec.CursorType = adOpenDynamic

So, I have:

Set ADOrec.ActiveConnection = ADOConn
ADOrec.LockType = adLockOptimistic
ADOrec.CursorType = adOpenDynamic
ADOrec.Source = "SELECT [Job Title], [Company] FROM Customers"
ADOrec.Open

Works.

I was about to start looking at rehab facilities.
 

Cal Varchar

New member
Local time
Today, 23:42
Joined
Jan 24, 2024
Messages
28
@Cal Varchar

Can you run the following test?

Add this function to a standard module:
Code:
Function Describe(tblName As String) As String

  Const CN_STRING As String = "ODBC;Your connection string"
  Const PIPE As String = "|"
      
'  Const adCmdText As Integer = 1, _
'        adClipString As Integer = 2
      
    Dim SQL_DESCRIBE As String, _
        ret As String, _
        i As Integer

  SQL_DESCRIBE = _
    "SELECT " & vbNewLine & _
    "  a.[NAME]                                    AS [Field], " & vbNewLine & _
    "  a.[TYPE]                                    AS [Type], " & vbNewLine & _
    "  a.[NULL]                                    AS [Null], " & vbNewLine & _
    "  a.[KEY]                                     AS [Key], " & vbNewLine & _
    "  a.[DEFAULT]                                 AS [Default], " & vbNewLine & _
    "  CONCAT_WS(' ', a.[IDENTITY], b.[COMMENTS])  AS [Extra] " & vbNewLine & _
    "FROM ( " & vbNewLine & _
    "  SELECT " & vbNewLine & _
    "    sc.COLUMN_NAME      AS [NAME], " & vbNewLine & _
    "    Case sc.DATA_TYPE " & vbNewLine & _
    "      WHEN 'char'       THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'numeric'    THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.NUMERIC_PRECISION AS VARCHAR) + ', ' + CAST(sc.NUMERIC_SCALE AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'decimal'    THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.NUMERIC_PRECISION AS VARCHAR) + ', ' + CAST(sc.NUMERIC_SCALE AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'nvarchar'   THEN UPPER(sc.DATA_TYPE) + '(' + IIF(sc.CHARACTER_MAXIMUM_LENGTH < 0, 'MAX', CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR)) + ')' " & vbNewLine & _
    "      WHEN 'varbinary'  THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' " & vbNewLine & _
    "      WHEN 'varchar'    THEN UPPER(sc.DATA_TYPE) + '(' + CAST(sc.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' " & vbNewLine & _
    "      ELSE UPPER(sc.DATA_TYPE) " & vbNewLine & _
    "    END                 AS [TYPE], " & vbNewLine & _
    "    sc.IS_NULLABLE      AS [NULL], " & vbNewLine & _
    "    k.CONSTRAINT_TYPE   AS [KEY], " & vbNewLine
  SQL_DESCRIBE = SQL_DESCRIBE & _
    "    CASE " & vbNewLine & _
    "      WHEN sc.COLUMN_DEFAULT IS NOT NULL AND LEN(sc.COLUMN_DEFAULT) > 2 THEN " & vbNewLine & _
    "        CASE " & vbNewLine & _
    "          WHEN LEFT(sc.COLUMN_DEFAULT, 2) = '((' THEN SUBSTRING(sc.COLUMN_DEFAULT, 3, LEN(sc.COLUMN_DEFAULT) - 4) " & vbNewLine & _
    "          ELSE SUBSTRING(sc.COLUMN_DEFAULT, 2, LEN(sc.COLUMN_DEFAULT) - 2) " & vbNewLine & _
    "        END " & vbNewLine & _
    "      ELSE sc.COLUMN_DEFAULT " & vbNewLine & _
    "    END                 AS [DEFAULT], " & vbNewLine & _
    "    CASE " & vbNewLine & _
    "      WHEN CAST(COLUMNPROPERTY(OBJECT_ID(sc.TABLE_NAME), sc.COLUMN_NAME, 'IsIdentity') AS BIT) = 1  THEN 'AUTO_INCREMENT' " & vbNewLine & _
    "      ELSE NULL " & vbNewLine & _
    "    END                 AS [IDENTITY], " & vbNewLine & _
    "    sc.ORDINAL_POSITION " & vbNewLine & _
    "  FROM INFORMATION_SCHEMA.COLUMNS sc " & vbNewLine & _
    "  LEFT JOIN ( " & vbNewLine & _
    "    SELECT " & vbNewLine & _
    "      u.TABLE_SCHEMA, " & vbNewLine & _
    "      u.TABLE_NAME, " & vbNewLine & _
    "      u.COLUMN_NAME, " & vbNewLine & _
    "      tc.CONSTRAINT_TYPE " & vbNewLine & _
    "    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u " & vbNewLine & _
    "    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc " & vbNewLine & _
    "            ON u.TABLE_SCHEMA    = tc.CONSTRAINT_SCHEMA " & vbNewLine
  SQL_DESCRIBE = SQL_DESCRIBE & _
    "           AND u.TABLE_NAME      = tc.TABLE_NAME " & vbNewLine & _
    "           AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME " & vbNewLine & _
    "  ) k " & vbNewLine & _
    "         ON sc.TABLE_SCHEMA = k.TABLE_SCHEMA " & vbNewLine & _
    "        AND sc.TABLE_NAME   = k.TABLE_NAME " & vbNewLine & _
    "        AND sc.COLUMN_NAME  = k.COLUMN_NAME " & vbNewLine & _
    "  WHERE sc.TABLE_NAME = @objectName " & vbNewLine & _
    ") a " & vbNewLine & _
    "FULL JOIN ( " & vbNewLine & _
    "  SELECT " & vbNewLine & _
    "    CAST(value AS NVARCHAR)   AS [COMMENTS], " & vbNewLine & _
    "    CAST(objname AS NVARCHAR) AS [NAME] " & vbNewLine & _
    "  FROM ::fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', @objectName, 'column', default) " & vbNewLine & _
    ") b " & vbNewLine & _
    "       ON a.NAME COLLATE DATABASE_DEFAULT = b.NAME COLLATE DATABASE_DEFAULT " & vbNewLine & _
    "ORDER BY " & vbNewLine & _
    "  a.ORDINAL_POSITION;"
  
  SQL_DESCRIBE = Replace(SQL_DESCRIBE, "@objectName", "'" & tblName & "'")
  With CreateObject("ADODB.Connection")
    .ConnectionString = CN_STRING
    .Open
    With .Execute(SQL_DESCRIBE, , adCmdText)
      If Not .EOF Then
        For i = 0 To .Fields.Count - 1
          ret = ret & PIPE & .Fields(i).Name
        Next i
        ret = Mid(ret, Len(PIPE) + 1) & vbNewLine
        ret = ret & .GetString(adClipString, , PIPE)
      Else
        ret = "No table with name " & tblName & " found on server"
      End If
      .Close
    End With
    .Close
  End With
  Describe = ret
  
End Function

Put your connection string in the Const CN_STRING in the first line.

Then, in the Immediate Window (Ctrl+G), run:
Code:
?Describe("TESTING_ADO")

Post back any output.
Thank you for this. But it's solved. I hope that you had this function just sitting out in the garage or something, because that's a lot of typing.
 

Users who are viewing this thread

Top Bottom