Как правильно в SQL-запросе
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
-> Программирование отчетов в БЭСТ-5

#1: Как правильно в SQL-запросе Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 24 Oct 2007 12:31
    —
Я формирую в плагине временный файл в каталоге для временных файлов, например GlobalTmpPath+"tmpopl.dbf"
Как правильно написать select по этому файлу в SQL-запросе, заданном в форме?
select * from ? as fi

#2:  Author: dshlykovLocation: Дмитрий Шлыков PostPosted: 25 Oct 2007 10:09
    —
Добрый день!
Объект Запрос применяется только к таблицам находящимся в папке предприятия. Если необходимо обратится к другим таблицам, то необходимо использовать источники Foxpro (для БЭСТ-5) или WinReport (для БЭСТ-4+).

#3:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 25 Oct 2007 11:01
    —
Видно, что-то я не так сказала и меня не поняли
Я из накладной БЭСТ-4 применяю Winreport, чтобы вызвать форму, в форме строю свой источник (TrfADSQuery), но хочу обратиться в свойстве SQL не к файлу из каталога sclad, а к временному файлу. Это что, невозможно? Я знаю путь и имя этого файла (различны для разных пользователей) и могла бы передать их в форму, но не знаю как. Передавать временый файл как параметр Winreport не хотелось бы (так как портятся blob-поля с картинками, см http://www.bestnet.ru/club/phpBB/viewtopic.php?t=8659&start=15&sid=aa6becfdd91d387809458f7dbc7b05ec)

Когда я этот временный файл перекладываю в папку sclad, все работает по select * from [sclad\tmpopl] as fi. Но разве нельзя вместо этого [sclad\tmpopl] задать другой реальный путь типа c:\temp\tmpopl, может быть передать его ИМЯ в источнике - втором параметре WinReport или еще как-то? Проблема не в том, чтобы сформировать временный файл не в той папке, а в том, что у каждого пользователя свой временный файл с другим именем

Вообще, можно ли использовать переменные Дизайнера в свойстве SQL своего источника TrfADSQuery?

Временный файл в моем случае - список картинок к товарам накладной (вариант а) или просто список товаров накладной для вытаскивания картинок из большого файла по join. Использовать прямо [sclad\mdocm] у меня не получается, т к вылезают все накладные, а не только моя. Я обычно работала через временный файл

#4:  Author: Дениска PostPosted: 25 Oct 2007 14:02
    —
Попробуйте использовать where для доступа к sclad\mdocm

#5:  Author: dshlykovLocation: Дмитрий Шлыков PostPosted: 25 Oct 2007 14:19
    —
Марина wrote:
Передавать временый файл как параметр Winreport не хотелось бы (так как портятся blob-поля с картинками
Именно, это я Вам и предлогал. Но раз это не подходит, то необходимо делать так как Вы описали ниже:
Марина wrote:
Когда я этот временный файл перекладываю в папку sclad, все работает по select * from [sclad\tmpopl] as fi. Но разве нельзя вместо этого [sclad\tmpopl] задать другой реальный путь типа c:\temp\tmpopl
Нет нельзя так как SQL обращаются только к базе данных БЭСТ-4+.
Марина wrote:
Вообще, можно ли использовать переменные Дизайнера в свойстве SQL своего источника TrfADSQuery?
Нет использовать переменные нельзя. Но этот вопрос можно решить по другому: сформировать текст запроса в переменной (с использованием переменных) и задать его в свойство SQL.
Code:
cSql := 'SELECT .....';
<имя_запроса>.SQL := cSql;
<имя_запроса>.Open;

Марина wrote:
Временный файл в моем случае - список картинок к товарам накладной (вариант а) или просто список товаров накладной для вытаскивания картинок из большого файла по join. Использовать прямо [sclad\mdocm] у меня не получается, т к вылезают все накладные, а не только моя. Я обычно работала через временный файл
Для решения этого вопросы Вам необходимо в источнике передать реквизиты печатаемого документа и сделать фильтр в источнике.

#6:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 25 Oct 2007 14:21
    —
Дениска wrote:
Попробуйте использовать where для доступа к sclad\mdocm

Но опять же в этом where надо задать хотя бы numdoc=, а к DataSet1 обращаться нельзя. Как же бы

#7:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 25 Oct 2007 14:41
    —
dshlykov wrote:
Но этот вопрос можно решить по другому: сформировать текст запроса в переменной (с использованием переменных) и задать его в свойство SQL.
Code:
cSql := 'SELECT .....';
<имя_запроса>.SQL := cSql;
<имя_запроса>.Open;


В какую секцию или форму я должна затолкать этот текст? Пробовала ставить в Report Title в OnBeforPrint, но это присваивание не работает, а работает то свойство SQL, которое было первоначально задано в инспекторе объектов при описании запроса.

#8:  Author: dshlykovLocation: Дмитрий Шлыков PostPosted: 25 Oct 2007 14:43
    —
Марина wrote:
Но опять же в этом where надо задать хотя бы numdoc=, а к DataSet1 обращаться нельзя. Как же быть?
Это решается через параметры запроса
Code:
numdoc=:p1
. Далее заходите в свойство Params устанавливаете тип параметра и его значение. Значение параметра можно установить и в коде:
Code:
<имя_запрсоса>.Params['<имя_параметра>'] := <значение>;

Марина wrote:
В какую секцию или форму я должна затолкать этот текст? Пробовала ставить в Report Title в OnBeforPrint, но это присваивание не работает, а работает то свойство SQL, которое было первоначально задано в инспекторе объектов при описании запроса.
Обычно все операции с источниками делаются на карточке запроса. Или в событии Onclick кнопки Выполнить или в событии OnActivate в карточке запроса (если пользователь не задает параметры отчета). Проверьте свойство Active запроса, оно должно иметь значение False так как Вы будете изменять его параметры. Если значение стоит True запрос перерасчитыватся не будет!

Last edited by dshlykov on 25 Oct 2007 14:49; edited 1 time in total

#9:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 25 Oct 2007 14:47
    —
dshlykov wrote:
Для решения этого вопросы Вам необходимо в источнике передать реквизиты печатаемого документа и сделать фильтр в источнике.

Передать реквизиты в источнике - это передача через первый параметр WinReport в Dataset1 ? или как? (БЭСТ-4) Как правильно поставить выражение в фильтре?
select * from [sclad\mdocm] as nak
Выражение в фильтре nak.numdoc=[DialogForm.DataSet1."Номер_док"] не работает. Пробовала кругом добавлять квадратные скобки, ничего не получилось, ругается на филь

#10:  Author: dshlykovLocation: Дмитрий Шлыков PostPosted: 25 Oct 2007 14:51
    —
Марина wrote:
Передать реквизиты в источнике - это передача через первый параметр WinReport в Dataset1 ?
Да так.

Марина wrote:
(БЭСТ-4) Как правильно поставить выражение в фильтре?
Смотрите предыдущее сообщение где я описал работу с параметрам

#11:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 25 Oct 2007 14:56
    —
а где я должна написать numdoc=:p1?

#12:  Author: dshlykovLocation: Дмитрий Шлыков PostPosted: 25 Oct 2007 15:02
    —
Марина wrote:
а где я должна написать numdoc=:p1?

В тексте запроса:
Code:
select * from [sclad\mdocm] as nak Where nak.numdoc=:p1

#13:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 25 Oct 2007 15:04
    —
dshlykov wrote:
Марина wrote:
В какую секцию или форму я должна затолкать этот текст? Пробовала ставить в Report Title в OnBeforPrint, но это присваивание не работает, а работает то свойство SQL, которое было первоначально задано в инспекторе объектов при описании запроса.
Обычно все операции с источниками делаются на карточке запроса. Или в событии Onclick кнопки Выполнить или в событии OnActivate в карточке запроса (если пользователь не задает параметры отчета). Проверьте свойство Active запроса, оно должно иметь значение False так как Вы будете изменять его параметры. Если значение стоит True запрос перерасчитыватся не будет!

Пробовала и в событии Onclick кнопки Выполнить, и в событии OnActivate в карточке запроса, запрос не изменяется! Свойство Active запроса стоит False.

#14:  Author: dshlykovLocation: Дмитрий Шлыков PostPosted: 25 Oct 2007 15:13
    —
Проверьте значение свойства Active перед заполнением свойства SQL:
Code:
MESSAGEBOX(<имя запроса>.Active);
Если значение будет равно true, то значит запрос открывается программно - это необходимо исправи

#15:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 25 Oct 2007 15:56
    —
Code:

 cSql:='select img.nnum, img.image, img.partia'+;
        ' from [sclad\spartimg] as img'+;
        ' inner join '+[DialogForm.DataSet1."finame"]+' as tmp'+;
        ' on tmp.nnum=img.nnum and tmp.partia=img.partia';
  MESSAGEBOX(Query1.Active);
  DialogForm.Query1.Sql:=cSql;
  DialogForm.Query1.Open;

Код в свойстве OnActivate кнопки. MESSAGEBOX ничего не сказал, как будто не сработал!



-> Программирование отчетов в БЭСТ-5


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group