|
v7: Вытягивание данных из SQL запроса | ☑ | ||
---|---|---|---|---|
0
ВежливаяТварь
24.09.12
✎
12:57
|
Есть код который вытягивает данные из MSSQl. проблема в том что при вытягивании программа спотыкается на одной колонке в которой хранится число и выдает ошибку "Тип переменой не поддерживается". Сам код: ТекстЗапроса="SET NOCOUNT ON exec [dbo].[rpt_SalOutList_Desktop] @datefrom= '"+ДатаНачалаПроверки+"', @dateto='"+ДатаКонцаПроверки+"'";
Cmd.Commandtext=СокрЛП(ТекстЗапроса); Попытка Rs.ActiveConnection=Соединение; Rs=Cmd.Execute(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КоличествоПолей=Rs.Fields.Count(); Попытка for i = 0 to RS.Fields.Count-1 do //Создание и добавление колонок ColumnName = RS.Fields.Item(i).Name; ColumnName=СтрЗаменить(ColumnName,",",""); ColumnName=СтрЗаменить(ColumnName," ",""); ColumnName=СтрЗаменить(ColumnName,".",""); ColumnName=СтрЗаменить(ColumnName,"-",""); ТаблицаЗагрузки.НоваяКолонка(ColumnName); enddo; СтрокаТЗ=1; while RS.EOF = 0 do // Заполнение созданной таблицы ТаблицаЗагрузки.НоваяСтрока(); for НомерСтолбца = 1 По RS.Fields.Count do ТаблицаЗагрузки.УстановитьЗначение(СтрокаТЗ,НомерСтолбца,Строка(RS.Fields(НомерСтолбца-1).Value)); enddo; RS.MoveNext(); СтрокаТз=СтрокаТЗ+1 enddo; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Rs.Close(); Соединение.Close(); ТаблицаЗагрузки.ВыбратьСтроку(); Может нужно не с помощью value эту колонку вытягивать? |
|||
1
ДенисЧ
24.09.12
✎
12:58
|
а какой там тип? Если что, CAST'уй в строку.
|
|||
2
ВежливаяТварь
24.09.12
✎
12:59
|
(1) визуально тип число.
|
|||
3
Jaap Vduul
24.09.12
✎
13:02
|
numeric 7,7 не умеет
|
|||
4
ВежливаяТварь
24.09.12
✎
13:02
|
(1) Прочистал про CAST. не совсем понимаю как его вызвать из 1c
|
|||
5
ВежливаяТварь
24.09.12
✎
13:02
|
(3) А как вытащить?
|
|||
6
Jaap Vduul
24.09.12
✎
13:04
|
(4)Результат ХП - во временную таблицу и уже к ней запрос с преобразованием numeric во что-то, перевариваемое 7,7
|
|||
7
ВежливаяТварь
24.09.12
✎
13:04
|
(1) CAST вставить в сам запроса не получится так как я вызываю уже готовую процедуру.
|
|||
8
Mikeware
24.09.12
✎
13:10
|
(7) вызывай ее внутри запроса...
|
|||
9
ВежливаяТварь
24.09.12
✎
13:12
|
(8) ТекстЗапроса="SET NOCOUNT ON exec [dbo].[rpt_SalOutList_Desktop] @datefrom= '"+ДатаНачалаПроверки+"', @dateto='"+ДатаКонцаПроверки+"'"; Вы не подскажите как её сюда добавить?
|
|||
10
Jaap Vduul
24.09.12
✎
13:14
|
(9)
Если c t-sql не дружишь, можно рекордсет в виде строки получить (getstring()), а потом распарсить |
|||
11
ВежливаяТварь
24.09.12
✎
13:15
|
(10) Понял. Сейчас попробую. Спасибо.
|
|||
12
ВежливаяТварь
24.09.12
✎
13:23
|
При попытке сделать так RS.GetString(НомерСтолбца-1) выдаёт это
ADODB.Recordset: Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом. |
|||
13
Jaap Vduul
24.09.12
✎
13:24
|
А это зачем?
НомерСтолбца-1 |
|||
14
ВежливаяТварь
24.09.12
✎
13:27
|
(13) А я понял мы получаем всю строку целиком все колонки в одной строке а потом уже разгребаем?
|
|||
15
ВежливаяТварь
24.09.12
✎
13:40
|
(13) Да получилось. Но если честно не очень нравится вариант разгребать всю строку, оставлю его как самый последний. Попробую подружится с t-sql. Скажите, а если передавать в тексте запроса не самоназвание процедуры а то, что она делает то можно будет в неё добавить CAST в тип данных строка.
|
|||
16
Jaap Vduul
24.09.12
✎
13:44
|
(15) см. (6)
Т.е. create table ... insert into ... exec ... select ... from table |
|||
17
ВежливаяТварь
24.09.12
✎
14:08
|
(16) Понял сейчас попробую
|
|||
18
Mikeware
24.09.12
✎
14:11
|
(16) временную можно заранее и не создавать....
(15) если можешь получить текст хранимки - естественно, сможешь. |
|||
19
ВежливаяТварь
24.09.12
✎
15:59
|
Получилось вытянуть текст запроса, ни как не могу понять куда нужно вставить CAST, что бы dbo.tblSalOutH.TotalSum читалось.
DECLARE @datefrom datetime SET @datefrom = '20120901' DECLARE @dateto datetime SET @dateto = '20120924' BEGIN set datefirst 1 set dateformat mdy select dbo.tblSalOutH.Date, dbo.tblMerchandisers.MerchName, dbo.tblSalOutH.Invoice_No, dbo.tblOutletOrderH.OlOrderDate, dbo.tblOutletOrderH.OrderNo, dbo.tblSalOutH.TotalSum, dbo.tblDocTypes.DocTypeName from dbo.tblSalOutH left join dbo.tblMerchandisers on (dbo.tblMerchandisers.Merch_id = dbo.tblSalOutH.Merch_id) left join dbo.tblOutletOrderH on (dbo.tblOutletOrderH.OrderNo = dbo.tblSalOutH.OrderNo) inner join dbo.tblDocTypes on (dbo.tblDocTypes.Doc_Type = dbo.tblSalOutH.Doc_Type) where convert (datetime, convert (varchar, dbo.tblSalOutH.date, 104), 104) between @datefrom and @dateto and dbo.tblSalOutH.[Status] = 2 and dbo.tblSalOutH.Doc_Type in (2, 3, 4, 6) order by Date, dbo.tblMerchandisers.MerchName END |
|||
20
ВежливаяТварь
24.09.12
✎
16:08
|
И ещё вопрос когда я вот так пытаюсь передать запрос
ТекстЗапроса="SET NOCOUNT ON |DECLARE @datefrom datetime |SET @datefrom ='"+ДатаНачалаПроверки+"' |DECLARE @dateto datetime |SET @dateto = '"+ДатаКонцаПроверки+"' |BEGIN ||set datefirst 1 |set dateformat mdy |select | dbo.tblSalOutH.Date, | dbo.tblMerchandisers.MerchName, | dbo.tblSalOutH.Invoice_No, | dbo.tblOutletOrderH.OlOrderDate, | dbo.tblOutletOrderH.OrderNo, | dbo.tblSalOutH.TotalSum, | dbo.tblDocTypes.DocTypeName |from | dbo.tblSalOutH |left join dbo.tblMerchandisers on (dbo.tblMerchandisers.Merch_id = dbo.tblSalOutH.Merch_id) |left join dbo.tblOutletOrderH on (dbo.tblOutletOrderH.OrderNo = dbo.tblSalOutH.OrderNo) |inner join dbo.tblDocTypes on (dbo.tblDocTypes.Doc_Type = dbo.tblSalOutH.Doc_Type) |where | convert (datetime, convert (varchar, dbo.tblSalOutH.date, 104), 104) between @datefrom and @dateto | and | dbo.tblSalOutH.[Status] = 2 | and | dbo.tblSalOutH.Doc_Type in (2, 3, 4, 6) |order by | Date, | dbo.tblMerchandisers.MerchName END"; выдаёт вот такую ошибку Microsoft OLE DB Provider for SQL Server: Неправильный синтаксис около конструкции "|". |
|||
21
ВежливаяТварь
24.09.12
✎
16:11
|
(20) Прошу прощения, нашёл
|
|||
22
vmv
24.09.12
✎
16:14
|
(0) скорее это проблема источника ОДБС, вернее драйвера.
до последнего релиза платформы была схожая проблема с дробной частью под Оракл, полгода ее удавалось обходить путем установки костыльного драйвера. |
|||
23
ВежливаяТварь
24.09.12
✎
16:26
|
(22) Учту. Спасибо.
|
|||
24
ВежливаяТварь
24.09.12
✎
17:01
|
Получилось. Может кому -нибудь пригодится:
ТекстЗапроса="SET NOCOUNT ON |DECLARE @datefrom datetime |SET @datefrom = '"+ДатаНачалаПроверки+"' |DECLARE @dateto datetime |SET @dateto = '"+ДатаКонцаПроверки+"' | |BEGIN |set datefirst 1 |set dateformat mdy | |select | dbo.tblSalOutH.Date, | dbo.tblMerchandisers.MerchName, | dbo.tblSalOutH.Invoice_No, | CAST (dbo.tblOutletOrderH.OlOrderDate AS Char(20)) As OlOrderDate, | CAST (dbo.tblOutletOrderH.OrderNo AS Char(15)) As OrderNo, | CAST (dbo.tblSalOutH.TotalSum AS float) As TotalSum, | dbo.tblDocTypes.DocTypeName |from | dbo.tblSalOutH |left join dbo.tblMerchandisers on (dbo.tblMerchandisers.Merch_id = dbo.tblSalOutH.Merch_id) |left join dbo.tblOutletOrderH on (dbo.tblOutletOrderH.OrderNo = dbo.tblSalOutH.OrderNo) |inner join dbo.tblDocTypes on (dbo.tblDocTypes.Doc_Type = dbo.tblSalOutH.Doc_Type) |where | convert (datetime, convert (varchar, dbo.tblSalOutH.date, 104), 104) between @datefrom and @dateto | and dbo.tblSalOutH.[Status] = 2 and dbo.tblSalOutH.Doc_Type in (2, 3, 4, 6) |order by | Date, dbo.tblMerchandisers.MerchName |END"; Всем огромное спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |