View previous topic :: View next topic |
Author |
Message |
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 24 Oct 2007 12:31 Post subject: Как правильно в SQL-запросе |
|
|
Я формирую в плагине временный файл в каталоге для временных файлов, например GlobalTmpPath+"tmpopl.dbf"
Как правильно написать select по этому файлу в SQL-запросе, заданном в форме?
select * from ? as fi |
|
Back to top |
|
|
dshlykov
Joined: 02 Aug 2005 Posts: 172 Location: Дмитрий Шлыков Occupation: Компания "БЭСТ" Interests: Москва
|
Posted: 25 Oct 2007 10:09 Post subject: |
|
|
Добрый день!
Объект Запрос применяется только к таблицам находящимся в папке предприятия. Если необходимо обратится к другим таблицам, то необходимо использовать источники Foxpro (для БЭСТ-5) или WinReport (для БЭСТ-4+). _________________ С уважением, Дмитрий Шлыков
Компания "БЭСТ" |
|
Back to top |
|
|
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 25 Oct 2007 11:01 Post subject: |
|
|
Видно, что-то я не так сказала и меня не поняли
Я из накладной БЭСТ-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 |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 25 Oct 2007 14:02 Post subject: |
|
|
Попробуйте использовать where для доступа к sclad\mdocm |
|
Back to top |
|
|
dshlykov
Joined: 02 Aug 2005 Posts: 172 Location: Дмитрий Шлыков Occupation: Компания "БЭСТ" Interests: Москва
|
Posted: 25 Oct 2007 14:19 Post subject: |
|
|
Марина 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 |
|
|
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 25 Oct 2007 14:21 Post subject: |
|
|
Дениска wrote: | Попробуйте использовать where для доступа к sclad\mdocm |
Но опять же в этом where надо задать хотя бы numdoc=, а к DataSet1 обращаться нельзя. Как же бы |
|
Back to top |
|
|
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 25 Oct 2007 14:41 Post subject: |
|
|
dshlykov wrote: | Но этот вопрос можно решить по другому: сформировать текст запроса в переменной (с использованием переменных) и задать его в свойство SQL.
Code: | cSql := 'SELECT .....';
<имя_запроса>.SQL := cSql;
<имя_запроса>.Open; |
|
В какую секцию или форму я должна затолкать этот текст? Пробовала ставить в Report Title в OnBeforPrint, но это присваивание не работает, а работает то свойство SQL, которое было первоначально задано в инспекторе объектов при описании запроса. |
|
Back to top |
|
|
dshlykov
Joined: 02 Aug 2005 Posts: 172 Location: Дмитрий Шлыков Occupation: Компания "БЭСТ" Interests: Москва
|
Posted: 25 Oct 2007 14:43 Post subject: |
|
|
Марина wrote: | Но опять же в этом where надо задать хотя бы numdoc=, а к DataSet1 обращаться нельзя. Как же быть? | Это решается через параметры запроса . Далее заходите в свойство 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 |
|
|
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 25 Oct 2007 14:47 Post subject: |
|
|
dshlykov wrote: | Для решения этого вопросы Вам необходимо в источнике передать реквизиты печатаемого документа и сделать фильтр в источнике. |
Передать реквизиты в источнике - это передача через первый параметр WinReport в Dataset1 ? или как? (БЭСТ-4) Как правильно поставить выражение в фильтре?
select * from [sclad\mdocm] as nak
Выражение в фильтре nak.numdoc=[DialogForm.DataSet1."Номер_док"] не работает. Пробовала кругом добавлять квадратные скобки, ничего не получилось, ругается на филь |
|
Back to top |
|
|
dshlykov
Joined: 02 Aug 2005 Posts: 172 Location: Дмитрий Шлыков Occupation: Компания "БЭСТ" Interests: Москва
|
Posted: 25 Oct 2007 14:51 Post subject: |
|
|
Марина wrote: | Передать реквизиты в источнике - это передача через первый параметр WinReport в Dataset1 ? | Да так.
Марина wrote: | (БЭСТ-4) Как правильно поставить выражение в фильтре? | Смотрите предыдущее сообщение где я описал работу с параметрам _________________ С уважением, Дмитрий Шлыков
Компания "БЭСТ" |
|
Back to top |
|
|
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 25 Oct 2007 14:56 Post subject: |
|
|
а где я должна написать numdoc=:p1? |
|
Back to top |
|
|
dshlykov
Joined: 02 Aug 2005 Posts: 172 Location: Дмитрий Шлыков Occupation: Компания "БЭСТ" Interests: Москва
|
Posted: 25 Oct 2007 15:02 Post subject: |
|
|
Марина wrote: | а где я должна написать numdoc=:p1? |
В тексте запроса:
Code: | select * from [sclad\mdocm] as nak Where nak.numdoc=:p1 |
_________________ С уважением, Дмитрий Шлыков
Компания "БЭСТ" |
|
Back to top |
|
|
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 25 Oct 2007 15:04 Post subject: |
|
|
dshlykov wrote: | Марина wrote: | В какую секцию или форму я должна затолкать этот текст? Пробовала ставить в Report Title в OnBeforPrint, но это присваивание не работает, а работает то свойство SQL, которое было первоначально задано в инспекторе объектов при описании запроса. | Обычно все операции с источниками делаются на карточке запроса. Или в событии Onclick кнопки Выполнить или в событии OnActivate в карточке запроса (если пользователь не задает параметры отчета). Проверьте свойство Active запроса, оно должно иметь значение False так как Вы будете изменять его параметры. Если значение стоит True запрос перерасчитыватся не будет! |
Пробовала и в событии Onclick кнопки Выполнить, и в событии OnActivate в карточке запроса, запрос не изменяется! Свойство Active запроса стоит False. |
|
Back to top |
|
|
dshlykov
Joined: 02 Aug 2005 Posts: 172 Location: Дмитрий Шлыков Occupation: Компания "БЭСТ" Interests: Москва
|
Posted: 25 Oct 2007 15:13 Post subject: |
|
|
Проверьте значение свойства Active перед заполнением свойства SQL:
Code: | MESSAGEBOX(<имя запроса>.Active); | Если значение будет равно true, то значит запрос открывается программно - это необходимо исправи _________________ С уважением, Дмитрий Шлыков
Компания "БЭСТ" |
|
Back to top |
|
|
Марина
Joined: 27 Aug 2002 Posts: 501 Location: Кондрина Марина Александровна Occupation: ОАО БКО программист Interests: Боровичи Новгородской обл
|
Posted: 25 Oct 2007 15:56 Post subject: |
|
|
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 |
|
|
|