![]() |
![]() |
![]() |
|
Как получить имя и тип параметра в запросе? | ☑ | ||
---|---|---|---|---|
0
Волков Денис
01.10.10
✎
13:28
|
Здравствуйте.
Не могу понять, как получить имя и тип параметра в запросе. Существую функция НайтиПараметры, как можно из нее вытащить сведения о параметре? Подскажите, пожалуйста. |
|||
1
Живой Ископаемый
01.10.10
✎
13:31
|
что сделать нужно скажи лучше
|
|||
2
чувак
01.10.10
✎
13:34
|
я тоже не понял
|
|||
3
Волков Денис
01.10.10
✎
13:37
|
Есть Запрос вида:
Запрос = ВЫБРАТЬ Банки.Наименование, Банки.Город, Банки.Адрес ИЗ Справочник.Банки КАК Банки ГДЕ Банки.Город = &Город Необходимо получить имя параметра(Город в данном случае) и его тип, чтобы дальше присвоить ему значение. Запрос.НайтиПараметры ... Как то вытащить имя параметра ... Запрос.УстановитьПараметр(Город, Москва) Пишется класс на делфи для работы с запросами в 1С. |
|||
4
Дарт Вейдер
01.10.10
✎
13:38
|
Для каждого Параметр из Запрос.НайтиПараметры() цикл
.... КонецЦикла |
|||
5
Дарт Вейдер
01.10.10
✎
13:39
|
(4) соотвественно в цикле
Параметр.Имя - имя Параметр.ТипЗначения - тип |
|||
6
Волков Денис
01.10.10
✎
13:40
|
Для каждого Параметр из Запрос.НайтиПараметры() цикл
.... КонецЦикла А в Делфи это никак(( |
|||
7
Дарт Вейдер
01.10.10
✎
13:41
|
в дельфи можно тупо пропарсить текст запроса
параметры начинаются с "&" найдешь имена тип - хз |
|||
8
Волков Денис
01.10.10
✎
13:42
|
в дельфи можно тупо пропарсить текст запроса
параметры начинаются с "&" Не не катит... синтаксис языка запросов 1С не стандартизован тильда может измениться и потом заново класс этот разрабатывать? |
|||
9
Дарт Вейдер
01.10.10
✎
13:43
|
(8) ты пошутил что-ли?
|
|||
10
sash-ml
01.10.10
✎
13:44
|
(6) почему никак?
|
|||
11
Волков Денис
01.10.10
✎
13:44
|
В смысле?
|
|||
12
Волков Денис
01.10.10
✎
13:46
|
(10) А как?
|
|||
13
Дарт Вейдер
01.10.10
✎
13:47
|
что ты передаешь в дельфи вообще?
|
|||
14
Evg-lylyk
01.10.10
✎
13:48
|
Парсить это проблемно. Метод НайтиПараметры автоматом определяет типы (если нужны типы тогда парсить весь запрос).
|
|||
15
Волков Денис
01.10.10
✎
13:51
|
В делфи такая конструкция:
Ole1C := CreateOleObject(Edit1.Text); Resopen := Ole1C.Connect(Edit2.Text); query := Ole1C.NewObject('Запрос'); query.Text:='ВЫБРАТЬ Банки.Наименование, Банки.Город, Банки.Адрес ИЗ Справочник.Банки КАК Банки ГДЕ Банки.Город = &Город'; vv := query.FindParameters; А вот как дальше вытаскивать имена и типы я не знаю... В класс должен приходить текст запроса, он его обрабатывает, выводить список параметров и просить подставить значения к ним, дальше выполнить этот запрос и вернуть результат. |
|||
16
Дарт Вейдер
01.10.10
✎
13:53
|
попробуй
vv.Name vv.ValueType |
|||
17
sash-ml
01.10.10
✎
13:53
|
for each p from vv do begin
p.name; p.ValueType; end; |
|||
18
Волков Денис
01.10.10
✎
13:56
|
(1:) пробовал... не помогло
(17) p какого типа? Variant? |
|||
19
Дарт Вейдер
01.10.10
✎
13:56
|
(16)
for i:=1 to vv.Count do begin p:=vv[i]; p.Name; p.ValueType; end; |
|||
20
sash-ml
01.10.10
✎
13:58
|
(18) у тебя отладчик в делфях украли? или табло поломалось?
|
|||
21
Дарт Вейдер
01.10.10
✎
13:58
|
(18) попробуй vv[i].Name
чтобы с типами переменных не париться |
|||
22
Волков Денис
01.10.10
✎
14:01
|
vv[i] - не работает пробовал. Ошибка: Variant не является массивом.
|
|||
23
Дарт Вейдер
01.10.10
✎
14:09
|
(22) а какое значение вообще в vv возвращается после
vv := query.FindParameters; ? |
|||
24
Волков Денис
01.10.10
✎
14:13
|
(23) Возвращается указатель на ячейку
|
|||
25
Волков Денис
01.10.10
✎
14:15
|
с vv работает:
vv.Count и vv.Find А вот как оттуда имя достать... Есть еще идеи??? Уже который день с этим мучаюсь... |
|||
26
sash-ml
01.10.10
✎
14:20
|
Имена можно выпарсить по "&"
|
|||
27
Волков Денис
01.10.10
✎
14:22
|
(26) Можно, но этот метод не подходит...(((
|
|||
28
Волков Денис
01.10.10
✎
14:25
|
У типа возвращаемого функцией НайтиПараметры есть свойство <Имя параметра> к нему можно как-то обратиться?
|
|||
29
МихаилМ
01.10.10
✎
14:28
|
(28)
нет. мучайтесь до просветления, коли парсинг запрещает религия. |
|||
30
Дарт Вейдер
01.10.10
✎
14:29
|
(28) НайтиПараметры возвращает список параметров
тебе нужно выбрать элементы списка, тогда Элемент.<ИмяПараметра> |
|||
31
Дарт Вейдер
01.10.10
✎
14:29
|
лучше домучай vv, ты на правильном пути
что вернет VarType(vv) ? |
|||
32
Волков Денис
01.10.10
✎
14:30
|
(29) т.е. это вообще невозможно сделать?
Тогда у меня еще есть вопросик. Обрабатываю результаты запроса в следующем виде for i := 0 to ColCount - 1 do ArrRes[i,0] := OLEQueryRes.Columns.Get(i).Name; i := 0; while i < ColCount do begin OLEDataColumns := OLEQueryRes.UnloadColumn(i); j := 1; while j < OLEDataColumns.UBound do begin StrTmp := OLEDataColumns.Get(j - 1); if StrTmp <> NULL then ArrRes[i, j] := StrTmp else ArrRes[i, j] := ''; inc(j); end; inc(i); end; Работает достаточно долго, не подскажите почему? |
|||
33
Волков Денис
01.10.10
✎
14:37
|
(31) Вернула NULL
|
|||
34
hhhh
01.10.10
✎
14:59
|
(33) может vv.items? или vv.item? Ты ведь на Дельфи программируешь, должен в этом разбираться.
|
|||
35
Волков Денис
01.10.10
✎
15:12
|
(34) Вообще с делфи я начинал потом перешел на PHP а потом вообще достаточно долго ничего не кодил...((( Поэтому сейчас сижу и вспоминаю... + 1С изучаю.)))
Щас попробую |
|||
36
Волков Денис
01.10.10
✎
15:16
|
(33) Неа не работает...
|
|||
37
Дарт Вейдер
01.10.10
✎
16:08
|
(36) в общем не получится так получить параметры.. смирись
либо парсить запрос, либо.. есть еще один вариант решения, но не универсальный.. требует внесения изменений в конфигурацию 1С |
|||
38
Волков Денис
01.10.10
✎
16:37
|
(37) не в конфигурацию вносить изменения не надо. Ну чтож ладно буду парсить, раз другого решения нет...
Тогда у меня другой вопрос: Как в выборке переходить на следующую строку? Choose := Query.Execute.Choose; for i:=0 Choose.count - 1 do Choose.get(i); //проходит по столбцам а дальше пишет выход за область данных Пробовал через Выгрузить, но там получается что-то долго все это происходит... |
|||
39
Волков Денис
01.10.10
✎
16:38
|
Спасибо Всем!)))
|
|||
40
Дарт Вейдер
01.10.10
✎
16:46
|
while Choose.Next do
Value = Choose.<ИмяПеременнойЗапроса>; end; а вообще посмотри как в 1С с запросами работают, там все то же самое будет |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |