|
ADODB текст запроса из файла | ☑ | ||
---|---|---|---|---|
0
vbh
16.05.12
✎
09:07
|
можно ли исполнить sql запрос из файла, например "c:\zapros.sql"
т.е. не использовать Command.CommandText ="текст запроса" Command.Execute(); а что-нибудь типа RS=Новый COMОбъект("ADODB.Recordset"); RS.Open("C:\zapros.sql",Конект,2,3); задача исполнить запрос из файла c:\zapros.sql и загрузить его в ТЗ |
|||
1
shuhard
16.05.12
✎
09:14
|
(0) нет
|
|||
2
Wobland
16.05.12
✎
09:17
|
Опен(ТекстДок.ПолучитьТекст()) тогда уж
|
|||
3
vbh
16.05.12
✎
09:32
|
(2) работает но 1ска вылетает (
|
|||
4
shuhard
16.05.12
✎
09:33
|
(3) текст запроса в студию
|
|||
5
vbh
16.05.12
✎
09:35
|
SELECT * from
(select SS.SRVTYPEID*ST.SRVTYPEID AS "SRVTYPEID", SS.UNAME||ST.UNAME AS "UNAME", A.ID, AI.ANAME AS ADVCOMMENT, AI.CONTRACTNUM, billing_applications.stat_summ_sf(A.ID,S.SRVTYPEID,:SD,:ED, SS.SRVTYPEID) as SUMM, AI.SFNEED, billing_applications.Stat_Quantity_SF(A.ID,S.SRVTYPEID,:SD,:ED, SS.SRVTYPEID) as AMOUTH, AI.POSTDISPACH, (select t.SFNUM from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCNUM, (select t.tdate from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCDATE from Accounts A, Accountsinfo AI, Servicetypes ST, (select distinct S.ID,S.SRVTYPEID from services S) S,(select '' AS "UNAME",1 AS "SRVTYPEID" from dual /*union select '????. ?????: ',-1 from dual*/) SS where A.ID=AI.ID AND S.ID=A.ID AND A.DELETED = 'N' AND A.DFLAG='U' AND S.SRVTYPEID=ST.SRVTYPEID union all select -1*ST.SRVTYPEID AS "SRVTYPEID", '????. ?????: '||ST.UNAME AS "UNAME", A.ID, AI.ANAME AS ADVCOMMENT, AI.CONTRACTNUM, P.SUMM as SUMM, AI.SFNEED, P.QUANTITY as AMOUTH, AI.POSTDISPACH, (select t.SFNUM from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCNUM, (select t.tdate from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCDATE from Accounts A, Accountsinfo AI, Servicetypes ST, services SS, payments P --(select distinct S.ID,S.SRVTYPEID from ) S,(/*select '' AS "UNAME",1 AS "SRVTYPEID" from dual union*/ select '????. ?????: ' AS "UNAME",-1 AS "SRVTYPEID" from dual) SS where A.ID=AI.ID AND SS.ID=A.ID AND A.DELETED = 'N' AND A.DFLAG='U' AND P.PDATE between :SD AND :ED) |
|||
6
vbh
16.05.12
✎
09:40
|
в жабе запрос исполняется на ура
|
|||
7
Wobland
16.05.12
✎
09:41
|
'????. ?????: '||ST.UNAME AS "UNAME",
явно не текст запроса |
|||
8
vbh
16.05.12
✎
09:42
|
(7) да, там на русском, скопировалось коряво, сейчас подправлю
|
|||
9
vbh
16.05.12
✎
09:43
|
SELECT * from
(select SS.SRVTYPEID*ST.SRVTYPEID AS "SRVTYPEID", SS.UNAME||ST.UNAME AS "UNAME", A.ID, AI.ANAME AS ADVCOMMENT, AI.CONTRACTNUM, billing_applications.stat_summ_sf(A.ID,S.SRVTYPEID,:SD,:ED, SS.SRVTYPEID) as SUMM, AI.SFNEED, billing_applications.Stat_Quantity_SF(A.ID,S.SRVTYPEID,:SD,:ED, SS.SRVTYPEID) as AMOUTH, AI.POSTDISPACH, (select t.SFNUM from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCNUM, (select t.tdate from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCDATE from Accounts A, Accountsinfo AI, Servicetypes ST, (select distinct S.ID,S.SRVTYPEID from services S) S,(select '' AS "UNAME",1 AS "SRVTYPEID" from dual /*union select 'Абон. плата: ',-1 from dual*/) SS where A.ID=AI.ID AND S.ID=A.ID AND A.DELETED = 'N' AND A.DFLAG='U' AND S.SRVTYPEID=ST.SRVTYPEID union all select -1*ST.SRVTYPEID AS "SRVTYPEID", 'Абон. плата: '||ST.UNAME AS "UNAME", A.ID, AI.ANAME AS ADVCOMMENT, AI.CONTRACTNUM, P.SUMM as SUMM, AI.SFNEED, P.QUANTITY as AMOUTH, AI.POSTDISPACH, (select t.SFNUM from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCNUM, (select t.tdate from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCDATE from Accounts A, Accountsinfo AI, Servicetypes ST, services SS, payments P --(select distinct S.ID,S.SRVTYPEID from ) S,(/*select '' AS "UNAME",1 AS "SRVTYPEID" from dual union*/ select 'Абон. плата: ' AS "UNAME",-1 AS "SRVTYPEID" from dual) SS where A.ID=AI.ID AND SS.ID=A.ID AND A.DELETED = 'N' AND A.DFLAG='U' AND P.PDATE between :SD AND :ED) |
|||
10
Wobland
16.05.12
✎
09:43
|
(8) AS "UNAME"
что за кавычки в запросе? |
|||
11
vbh
16.05.12
✎
09:46
|
(10) согласен для 1с-ки они не приемлимы, но оракл их глотает на ура. Сейчас попробую без кавычек
|
|||
12
vbh
16.05.12
✎
09:51
|
не помогло, 1с-ка по-прежнему вылетает
запрос без кавычек SELECT * from (select SS.SRVTYPEID*ST.SRVTYPEID AS SRVTYPEID, SS.UNAME||ST.UNAME AS UNAME, A.ID, AI.ANAME AS ADVCOMMENT, AI.CONTRACTNUM, billing_applications.stat_summ_sf(A.ID,S.SRVTYPEID,:SD,:ED, SS.SRVTYPEID) as SUMM, -- decode(SS.SRVTYPEID,1,billing_applications.Stat_Duration(A.ID,S.SRVTYPEID,:SD,:ED),-1,0,NULL)/decode(ST.SRVTYPEID,1,60,2,60,3,60,4,60,5,1024*1024,6,60,1) as DUR, -- decode(ST.SRVTYPEID*ST.SRVTYPEID,1,'мин',2,'мин',3,'мин',4,'мин',5,'мб',6,'мин','шт') as DUR_UNIT, AI.SFNEED, billing_applications.Stat_Quantity_SF(A.ID,S.SRVTYPEID,:SD,:ED, SS.SRVTYPEID) as AMOUTH, AI.POSTDISPACH, (select t.SFNUM from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCNUM, (select t.tdate from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCDATE from Accounts A, Accountsinfo AI, Servicetypes ST, (select distinct S.ID,S.SRVTYPEID from services S) S,(select '' AS UNAME,1 AS SRVTYPEID from dual /*union select 'Абон. плата: ',-1 from dual*/) SS where A.ID=AI.ID AND S.ID=A.ID AND A.DELETED = 'N' AND A.DFLAG='U' AND S.SRVTYPEID=ST.SRVTYPEID union all select -1*ST.SRVTYPEID AS SRVTYPEID, 'Абон. плата: '||ST.UNAME AS UNAME, A.ID, AI.ANAME AS ADVCOMMENT, AI.CONTRACTNUM, P.SUMM as SUMM, -- 0 as DUR, -- 'шт' as DUR_UNIT, AI.SFNEED, P.QUANTITY as AMOUTH, AI.POSTDISPACH, (select t.SFNUM from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCNUM, (select t.tdate from transactions t where t.id = a.id and t.tdate = (select max(t.tdate) from transactions t where t.id = a.id) and t.SFNUM is not null and rownum=1) as DOCDATE from Accounts A, Accountsinfo AI, Servicetypes ST, services SS, payments P --(select distinct S.ID,S.SRVTYPEID from ) S,(/*select '' AS UNAME,1 AS SRVTYPEID from dual union*/ select 'Абон. плата: ' AS UNAME,-1 AS SRVTYPEID from dual) SS where A.ID=AI.ID AND SS.ID=A.ID AND A.DELETED = 'N' AND A.DFLAG='U' AND P.PDATE between :SD AND :ED) |
|||
13
vbh
16.05.12
✎
10:39
|
видимо на параметрах даты глючит
between :SD AND :ED |
|||
14
vbh
16.05.12
✎
11:09
|
переделал параметры всё заработало
на (0) может кому пригодится... ТекстДок = новый ТекстовыйДокумент; ТекстДок.Прочитать("C:\zapros.sql"); запрос=ТекстДок.ПолучитьТекст(); Recordset=Новый COMОбъект("ADODB.Recordset"); ТЗ=Recordset.Open(запрос,Конект,2,3); Если НЕ Recordset.EOF() Тогда Recordset.MoveFirst(); Пока RecordSet.EOF=0 Цикл Сообщить(RecordSet.Fields.Item("DOCNUM").value); RecordSet.MoveNext(); КонецЦикла; КонецЕсли; Recordset.Close(); |
|||
15
vbh
16.05.12
✎
11:10
|
Wobland,shuhard - Спасибо!
|
|||
16
Wobland
16.05.12
✎
11:12
|
(15) двоеточия мешались? ну я всё не глядел, больно страшно. мог бы после кавычек сразу догадаться ;)
|
|||
17
vbh
16.05.12
✎
11:12
|
(16) вот я и догадался после кавычек )))
|
|||
18
shuhard
16.05.12
✎
11:23
|
(14) Если НЕ Recordset.EOF() Тогда
Recordset.MoveFirst(); может Если НЕ Recordset.BOF() Тогда |
|||
19
vbh
17.05.12
✎
06:30
|
(18) да вроде верно "current record position is after the last record"
|
|||
20
vbh
17.05.12
✎
06:39
|
(19) блин...опять не туда смотрю
верно. если не 1я запись то на первую. shuhard спасибо. |
|||
21
Wobland
17.05.12
✎
06:47
|
я вижу тут люди знают больше меня.. скажите уж по пути, что не так? после открытия base.eof сразу истина.
ado.Open("DRIVER={Microsoft Visual FoxPro Driver}; SourceType=DBF; SourceDb="+Путь); base.open("select price0 from 00002", ado); |
|||
22
vbh
17.05.12
✎
08:35
|
не буду спорить, не силён в ADODB
(0)задача исполнить запрос из файла c:\zapros.sql и загрузить его в ТЗ как то так получилось Конект = Новый ComОбъект("ADODB.Connection"); СтрокаСоединения3 ="Provider=MSDAORA.1;Password=1C1C1C;User ID=1C;Data Source=dianet;Persist Security Info=True"; Конект.ConnectionString = СтрокаСоединения3; Попытка Конект.Open(); Исключение Сообщить("Подключение к шине не удалось!"); Возврат; КонецПопытки; ТекстДок = новый ТекстовыйДокумент; //ТекстДок.Прочитать("C:\zapros.sql"); ТекстДок.Прочитать("C:\zapros2.sql"); запрос=ТекстДок.ПолучитьТекст(); ТЗ=Новый ТаблицаЗначений; Recordset=Новый COMОбъект("ADODB.Recordset"); Recordset.Open(запрос,Конект,2,3); Если RecordSet.Fields.Count>0 Тогда Для i=0 По RecordSet.Fields.Count-1 Цикл ТЗ.Колонки.Добавить(RecordSet.Fields(i).name()); КонецЦикла; КонецЕсли; Если НЕ Recordset.BOF() Тогда Recordset.MoveFirst(); Пока RecordSet.EOF=0 Цикл СтрТЗ=ТЗ.Добавить(); Для i=0 По RecordSet.Fields.Count-1 Цикл СтрТЗ.Установить(i,RecordSet.Fields.Item(RecordSet.Fields(i).name()).value); КонецЦикла; RecordSet.MoveNext(); КонецЦикла; КонецЕсли; ТЗ.ВыбратьСтроку(); Сообщить(ТЗ.Количество()); Recordset.Close(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |