Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Как правильно в SQL-запросе
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование отчетов в БЭСТ-5
View previous topic :: View next topic  
Author Message
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 24 Oct 2007 12:31    Post subject: Как правильно в SQL-запросе Reply with quote

Я формирую в плагине временный файл в каталоге для временных файлов, например GlobalTmpPath+"tmpopl.dbf"
Как правильно написать select по этому файлу в SQL-запросе, заданном в форме?
select * from ? as fi
Back to top
View user's profile Send private message
dshlykov



Joined: 02 Aug 2005
Posts: 172
Location: Дмитрий Шлыков
Occupation: Компания "БЭСТ"
Interests: Москва

PostPosted: 25 Oct 2007 10:09    Post subject: Reply with quote

Добрый день!
Объект Запрос применяется только к таблицам находящимся в папке предприятия. Если необходимо обратится к другим таблицам, то необходимо использовать источники Foxpro (для БЭСТ-5) или WinReport (для БЭСТ-4+).
_________________
С уважением, Дмитрий Шлыков
Компания "БЭСТ"
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 25 Oct 2007 11:01    Post subject: Reply with quote

Видно, что-то я не так сказала и меня не поняли
Я из накладной БЭСТ-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] у меня не получается, т к вылезают все накладные, а не только моя. Я обычно работала через временный файл
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 25 Oct 2007 14:02    Post subject: Reply with quote

Попробуйте использовать where для доступа к sclad\mdocm
Back to top
View user's profile Send private message
dshlykov



Joined: 02 Aug 2005
Posts: 172
Location: Дмитрий Шлыков
Occupation: Компания "БЭСТ"
Interests: Москва

PostPosted: 25 Oct 2007 14:19    Post subject: Reply with quote

Марина 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] у меня не получается, т к вылезают все накладные, а не только моя. Я обычно работала через временный файл
Для решения этого вопросы Вам необходимо в источнике передать реквизиты печатаемого документа и сделать фильтр в источнике.
_________________
С уважением, Дмитрий Шлыков
Компания "БЭСТ"
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 25 Oct 2007 14:21    Post subject: Reply with quote

Дениска wrote:
Попробуйте использовать where для доступа к sclad\mdocm

Но опять же в этом where надо задать хотя бы numdoc=, а к DataSet1 обращаться нельзя. Как же бы
Back to top
View user's profile Send private message
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 25 Oct 2007 14:41    Post subject: Reply with quote

dshlykov wrote:
Но этот вопрос можно решить по другому: сформировать текст запроса в переменной (с использованием переменных) и задать его в свойство SQL.
Code:
cSql := 'SELECT .....';
<имя_запроса>.SQL := cSql;
<имя_запроса>.Open;


В какую секцию или форму я должна затолкать этот текст? Пробовала ставить в Report Title в OnBeforPrint, но это присваивание не работает, а работает то свойство SQL, которое было первоначально задано в инспекторе объектов при описании запроса.
Back to top
View user's profile Send private message
dshlykov



Joined: 02 Aug 2005
Posts: 172
Location: Дмитрий Шлыков
Occupation: Компания "БЭСТ"
Interests: Москва

PostPosted: 25 Oct 2007 14:43    Post subject: Reply with quote

Марина 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
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 25 Oct 2007 14:47    Post subject: Reply with quote

dshlykov wrote:
Для решения этого вопросы Вам необходимо в источнике передать реквизиты печатаемого документа и сделать фильтр в источнике.

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



Joined: 02 Aug 2005
Posts: 172
Location: Дмитрий Шлыков
Occupation: Компания "БЭСТ"
Interests: Москва

PostPosted: 25 Oct 2007 14:51    Post subject: Reply with quote

Марина wrote:
Передать реквизиты в источнике - это передача через первый параметр WinReport в Dataset1 ?
Да так.

Марина wrote:
(БЭСТ-4) Как правильно поставить выражение в фильтре?
Смотрите предыдущее сообщение где я описал работу с параметрам
_________________
С уважением, Дмитрий Шлыков
Компания "БЭСТ"
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 25 Oct 2007 14:56    Post subject: Reply with quote

а где я должна написать numdoc=:p1?
Back to top
View user's profile Send private message
dshlykov



Joined: 02 Aug 2005
Posts: 172
Location: Дмитрий Шлыков
Occupation: Компания "БЭСТ"
Interests: Москва

PostPosted: 25 Oct 2007 15:02    Post subject: Reply with quote

Марина wrote:
а где я должна написать numdoc=:p1?

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

_________________
С уважением, Дмитрий Шлыков
Компания "БЭСТ"
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 25 Oct 2007 15:04    Post subject: Reply with quote

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

Пробовала и в событии Onclick кнопки Выполнить, и в событии OnActivate в карточке запроса, запрос не изменяется! Свойство Active запроса стоит False.
Back to top
View user's profile Send private message
dshlykov



Joined: 02 Aug 2005
Posts: 172
Location: Дмитрий Шлыков
Occupation: Компания "БЭСТ"
Interests: Москва

PostPosted: 25 Oct 2007 15:13    Post subject: Reply with quote

Проверьте значение свойства Active перед заполнением свойства SQL:
Code:
MESSAGEBOX(<имя запроса>.Active);
Если значение будет равно true, то значит запрос открывается программно - это необходимо исправи
_________________
С уважением, Дмитрий Шлыков
Компания "БЭСТ"
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 25 Oct 2007 15:56    Post subject: Reply with quote

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 ничего не сказал, как будто не сработал!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование отчетов в БЭСТ-5 All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru