|
|
|
ADO, SQL и 1с Ø |
☑ | ||
|---|---|---|---|---|
|
0
Omi1
15.12.04
✎
16:18
|
При обращении к результатам работы запроса например:
Rs.MoveFirst(); Пока Rs.EOF() = 0 do Value1 = Rs.Fields("FieldName1”).Value; Rs.MoveNext(); КонецЦикла; если поле "FieldName1" имеет например тип значения "timestamp" 1с не понимает такое значение что делать? Можно ли получить это значение в виде строки. |
|||
|
1
Gloom
15.12.04
✎
16:20
|
Прямо в запросе и конвертуй в строку...
|
|||
|
2
Дяпти
15.12.04
✎
16:21
|
Преобразовывай в запросе к типам, которые 1С понимает.
|
|||
|
3
ДенисЧ
15.12.04
✎
16:22
|
В запросе сделай Convert(varchar, FieldName1, 104)
|
|||
|
4
Uho
15.12.04
✎
16:22
|
Value1 = строка(Rs.Fields("FieldName1”).Value);
|
|||
|
5
Omi1
15.12.04
✎
16:24
|
спасибо 1,2,3
Придется переписывать запрос :-( |
|||
|
6
Uho
15.12.04
✎
16:27
|
(5) А чего (4) не катит? Сам не пробовал, просто интересно...
|
|||
|
7
Omi1
15.12.04
✎
16:30
|
(4) не катит
|
|||
|
8
ДенисЧ
15.12.04
✎
16:37
|
(5) дофига там переписывать...
(6) АДО не понимает типа datetime |
|||
|
9
Gloom
15.12.04
✎
16:40
|
(8)"АДО не понимает типа datetime" - смелое заявление...
|
|||
|
10
Uho
15.12.04
✎
16:41
|
(8) А... Понятно, я просто через SQLDMO когда-то делал, поэтому типа (4) работало...
|
|||
|
11
Omi1
15.12.04
✎
16:42
|
(8) на самом деле немного но хотелось узнать возможно ли вообще такое
если через SQL-DMO то там есть GetColumnString но для его работы нужен установленный клиент SQL |
|||
|
12
ДенисЧ
15.12.04
✎
16:57
|
(9) нне понимает, не понимает :-)))
АДО знает только базовые типы: числа, строки |
|||
|
13
Gloom
15.12.04
✎
16:59
|
(12)Где траву брал?
|
|||
|
14
ДенисЧ
15.12.04
✎
17:06
|
(13) Уже не помню. НО! помню, что стобы вернуть из запроса дату, пришлось извращаться с преобразованием.
ЗЫ. Если считаешь, что я не прав, приведи _работающий_ пример |
|||
|
15
Uho
15.12.04
✎
17:06
|
Кажись, вы разговариваете про разные вещи:
кто-то про тип поля datetime, кто-то про timestamp. Кстати, если тип поля FieldName1 - datatime, то (4) работает |
|||
|
16
Дяпти
15.12.04
✎
17:07
|
Наверна нада было просто время от datetime оторвать и усе бы заработало.
|
|||
|
17
Uho
15.12.04
✎
17:09
|
+15 datatime читать как datetime
|
|||
|
18
Gloom
15.12.04
✎
17:12
|
(14)Ты перепутал ADO и 1цэ.
(15)timestamp - в ADO это adDBTimeStamp, возвращается сервером в двоичном виде, поэтому 1цэ от него и колбасит... |
|||
|
19
Uho
15.12.04
✎
17:16
|
Перем CN,RS;
//******************************************* Функция ПреобразоватьДатуВ1С(ДатаSQL) Дата1С=Дата(Число(Лев(ДатаSQL,4)),Число(Сред(ДатаSQL,6,2)),Число(Сред(ДатаSQL,9,2))); Возврат Дата1С; КонецФункции //******************************************* Процедура РабочийПример() CN.Open(); QR = "select orderdate from orders"; RS = CN.Execute(QR); Если RS.EOF() = 0 Тогда ДатаВ1С=ПреобразоватьДатуВ1С(Строка(RS.Fields("orderdate").Value)); КонецЕсли; CN.Close(); КонецПроцедуры CN = СоздатьОбъект("ADODB.Connection"); RS = СоздатьОбъект("ADODB.RecordSet"); CN.ConnectionString = "Driver={SQL Server};Server=****;Database=northwind"; CN.ConnectionTimeOut = 15; CN.CursorLocation = 3; Повторяюсь: Если тип значения поля - datetime |
|||
|
20
Uho
15.12.04
✎
17:18
|
+19 Это к (14)
(18)Сам уже все проверил, действительно так. |
|||
|
21
Gloom
15.12.04
✎
17:29
|
Вот примерчик для ADO+timestamp+1цэ:
=============== cnn=CreateObject("adodb.connection"); cnn.open("TestCarlineDB"); rst=cnn.ехесute ( "set nocount on |create table #test_timestamp (f1 char(1), f2 timestamp) |insert into #test_timestamp values ('x', null) |select f1, f2, convert(varchar(25), cast(f2 as datetime),121) conv_f2 from #test_timestamp" ); Сообщить(rst.fields("conv_f2").value); |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |