Как читать набор записей как строку в VBA

У меня есть код для чтения записей из базы данных. когда я читаю, переменная набора записей изменяет значение таблицы в свой собственный формат. Например:

В базе данных

Значение времени равно 12345 (не дата и время), но когда набор записей считывает его, оно выглядит как For Eg: 23-06-2012 10:15:23

Я только что обнаружил, что сам набор записей сохраняет значения в своем собственном формате после выполнения.

Set rs = CmdSqlData.Execute()

Итак, есть ли способ определить набор записей как String?

Вот код.

Dim rs As ADODB.RecordSet
Set rs = CmdSqlData.Execute()
Do While (rs.EOF = FALSE And rs.BOF = FALSE)
  p = rs.GetRows(1)
  cell(1,1) = p(0,0)
Loop

Может ли кто-нибудь сообщить мне, как читать данные как строку (как в базе данных), чтобы не происходило никаких изменений в формате.

Примечание. Я не могу преобразовать формат ячейки Excel из-за других требований, но я хочу читать все как строку из таблицы.


person logan    schedule 22.06.2012    source источник
comment
Попробуйте добавить эту строку перед cell(1,1)=p(0,0) .. cell(1,1).NumberFormat = "hh:mm:ss"   -  person Siddharth Rout    schedule 22.06.2012
comment
@SiddharthRout: у меня не будет этого формата всегда, так как у меня тоже есть другие столбцы. Возможно, я не знаю, когда этот формат появится в сотовых. Я уже сделал формат excel to String для всех ячеек из-за некоторых требований. Я просто хочу прочитать запись, установленную как String. Есть ли другой способ   -  person logan    schedule 22.06.2012
comment
Я считаю, что существует rs.GetString() Метод.   -  person Siddharth Rout    schedule 22.06.2012
comment
Нашел... См. этот msdn.microsoft.com /en-us/library/ms676975%28VS.85%29.aspx   -  person Siddharth Rout    schedule 22.06.2012
comment
@SiddharthRout: GetRows() извлекает все столбцы подряд. Точно так же GetString() будет извлекать все значения столбца?   -  person logan    schedule 22.06.2012
comment
Да, GetString возвращает все столбцы всех или указанное количество строк   -  person Siddharth Rout    schedule 22.06.2012
comment
@SiddharthRout: я это уже видел. В любом случае позвольте мне попробовать и дайте вам знать. Спасибо   -  person logan    schedule 22.06.2012
comment
@SiddarthRout: GetString() просто сохраняет все значения строки за один раз. Я хотел разделить как массив? Я не могу сделать p (0,0) или p (0,1)...   -  person logan    schedule 22.06.2012
comment
@SiddharthRout Just Fount, что сам набор записей сохраняет значения в своем собственном формате после выполнения Set rs = CmdSqlData.Execute() ; Итак, есть ли способ определить набор записей как строку ??   -  person logan    schedule 22.06.2012
comment
Если у вас есть образец кода, вырежьте его и вставьте в редактор. Не перепечатывайте его, так как это может привести к ошибкам, которые будет очень трудно обнаружить.   -  person JimmyPena    schedule 22.06.2012
comment
@JP. Я работаю на серверной машине. Так нельзя.   -  person logan    schedule 23.06.2012


Ответы (1)


Если вы пишете

CStr(p(0,0))

Excel преобразует ячейку в соответствующий тип содержимого, поэтому, если p(0,0) является числом, ячейка будет числовой.

Однако, если вы пишете

ActiveSheet.Cells(1, 1) = "'" & p(0, 0)

Ячейка A1 будет содержать '2 для просмотра, но ею можно манипулировать как строкой. Это осталось с первых дней существования Excel, где для ввода строки нужно было поставить перед ней одинарную кавычку.

A1
2   
=A1=2   FALSE
=A1="2" TRUE
person Fionnuala    schedule 22.06.2012
comment
+ 1 Чуть не забыл про ' LOL - person Siddharth Rout; 22.06.2012
comment
@SiddharthRout: Будет ли эта одинарная кавычка игнорироваться и в Excel будет храниться только строка? (Извините, я работаю на сервере, поэтому не могу сразу проверить) - person logan; 22.06.2012
comment
@logan Что ты имеешь в виду? Какая часть моего объяснения непонятна (ответ мой, кстати)? - person Fionnuala; 22.06.2012
comment
@Remou: ActiveSheet.Cells(1, 1) = ' & p(0, 0) выше, будет ли одинарная кавычка игнорироваться при сохранении. - person logan; 22.06.2012
comment
Если вы выводите файл в .txt, одиночная запятая не будет включена, если вы ссылаетесь на столбец в ADO, ссылаетесь на него как на текст, одиночная запятая не будет иметь значения. - person Fionnuala; 22.06.2012
comment
Однако, если вы щелкнете по ячейке и посмотрите на адресную строку, вы увидите «2 - person Fionnuala; 22.06.2012
comment
@Remou: У меня все еще есть сомнения. возвращаемое значение для p(0,0)='22/02/2012 10:10:15' Но на самом деле в базе данных это только 10:10:15 Как приведенный выше оператор изменит p(0,0) на '10:10 :15' Я хочу, чтобы значения (p(0,0)) читались как строки. - person logan; 22.06.2012
comment
В базе данных значение времени хранится как число, но excel/VBA читает его как поле даты. Я хочу, чтобы число читалось как строка, чтобы не происходило преобразования - person logan; 22.06.2012
comment
В моих тестах время из базы данных, хранящееся либо в виде строки, либо в виде времени, копировалось в Excel в виде строки. - person Fionnuala; 22.06.2012
comment
давайте продолжим это обсуждение в чате - person Fionnuala; 22.06.2012
comment
Извините, я не могу общаться и запрещен в офисе. Подскажите пожалуйста вот сам - person logan; 22.06.2012
comment
Это не одобряется Stackoverflow. Вы изменили вопрос. - person Fionnuala; 22.06.2012
comment
В моих тестах время из базы данных, хранящееся либо в виде строки, либо в виде времени, копировалось в Excel в виде строки. Что вы хотите, чтобы Excel показывал? 12:34 или 22:02? Обратите внимание: если вы ранее скопировали дату в ячейку, в следующий раз, когда вы введете значение из своей БД, оно будет сохранено как дата. Выбор времени и текста из моей таблицы: ActiveSheet.Cells(2, 1) = ' & p(0, 0) ActiveSheet.Cells(3, 1) = ' & p(1, 0) ActiveSheet.Cells(4, 1) = p(0, 0) ActiveSheet.Cells(5, 1) = p(1, 0) Возвращает 21:00:00 21:00:00 0,875 0,875 - person Fionnuala; 22.06.2012
comment
Я просто хочу показать, как это в базе данных. В данном случае я хочу показать 1234. Извините, если перепутал. Мой вопрос очень прост. Я просто хочу прочитать все (каждые столбцы, строки) как строку - person logan; 22.06.2012
comment
@Remou Just Fount, что сам набор записей сохраняет значения в своем собственном формате после выполнения Set rs = CmdSqlData.Execute() ; Итак, есть ли способ определить набор записей как строку ?? - person logan; 22.06.2012
comment
Какую базу данных вы используете? - person Fionnuala; 22.06.2012
comment
@Remou Teradata --› Набор записей устанавливает для своего типа данных отметку времени на основе типа данных таблицы. Есть ли способ установить набор записей как String ? - person logan; 22.06.2012