Неиспользуемые символы, присутствующие в наборе записей, который связан с контролем в Access 2003 - PullRequest
0 голосов
/ 29 июня 2010

У меня есть некоторые данные, хранящиеся в SQL Server, который содержит апострофы. В таблице SQL Server в апостроф экранируется. Например, фраза «тезис Робертса» сохраняется как «тезис Роберта». Я использую Access 2003 в качестве конца шрифта для приложения и использую ADO для доступа к данным, хранящимся в SQL Server, с использованием хранимых процедур.

Проблема, с которой я сталкиваюсь, заключается в том, как «убежать» от двойного апострофа, когда данные извлекаются с использованием набора записей и затем связываются с элементом управления. Вот пример кода.

  Dim cnn As ADODB.Connection
  Dim rs As ADODB.Recordset


  Set cnn = New ADODB.Connection
  cnn.ConnectionString = myConnectionString
  cnn.Open

  Set rs = New ADODB.Recordset
  Set rs.ActiveConnection = cnn
  rs.Source = "EXEC uspMyStoredProcedureName"

  rs.LockType = adLockOptimistic
  rs.CursorType = adOpenStatic
  rs.CursorLocation = adUseClient
  rs.Open

  Set ListControl.Recordset = rs

  Set rs = Nothing
  Set cnn = Nothing

Должен ли я вручную «проходить» по набору записей и не выходить из апострофа? Спасибо.

Ответы [ 2 ]

1 голос
/ 29 июня 2010

Если у вас нет возможности изменить имя uspMyStoredProcedureName, вам придется перебрать набор результатов. В противном случае изменение оператора SELECT в хранимой процедуре с col на Replace(col, '''''', '''') поможет. Да, во втором аргументе шесть одинарных кавычек и четыре в третьем: две заключают в себе строку, и внутри нее каждая кавычка удваивается, чтобы избежать ее.

Кстати: почему данные вообще хранятся в двойных кавычках?

1 голос
/ 29 июня 2010

Вам не нужно ничего убирать.Форма с двойным апострофом используется только для строковых литералов внутри операторов SQL.Фактическое значение, вставленное в базу данных с помощью INSERT... 'Robert''s Thesis';, равно Robert's Thesis, и это значение вы получите, когда прочитаете его из набора записей, извлеченного из SELECT.

Если что-то внутри uspMyStoredProcedureName делает что-то странное, чтобы заставить возвращаться двойные апострофы, тогда он сломан и нуждается в исправлении;если у вас есть Robert''s Thesis в качестве фактического значения в базе данных, то вы вставили неверные данные, и вы должны попытаться исправить код, который это сделал, и очистить данные.

...